Display XWikiClass UML Diagram

Version 7.2 by Jeremie Bousquet on 2013/05/29 08:25

cogGenerates nice UML diagram for XWiki Classes of a specific space using plantuml macro
Typesnippet
Category
Developed by

Jeremie Bousquet

Rating
0 Votes
LicenseGNU Lesser General Public License 2.1

Table of contents

Description

  • Put the following code in a page:
{{velocity wiki="true"}}
#set($space = $request.space)

#set($xwql = "select doc.fullName from Document doc where doc.space='$space'")
#set($docs = $xwiki.wrapDocs($services.query.xwql($xwql).execute()))
#if($request.code)
{{code}}
#end
{{plantuml}}
package $space
#foreach($document in $docs)
  #set($deps = [])
  #set($multi = [])
  #set($baseclazz = $!document.getxWikiClass().getXWikiClass())
  #if($!baseclazz)
    #set($props = $baseclazz.getEnabledProperties())
    #if($props.size() > 0)
class $document.fullName {
      #foreach($prop in $baseclazz.getEnabledProperties())
+$prop.getClassType() $prop.getName()
        #if($prop.class.name == "com.xpn.xwiki.objects.classes.DBListClass" && "$!prop.getClassname()" != "")
          #if($prop.isMultiSelect())
            #set($discard = $deps.add([$prop.getClassname(), true, $prop.name]))
          #else
            #set($discard = $deps.add([$prop.getClassname(), false, $prop.name]))
          #end
        #end
      #end
} ## end class

    #end
    #if($deps.size() > 0)
      #foreach($dep in $deps)
$document.fullName "1" o-- #if($dep[1]) "0..n" #else "0..1" #end $dep[0] : $dep[2]

      #end
    #end
  #end
#end
{{/plantuml}}
#if($request.code)
{{/code}}
#end
{{/velocity}}
  • Save that page
  • Append "?space=<space name>" to generate and display UML class diagram for classes found from that space
  • Append "&code=true" to previous url to only display generated plantuml macro code (and not generate image). This can be useful if you want to update the diagram "by hand".

Current snippet can (should) be improved, but result is already nice. Associations are displayed (only for DBList properties having class name filled, so if you fill HQL query, please also specify class name for better display).

Sample result:

sample_uml.png

Get Connected