├── .gitignore
├── jars
├── jetty-6.1.1.jar
├── mxgraph-core.jar
├── servlet-api.jar
└── jetty-util-6.1.1.jar
├── .project
├── .classpath
├── README.md
└── src
└── com
└── mxgraph
└── examples
└── DataServlet.java
/.gitignore:
--------------------------------------------------------------------------------
1 | /classes/
2 |
--------------------------------------------------------------------------------
/jars/jetty-6.1.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jgraph/drawio-data-driven/HEAD/jars/jetty-6.1.1.jar
--------------------------------------------------------------------------------
/jars/mxgraph-core.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jgraph/drawio-data-driven/HEAD/jars/mxgraph-core.jar
--------------------------------------------------------------------------------
/jars/servlet-api.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jgraph/drawio-data-driven/HEAD/jars/servlet-api.jar
--------------------------------------------------------------------------------
/jars/jetty-util-6.1.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jgraph/drawio-data-driven/HEAD/jars/jetty-util-6.1.1.jar
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | drawio-data-driven
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 |
15 | org.eclipse.jdt.core.javanature
16 |
17 |
18 |
--------------------------------------------------------------------------------
/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # drawio-data-driven
2 |
3 | Server-side example for creating and/or updating an existing diagram using the Java API and the [data-driven plugin](http://www.draw.io/plugins/update.js) (via p=update).
4 |
5 | See https://github.com/jgraph/drawio-data-driven/blob/master/src/com/mxgraph/examples/DataServlet.java#L29 for documentation.
6 |
7 | A general demo of the data-driven plugin is available [here](https://www.draw.io/?lightbox=1&highlight=0000ff&edit=_blank&p=update#R7Vtdc6s2EP01fu2AxOdj6ps0fbgzd5rptK8yyFgNII8s28n99RUgbIREbGIDdhs%2FZMxqJaFzdle7kjOD8%2BztN4bWq%2B80xukMWPHbDH6bAeA7jvhbCN4rgWu7lSBhJK5E9lHwQn5iKbSkdEtivFEUOaUpJ2tVGNE8xxFXZIgxulfVljSVs8rx1yjBikYheIlQqkv%2FIjFfVdIAeEf5MybJqp7Z9sKqZYGi14TRbS7nmwG4LD9Vc4bqseSLbFYopvvGpPBxBueMUl59o4t%2FivUBK0ULAbEcs%2Bi5XceI4z%2BZFMY4o82G33OO2Q7JVmBZckLSBKKcInub41Sw91Q9ii9yUqXVavG2RgznvLmWp44O8n3Fu2wluvMUkUyInlEepyRPxNcfjEZ4s5Gg8PeaiM2eZCnKxdOvK8rIT5rzck2WEGw4YlzaDiwES5Kmc5pSVvaFy3Dp47hUZPQVN1qgB0NYtOhrkcvbYcbxW5sXYe6YZpizd6HyVkNb9ZCWDuXjvmE2gZStGibj1IQgaarJYWTQ5ELCaYYWdkL7HeXCRlkvPK8BH%2BgLnwkv14AXuAZeroaXBpDoIIJMgc9%2BRTh%2BWaOoaNmLMFdgxrMCLbtAS0D3hDKSFsQ%2F43SHOYmQbJBWaQP53ADPKj9CjlKS5EIW4cJVTTgHYAE9T2cmdnEQO0b8YV%2F8HdV8A1ejAxrYgP3JMEWyhy0vrRDPisgK7QIWacHHSKb4Zc3koedBXWW8wWh%2Fsy7jd6FTEn0FkMMWyLrN25YxRvRG%2BVT09jQP%2BFtzAbai2WK7uQkX8KIAL5YGF0A4WEbXYeeQdUzjA%2Bs1o7tPeEDV7y7sH3g34wD%2BlwPoe3AwlgNodARn7MixSM3lI2Ui7Cc0R%2BnjUdoNwYZuWYSVvV%2FkjAnmXZsIsIrZPsSM4RRxslOd8hIIwtEgMK23iYc3FQR1AB4BA89gBq1IOgkC9mgI6MttguFPhoBeJw6FgD92KCi7PjCG3hsKa0pyvmmM%2FKMQNKJy6CpR2W2V2S11u5XJq%2BriSzX%2FkYvDQs7NVP7AO4L3vROVqttd5CluOxOcLk8Bujt8JSoenCxRMZy1DBWeWg6jBqp62sED9Ie1iiXe8ZfPlizV%2BnB8FyHBa%2BfGE4YEvXgfygTrkQ1pksbeFMnCVxlnMNXAmi46jlfHdZuhEiavnseasy7fVzG328fU1avLXh%2Bkb354YqBqddpAp1M5%2FdZgvEzblGpr29vEeXZgq3m2fSLRdluHWfZlmbZGj6Ox8xBFYlvjSDJ%2FF%2Fc5EpzDtc0Q9zumFOWxjMDHzOQb4mh2KjEpO0mUSZ7UfUbMS5y%2BODu3c6Rq6xb7n9uMe%2FPjTnemap9zzfmJ%2BO7o8b3DcdSAX9vHJCXLfIWj177xoOx0X%2FFAK40njAcD1SkG%2B6tNq2luHeRNUabY%2F4Mypbel%2Bu50kXGgMsVgmZ1WqETG6U7bz7l1uu%2BfwvQ2zCnr54EuwEwh01CS1dYwvh3Cge69zlx4Z%2F4ycU3qe62a1DtRk7YuLlr6F9ek9kCn30Cn6Y5YatdgdYLVxVJbH8gbvmuxZDg6GIolU%2BJ1awc7Hmg5UXDKicLL9K3rOt1Qvwwx0FnL7sHrPL%2FXvbgThh%2BoX0wSHGjnNpF0R6ExcG6KpPG2L8Pvi26VI%2BCqHEHrou1IPB7%2Fb6VSP%2F5vEHz8Fw%3D%3D). (The updateUrl and updateInterval are embedded in the metadata of the diagram encoded in the #R part in this example.)
8 |
--------------------------------------------------------------------------------
/src/com/mxgraph/examples/DataServlet.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2017, JGraph Ltd
3 | */
4 | package com.mxgraph.examples;
5 |
6 | import java.io.IOException;
7 | import java.io.OutputStream;
8 | import java.io.PrintWriter;
9 | import java.util.zip.GZIPOutputStream;
10 |
11 | import javax.servlet.ServletException;
12 | import javax.servlet.http.HttpServlet;
13 | import javax.servlet.http.HttpServletRequest;
14 | import javax.servlet.http.HttpServletResponse;
15 |
16 | import org.mortbay.jetty.Handler;
17 | import org.mortbay.jetty.Server;
18 | import org.mortbay.jetty.handler.HandlerList;
19 | import org.mortbay.jetty.handler.ResourceHandler;
20 | import org.mortbay.jetty.servlet.Context;
21 | import org.mortbay.jetty.servlet.ServletHolder;
22 | import org.w3c.dom.Node;
23 |
24 | import com.mxgraph.io.mxCodec;
25 | import com.mxgraph.util.mxXmlUtils;
26 | import com.mxgraph.view.mxGraph;
27 |
28 | /**
29 | * Use all the JARS in the jars directory of this repo to run the standalone
30 | * example. Note that the update plugin only runs in lightbox mode. The
31 | * documentation is in the source code of the plugin at
32 | *
33 | * http://www.draw.io/plugins/update.js
34 | *
35 | * To use this servlet, run it on a given port and point your browser to
36 | * (assuming SSL is not used and assuming your browser runs on localhost):
37 | *
38 | * http://www.draw.io/?lightbox=1&p=update&https=0&update-interval=2000&update-url=http://localhost:8080/data
39 | */
40 | public class DataServlet extends HttpServlet
41 | {
42 | private static final long serialVersionUID = -4442397463551836919L;
43 |
44 | public static int PORT = 8080;
45 |
46 | protected void writeResponse(HttpServletRequest request, PrintWriter writer)
47 | {
48 | // Creates graph with model
49 | mxGraph graph = new mxGraph();
50 | Object parent = graph.getDefaultParent();
51 | Object v1, v2;
52 |
53 | graph.getModel().beginUpdate();
54 | try
55 | {
56 | v1 = graph.insertVertex(parent, "v1", "Hello", 20, 20, 80, 30);
57 | v2 = graph.insertVertex(parent, "v2", "World!", 200, 150, 80, 30);
58 | graph.insertEdge(parent, null, "e1", v1, v2);
59 | }
60 | finally
61 | {
62 | graph.getModel().endUpdate();
63 | }
64 |
65 | mxCodec codec = new mxCodec();
66 | Node node = codec.encode(graph.getModel());
67 |
68 | // Updates URL after initial request
69 | writer.println("");
70 |
71 | // Checks if model is initialized
72 | String init = request.getParameter("initialized");
73 |
74 | if (init == null)
75 | {
76 | writer.println("");
77 | writer.println(mxXmlUtils.getXml(node));
78 | writer.println("");
79 | writer.println("");
80 | }
81 | else
82 | {
83 | String c1 = (Math.random() < 0.5) ? "red" : ((Math.random() < 0.5) ? "green" : "blue");
84 | String c2 = (Math.random() < 0.5) ? "red" : ((Math.random() < 0.5) ? "green" : "blue");
85 |
86 | // Updates the color (other possible updates include label,
87 | // metadata, tooltip, geometry)
88 | writer.println(
89 | "");
90 | writer.println(
91 | "");
92 | }
93 |
94 | writer.println("");
95 |
96 | }
97 |
98 | protected void doPost(HttpServletRequest request,
99 | HttpServletResponse response) throws ServletException, IOException
100 | {
101 | request.setCharacterEncoding("UTF-8");
102 | response.setCharacterEncoding("UTF-8");
103 | response.addHeader("Access-Control-Allow-Origin", "*");
104 | response.addHeader("Access-Control-Allow-Methods",
105 | "POST, GET, OPTIONS, PUT, DELETE, HEAD");
106 | response.setContentType("text/xml; charset=UTF-8");
107 |
108 | OutputStream out = response.getOutputStream();
109 | String encoding = request.getHeader("Accept-Encoding");
110 |
111 | // Supports GZIP content encoding
112 | if (encoding != null && encoding.indexOf("gzip") >= 0)
113 | {
114 | response.setHeader("Content-Encoding", "gzip");
115 | out = new GZIPOutputStream(out);
116 | }
117 |
118 | PrintWriter writer = new PrintWriter(out);
119 | writeResponse(request, writer);
120 | writer.flush();
121 | writer.close();
122 | }
123 |
124 | public static void main(String[] args) throws Exception
125 | {
126 | Server server = new Server(PORT);
127 |
128 | // Servlets
129 | Context context = new Context(server, "/");
130 | context.addServlet(new ServletHolder(new DataServlet()), "/data");
131 |
132 | ResourceHandler fileHandler = new ResourceHandler();
133 | fileHandler.setResourceBase(".");
134 |
135 | HandlerList handlers = new HandlerList();
136 | handlers.setHandlers(new Handler[] { fileHandler, context });
137 | server.setHandler(handlers);
138 |
139 | System.out.println("Go to http://www.draw.io/?lightbox=1&test=1&p=update&https=0&update-interval=2000&update-url=http://localhost:" + PORT + "/data");
140 |
141 | server.start();
142 | server.join();
143 | }
144 | }
145 |
--------------------------------------------------------------------------------