Writing your own templates  
  We do not discuss in detail here, how to write Velocity templates, but we want to give some ideas on writing templates to be used with AXgen. Before you start you may wish to take a look at the Jakarta Velocity site to get familiar with Velocity concepts.. Furthermore you may wish to take a closer look at AXgen's API doc, especially the de.armax.ax.devtool.uml package containg our UML abstraction layer to learn about the capabilities and ideas of the metamodel classes you may use in the templates.  
  Developing a Template  
  We choosed Velocity because it provides powefull means by giving access to arbitrary Java objects inside your templates allowing a great flexibility generating code from UML metamodels. You may access the UML metamodel through AXgen's own UML abstraction layer from inside the templates, providing easy access to model elements and their different properties. As AXgen is independent of a specific UML implementation, your templates will equally be UML implementation independant.  
  AXgen iterates the model and starts generation for each model element that matches certain criteria (type of the element, values of some attributes, ...). The current model element is accessible in the templates through the velocity variable "$axelement", this variable may contain an AXclass or an AXpackage depending on the configuration. This it what it may look like with Velocity:  
#set ($classname = "$axelement.getName()")
#set ($attribs  = $axelement.getAttributes())
#set ($assocs = $axelement.getXToNAssociations(false))
  Looking at the code snippet you notice that the first assignment is done with quotes. The result is that $classname is a String variable whereas $attribs is a List of AXattribute objects and $assocs is a List of AXassociation objects (presuming that "$axelement" contains an instance of AXclass).  
  The next snippet shows you how to iterate over a List and use if statements to produce code.  
#foreach ($attrib in $attribs)
  #if ($attrib.getType().isVoidType() == false)
    private $attrib.getType().getQualifiedName() $attrib.getNameForVariable();
  For more complex code, AXgen allows you to define a helper class accessible in the templates through the "$helper" variable. The helper class may contain arbitrary methods that can be used in the template. By default, AXgen uses AXojbHelper as helper class. Feel free to write your own helper class to to do any formatting or transformation operations. For details on helper classes see the API doc for AXgen and the API doc for AXojbHelper.  
  As mentioned before this is just a crude introduction to Velocity. If you miss some explanation please give us feedback. It may also be interesting to have a look at the templates shipped with AXgen to get some ideas on writing templates.  
  See the Use AXgen section to learn how to configure AXgen to use your own templates.