# Wiki source code of PlantUMLMacroGClass

Last modified by Helge Dahl on 2018/03/07 23:26

#### Export

#### Office Formats

Export as PDF Export as ODT Export as RTF

#### Other Formats

Export as HTML
Hide last authors

| 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&uml=" + umlref + "\" style=\"max-width:100%\"></p>" + "{{/html}}"
| 1.1 | 55 | } else {
|  | 56 | if( !enableImageMap ){
|  | 57 | return "[[image:"+umldoc.getURL("get")+"?xpage=plain&uml="+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&uml=" + umlref + (preview ? "&preview=true" : "") + "\" style=\"max-width:200%\" usemap=\"#umlmap"+umlref + "\"/>" + imgMapHtml + "</p>" +
|  | 73 | "{{/html}}"
|  | 74 | }
|  | 75 | }
|  | 76 | }
|  | 77 | }
|  | 78 | }
|  | 79 |
|  | 80 | /* *# */

# Applications

# Tips

You can click on the arrows next to the breadcrumb elements to quickly navigate to sibling and children pages.

# Need help?

If you need help with XWiki you can contact:

- Community Support
- Professional Support