Wiki source code of PlantUMLMacroGClass
Last modified by Helge Dahl on 2018/03/07 23:26
1 | /* Groovy Class #* */ |
2 | |
3 | import net.sourceforge.plantuml.* |
4 | |
5 | class PlantUMLMacroGClass { |
6 | def umldoc; |
7 | def ctx; |
8 | def umltext; |
9 | def imageFormat; |
10 | def enableImageMap; |
11 | |
12 | void setObjects( doc, context, text, format, imageMap) { |
13 | umldoc = doc |
14 | ctx = context |
15 | umltext = text |
16 | imageFormat = format |
17 | enableImageMap = imageMap |
18 | } |
19 | |
20 | String run( request, response) { |
21 | // Using umlref, each diagram of the wiki page has its own unique url |
22 | def umlref="1" |
23 | if (null != ctx.umlref) { |
24 | umlref=Integer.toString(Integer.valueOf(ctx.umlref)+1) |
25 | } |
26 | ctx.put("umlref", umlref) |
27 | |
28 | if("true".equals(request.preview)){ |
29 | umltext = request.getSession().getAttribute("preview_uml_" + umlref) |
30 | //request.getSession().removeAttribute("preview_uml_" + umlref) |
31 | } |
32 | |
33 | def reader = new SourceStringReader("@startuml\n"+umltext+"\n@enduml") |
34 | if ("plain".equals(request.xpage)) { |
35 | if( !umlref.equals(request.uml) ){ |
36 | return ""; |
37 | } |
38 | response.setContentType( "svg".equals(imageFormat) ? "image/svg+xml" : "image/png" ) |
39 | def img = response.getOutputStream() |
40 | def desc = reader.outputImage(img, new FileFormatOption("svg".equals(imageFormat) ? FileFormat.SVG : FileFormat.PNG)) |
41 | img.close(); |
42 | return "" |
43 | } else if("xpart".equals(request.xpage)) { |
44 | return "" |
45 | } else { |
46 | def preview = false |
47 | if("wysiwyginput".equals(request.xpage) || request.getRequestURL().indexOf("/bin/preview/") != -1){ |
48 | imageFormat = "png" |
49 | enableImageMap = true |
50 | preview = true |
51 | request.getSession().setAttribute("preview_uml_" + umlref, umltext) |
52 | } |
53 | if("svg".equals(imageFormat)){ |
54 | return "{{html clean=\"false\"}}" + "<p><embed src=\"" + umldoc.getURL("get") + "?xpage=plain¨=" + umlref + "\" style=\"max-width:100%\"></p>" + "{{/html}}" |
55 | } else { |
56 | if( !enableImageMap ){ |
57 | return "[[image:"+umldoc.getURL("get")+"?xpage=plain¨="+umlref+"||style=\"max-width:100%\"]]" |
58 | } else { |
59 | def imgMapHtml = "<map name=\"umlmap"+umlref+"\">"; |
60 | String[] mapLines = new String[0]; |
61 | //String map = reader.generateImage(new NullOutputStream(), new FileFormatOption(FileFormat.PNG, false)); |
62 | String map = reader.getCMapData(0, new FileFormatOption(FileFormat.PNG, false)); |
63 | if( map != null ){ |
64 | mapLines = map.split("[\\r\\n]"); |
65 | } |
66 | for (int i = 1; (i + 1) < mapLines.length; i++) { |
67 | imgMapHtml += mapLines[i] + "\n"; |
68 | } |
69 | imgMapHtml += "</map>" |
70 | int random = (int)(Math.random() * 100) |
71 | return "{{html clean=\"false\"}}" + |
72 | "<p><img src=\"" + umldoc.getURL("get") + "?xpage=plain¨=" + umlref + (preview ? "&preview=true" : "") + "\" style=\"max-width:200%\" usemap=\"#umlmap"+umlref + "\"/>" + imgMapHtml + "</p>" + |
73 | "{{/html}}" |
74 | } |
75 | } |
76 | } |
77 | } |
78 | } |
79 | |
80 | /* *# */ |