home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2005 February / PCpro_2005_02.ISO / files / opensource / Dia_0.94 / dia-setup-0.94.exe / dia-uml2java.xsl < prev    next >
Encoding:
Extensible Markup Language  |  2002-06-24  |  6.3 KB  |  211 lines

  1. <?xml version="1.0"?>
  2. <!-- 
  3.      Transform dia UML objects to Java classes 
  4.  
  5.      Copyright(c) 2002 Matthieu Sozeau <mattam@netcourrier.com>
  6.  
  7.      This program is free software; you can redistribute it and/or modify
  8.      it under the terms of the GNU General Public License as published by
  9.      the Free Software Foundation; either version 2 of the License, or
  10.      (at your option) any later version.
  11.      
  12.      This program is distributed in the hope that it will be useful,
  13.      but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.      GNU General Public License for more details.
  16.      
  17.      You should have received a copy of the GNU General Public License
  18.      along with this program; if not, write to the Free Software
  19.      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  20.  
  21. -->
  22.  
  23. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  24.   version="1.0">
  25.  
  26.   <xsl:output method="text"/>
  27.  
  28.   <xsl:param name="directory"/>
  29.  
  30.   <xsl:param name="ident">
  31.     <xsl:text>    </xsl:text>
  32.   </xsl:param>
  33.  
  34.   <!-- Default visibility of attrs and ops -->
  35.   <xsl:param name="visibility" select="'private'"/>
  36.     
  37.   <xsl:template match="package">
  38.     <xsl:text>package </xsl:text>
  39.     <xsl:value-of select="name"/>
  40.     <xsl:text>; </xsl:text>    
  41.     <xsl:apply-templates/>
  42.   </xsl:template>
  43.  
  44.   
  45.   <xsl:template match="class">
  46.     <xsl:document href="{$directory}{@name}.java" method="text">    
  47.       <xsl:if test="comment">
  48.     <xsl:text>/*     </xsl:text>
  49.     <xsl:value-of select="comment"/>
  50.     <xsl:text>  */ </xsl:text>
  51.       </xsl:if>
  52.  
  53.       <xsl:text> </xsl:text>        
  54.       <xsl:if test="@abstract">        
  55.     <xsl:text>abstract </xsl:text>
  56.       </xsl:if>
  57.       <xsl:text>class </xsl:text>
  58.       <xsl:value-of select="@name"/>
  59.       <xsl:if test="@stereotype!=''">
  60.     <xsl:text> : implements </xsl:text>
  61.     <xsl:value-of select="@stereotype"/>      
  62.       </xsl:if>
  63.       <xsl:text> { </xsl:text>
  64.       <xsl:apply-templates select="attributes"/>
  65.       <xsl:text> </xsl:text>
  66.       <xsl:apply-templates select="operations"/>
  67.       <xsl:text> } </xsl:text>
  68.     </xsl:document>
  69.   </xsl:template>
  70.   
  71.   <xsl:template match="operations|attributes">
  72.     <xsl:if test="*[@visibility='private']">
  73.       <xsl:apply-templates select="*[@visibility='private']"/>
  74.     </xsl:if>
  75.     <xsl:if test="*[@visibility='protected']">
  76.       <xsl:apply-templates select="*[@visibility='protected']"/>
  77.     </xsl:if>
  78.     <xsl:if test="*[@visibility='public']">
  79.       <xsl:apply-templates select="*[@visibility='public']"/>
  80.     </xsl:if>
  81.     <xsl:if test="*[not(@visibility)]">
  82.       <xsl:apply-templates select="*[not(@visibility)]"/>
  83.     </xsl:if>
  84.   </xsl:template>
  85.  
  86.  
  87.   <xsl:template match="attribute">
  88.     <xsl:if test="comment!=''">
  89.       <xsl:text> </xsl:text>
  90.       <xsl:value-of select="$ident"/>
  91.       <xsl:text>/* </xsl:text>
  92.       <xsl:value-of select="$ident"/>
  93.       <xsl:text> * </xsl:text>
  94.       <xsl:value-of select="comment"/>
  95.       <xsl:text> </xsl:text>
  96.       <xsl:value-of select="$ident"/>
  97.       <xsl:text> */ </xsl:text>
  98.     </xsl:if>
  99.  
  100.     <xsl:value-of select="$ident"/>
  101.     <xsl:if test="not(@visibility)">
  102.       <xsl:if test="$visibility=''">
  103.         <xsl:message terminate="yes">
  104.           You must set a valid visibility attribute for attribute <xsl:value-of select="name"/>
  105.         </xsl:message>
  106.       </xsl:if>
  107.       <xsl:value-of select="$visibility"/>
  108.     </xsl:if>
  109.     <xsl:value-of select="@visibility"/>
  110.     <xsl:text> </xsl:text>
  111.     <xsl:if test="@class_scope">
  112.       <xsl:text>static </xsl:text>
  113.     </xsl:if>
  114.     <xsl:value-of select="type"/>
  115.     <xsl:text> </xsl:text>
  116.     <xsl:value-of select="name"/>
  117.     <xsl:if test="value">
  118.       <xsl:text> = </xsl:text>
  119.       <xsl:value-of select="value"/>
  120.     </xsl:if>
  121.     <xsl:text>; </xsl:text>
  122.   </xsl:template>
  123.  
  124.   <xsl:template match="operation">
  125.     <xsl:if test="comment!=''">
  126.       <xsl:text> </xsl:text>
  127.       <xsl:value-of select="$ident"/>
  128.       <xsl:text>/* </xsl:text>
  129.       <xsl:value-of select="$ident"/>
  130.       <xsl:text> * </xsl:text>
  131.       <xsl:value-of select="comment"/>
  132.       <xsl:text> </xsl:text>
  133.       <xsl:for-each select="parameters/parameter/comment">
  134.     <xsl:value-of select="$ident"/>
  135.     <xsl:text> * @</xsl:text>
  136.     <xsl:value-of select="../name"/>
  137.     <xsl:text> </xsl:text>
  138.       </xsl:for-each>
  139.       <xsl:value-of select="$ident"/>
  140.       <xsl:text> */ </xsl:text>
  141.     </xsl:if>
  142.  
  143.     <xsl:value-of select="$ident"/>
  144.     <xsl:if test="not(@visibility)">
  145.       <xsl:if test="$visibility=''">
  146.         <xsl:message terminate="yes">
  147.           You must set a valid visibility attribute for method <xsl:value-of select="name"/>
  148.         </xsl:message>
  149.       </xsl:if>
  150.       <xsl:value-of select="$visibility"/>
  151.     </xsl:if>
  152.  
  153.     <xsl:value-of select="@visibility"/>
  154.     <xsl:text> </xsl:text>
  155.  
  156.     <xsl:choose>
  157.       <xsl:when test="@inheritance='leaf'">
  158.         <xsl:text>final </xsl:text>
  159.       </xsl:when>
  160.       <xsl:when test="@inheritance='abstract'">
  161.         <xsl:text>abstract </xsl:text>
  162.       </xsl:when>      
  163.     </xsl:choose>
  164.     
  165.     <xsl:if test="@class_scope">
  166.       <xsl:text>static </xsl:text>
  167.     </xsl:if>
  168.     
  169.     <!-- Constructor has no type -->
  170.     <xsl:if test="type">
  171.       <xsl:value-of select="type"/>      
  172.       <xsl:text> </xsl:text>
  173.     </xsl:if>
  174.  
  175.     <xsl:value-of select="name"/>
  176.  
  177.     <xsl:text>(</xsl:text>
  178.     <xsl:for-each select="parameters/*">
  179.       <xsl:choose>
  180.         <xsl:when test="@kind='in'">
  181.           <xsl:text>const </xsl:text>
  182.         </xsl:when>
  183.       </xsl:choose>
  184.  
  185.       <xsl:value-of select="type"/>
  186.       
  187.       <xsl:text> </xsl:text>
  188.       <xsl:value-of select="name"/>
  189.       <xsl:if test="not(position()=last())">
  190.         <xsl:text>, </xsl:text>        
  191.       </xsl:if>
  192.     </xsl:for-each>
  193.  
  194.     <xsl:text>)</xsl:text>
  195.     <xsl:text> { </xsl:text>
  196.     <xsl:value-of select="$ident"/>
  197.     <xsl:text> </xsl:text>
  198.     <xsl:value-of select="$ident"/>
  199.     <xsl:text>} </xsl:text>
  200.   </xsl:template>
  201.  
  202.  
  203.   <xsl:template match="text()">    
  204.   </xsl:template>
  205.  
  206.   <xsl:template match="node()|@*">
  207.     <xsl:apply-templates match="node()|@*"/>  
  208.   </xsl:template>
  209.  
  210. </xsl:stylesheet>
  211.