Wiki source code of PlantUMLMacroGClass
Version 1.8 by Helge Dahl on 2018/03/07 23:25
![]() |
1.1 | 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)){ | ||
![]() |
1.8 | 54 | return "{{html clean=\"false\"}}" + "<p><embed src=\"" + umldoc.getURL("get") + "?xpage=plain¨=" + umlref + "\"></p>" + "{{/html}}" |
![]() |
1.1 | 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 | /* *# */ |