Wiki source code of PlantUMLMacroGClass
Last modified by Helge Dahl on 2018/03/07 23:26
| |
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.9 | 54 | return "{{html clean=\"false\"}}" + "<p><embed src=\"" + umldoc.getURL("get") + "?xpage=plain¨=" + umlref + "\" style=\"max-width:100%\"></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 | /* *# */ |