├── .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 | --------------------------------------------------------------------------------