/[volute]/trunk/projects/theory/snapdm/res/intermediate2ddl.xsl
ViewVC logotype

Diff of /trunk/projects/theory/snapdm/res/intermediate2ddl.xsl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 218 by gerard.lemson, Mon Apr 14 14:58:00 2008 UTC revision 219 by gerard.lemson, Tue Apr 15 06:23:24 2008 UTC
# Line 36  Line 36 
36    <xsl:param name="xslLastModified"/>    <xsl:param name="xslLastModified"/>
37        
38        
39    <xsl:param name="schema"/> <!--  select="'org.ivoa.'" -->    <xsl:param name="schema"/> <!--  select="'SNAP.'" -->
40        
41        
42    <xsl:variable name="lastModified">    <xsl:variable name="lastModified">
# Line 46  Line 46 
46      </xsl:choose>      </xsl:choose>
47    </xsl:variable>    </xsl:variable>
48        
49      <xsl:variable name="defaultVarcharLength" select="'256'"/>
50        
51        
52    <xsl:template match="/">    <xsl:template match="/">
# Line 58  Line 59 
59    <xsl:template match="model">    <xsl:template match="model">
60      <xsl:message>Model = <xsl:value-of select="name"></xsl:value-of></xsl:message>      <xsl:message>Model = <xsl:value-of select="name"></xsl:value-of></xsl:message>
61            
62      <xsl:apply-templates select="." mode="modelVersion" />  
63    -- last modification date of the UML model <xsl:value-of select="$lastModified"/>&cr;
64    
65      <xsl:apply-templates select=".//objectType[not(extends)]" mode="singleTable"/>      <xsl:apply-templates select=".//objectType[not(extends)]" mode="singleTable"/>
66    </xsl:template>      </xsl:template>  
67        
# Line 69  Line 72 
72  <!-- generate a single table for the whole object hierarchy below the matched objectType -->  <!-- generate a single table for the whole object hierarchy below the matched objectType -->
73      <xsl:variable name="tableName" select="name" />      <xsl:variable name="tableName" select="name" />
74            
75    -- last modification date of the UML model <xsl:value-of select="$lastModified"/>    CREATE TABLE <xsl:value-of select="$tableName"/> (
76    CREATE TABLe <xsl:value-of select="$tableName"/> (      id bigint NOT NULL
77        <xsl:apply-templates select="attribute" mode="objectType" />      <xsl:apply-templates select="." mode="hierarchy"/>
78        <xsl:apply-templates select="reference" />    );&cr;&cr;
79    </xsl:template>    </xsl:template>
80        
81        
82        
83        
   <xsl:template name="dataType">  
     <xsl:param name="prefix"/>  
     <xsl:apply-templates select="attribute" mode="dataType">  
       <xsl:with-param name="prefix" select="$prefix"/>  
     </xsl:apply-templates>  
         
   </xsl:template>  
84        
85      <xsl:template match="objectType" mode="hierarchy">
86        <xsl:variable name="xmiid" select="@xmiid"/>
87        
88    -- fields from <xsl:value-of select="name"/>
89        <xsl:apply-templates select="attribute" />
90        <xsl:apply-templates select="reference" />
91        <xsl:apply-templates select="/model//objectType[extends/datatype/@xmiidref = $xmiid]" mode="hierarchy"/>
92      </xsl:template>
93        
94    <xsl:template match="datatype" mode="SQLType">  
95        
96      <xsl:template match="attribute" >
97      <xsl:choose>      <xsl:choose>
98        <xsl:when test="@type">        <xsl:when test="datatype/@class">
99          <xsl:choose>          <xsl:apply-templates select="." mode="complex"/>
           <xsl:when test="@type = 'boolean'">bit</xsl:when>  
           <xsl:when test="@type = 'p_boolean'">bit</xsl:when>  
           <xsl:when test="@type = 'integer'">integer</xsl:when>  
           <xsl:when test="@type = 'p_integer'">integer</xsl:when>  
           <xsl:when test="@type = 'long'">bigint</xsl:when>  
           <xsl:when test="@type = 'p_long'">bigint</xsl:when>  
           <xsl:when test="@type = 'datetime'">dateTime</xsl:when>  
           <xsl:when test="@type = 'real'">float</xsl:when>  
           <xsl:when test="@type = 'p_real'">float</xsl:when>  
           <xsl:when test="@type = 'double'">real</xsl:when>  
           <xsl:when test="@type = 'p_double'">real</xsl:when>  
           <xsl:otherwise>String</xsl:otherwise>  
         </xsl:choose>  
100        </xsl:when>        </xsl:when>
101        <xsl:otherwise>        <xsl:otherwise>
102          <xsl:variable name="val">          <xsl:apply-templates select="." mode="simple"/>
           <xsl:call-template name="upperCase">  
             <xsl:with-param name="val" select="@class"/>  
           </xsl:call-template>  
         </xsl:variable>  
         <xsl:if test="$root_package"><xsl:value-of select="concat($root_package,'.')"/></xsl:if><xsl:value-of select="@package"/>.<xsl:value-of select="$val"/>  
103        </xsl:otherwise>        </xsl:otherwise>
104      </xsl:choose>      </xsl:choose>
105    </xsl:template>    </xsl:template>
   
     
     
     
     
   <xsl:template match="attribute" mode="objectType">  
     <xsl:variable name="columnName" select="name"/>  
     <xsl:variable name="type"><xsl:apply-templates select="datatype" mode="SQLType"/></xsl:variable>  
     <xsl:variable name="defaultValue"><xsl:apply-templates select="datatype" mode="DefaultValue"/></xsl:variable>  
     /**  
     * Attribute <xsl:value-of select="name"/> :  
     * <xsl:apply-templates select="." mode="desc" />  
     */  
     private <xsl:value-of select="$type"/>&bl;<xsl:value-of select="name"/> = <xsl:value-of select="$defaultValue"/>;  
   </xsl:template>  
     
     
     
     
   <xsl:template match="attribute" mode="getset">  
     <xsl:param name="modifier"/>  
     <xsl:variable name="type"><xsl:apply-templates select="datatype" mode="JavaType"/></xsl:variable>  
     <xsl:variable name="name">  
       <xsl:call-template name="upperCase">  
         <xsl:with-param name="val" select="name"/>  
       </xsl:call-template>  
     </xsl:variable>  
     /**  
     * Returns <xsl:value-of select="name"/> Attribute  
     * @return <xsl:value-of select="name"/> Attribute  
     */  
     public <xsl:value-of select="$modifier"/>&bl;<xsl:value-of select="$type"/>&bl;get<xsl:value-of select="$name"/>() {  
     return this.<xsl:value-of select="name"/>;  
     }  
     /**  
     * Defines <xsl:value-of select="name"/> Attribute  
     * @param p<xsl:value-of select="$name"/> value to set  
     */  
     public final void set<xsl:value-of select="$name"/>(final <xsl:value-of select="$type"/> p<xsl:value-of select="$name"/>) {  
     this.<xsl:value-of select="name"/> = p<xsl:value-of select="$name"/>;  
     }  
   </xsl:template>  
106        
107        
108        
109        <xsl:template match="attribute" mode="simple">
110    <xsl:template match="collection" mode="declare">  ,&cr;&bl;&bl;<xsl:value-of select="name"/>&bl;<xsl:apply-templates select="datatype" mode="sqltype"/><xsl:if test="multiplicity = '1'"> not null</xsl:if>
     <xsl:variable name="type"><xsl:apply-templates select="datatype" mode="JavaType"/></xsl:variable>  
     /**  
     * Collection <xsl:value-of select="name"/> :  
     * <xsl:apply-templates select="." mode="desc" />  
     */  
     private List&lt;<xsl:value-of select="$type"/>&gt;&bl;<xsl:value-of select="name"/> = null;  
   </xsl:template>  
     
     
     
     
   <xsl:template match="collection" mode="getset">  
     <xsl:param name="modifier"/>  
     <xsl:variable name="type"><xsl:apply-templates select="datatype" mode="JavaType"/></xsl:variable>  
     <xsl:variable name="name">  
       <xsl:call-template name="upperCase">  
         <xsl:with-param name="val" select="name"/>  
       </xsl:call-template>  
     </xsl:variable>  
     /**  
     * Returns <xsl:value-of select="name"/> Collection  
     * @return <xsl:value-of select="name"/> Collection  
     */  
     public <xsl:value-of select="$modifier"/>&bl;List&lt;<xsl:value-of select="$type"/>&gt;&bl;get<xsl:value-of select="$name"/>() {  
     return this.<xsl:value-of select="name"/>;  
     }  
     /**  
     * Defines <xsl:value-of select="name"/> Collection  
     * @param p<xsl:value-of select="$name"/> collection to set  
     */  
     public final void set<xsl:value-of select="$name"/>(final List&lt;<xsl:value-of select="$type"/>&gt; p<xsl:value-of select="$name"/>) {  
     this.<xsl:value-of select="name"/> = p<xsl:value-of select="$name"/>;  
     }  
   </xsl:template>  
     
     
     
     
   <xsl:template match="reference" mode="declare">  
     <xsl:variable name="type"><xsl:apply-templates select="datatype" mode="JavaType"/></xsl:variable>  
     /**  
     * Reference <xsl:value-of select="name"/> :  
     * <xsl:apply-templates select="." mode="desc" />  
     */  
     private <xsl:value-of select="$type"/>&bl;<xsl:value-of select="name"/> = null;  
111    </xsl:template>    </xsl:template>
112        
113        
114        
115        <!-- We need lengths for (var)char datatypes -->
116    <xsl:template match="reference" mode="getset">    <xsl:template match="datatype" mode="sqltype">
117      <xsl:param name="modifier"/>      <xsl:choose>
118      <xsl:variable name="type"><xsl:apply-templates select="datatype" mode="JavaType"/></xsl:variable>        <xsl:when test="@type = 'boolean'">bit</xsl:when>
119      <xsl:variable name="name">        <xsl:when test="@type = 'p_boolean'">bit</xsl:when>
120        <xsl:call-template name="upperCase">        <xsl:when test="@type = 'integer'">integer</xsl:when>
121          <xsl:with-param name="val" select="name"/>        <xsl:when test="@type = 'p_integer'">integer</xsl:when>
122        </xsl:call-template>        <xsl:when test="@type = 'long'">bigint</xsl:when>
123      </xsl:variable>        <xsl:when test="@type = 'p_long'">bigint</xsl:when>
124      /**        <xsl:when test="@type = 'datetime'">dateTime</xsl:when>
125      * Returns <xsl:value-of select="name"/> Reference        <xsl:when test="@type = 'real'">float</xsl:when>
126      * @return <xsl:value-of select="name"/> Reference        <xsl:when test="@type = 'p_real'">float</xsl:when>
127      */        <xsl:when test="@type = 'double'">real</xsl:when>
128      public <xsl:value-of select="$modifier"/>&bl;<xsl:value-of select="$type"/>&bl;get<xsl:value-of select="$name"/>() {        <xsl:when test="@type = 'p_double'">real</xsl:when>
129      return this.<xsl:value-of select="name"/>;        <xsl:otherwise>
130      }          <xsl:variable name="length">
131      /**            <xsl:choose>
132      * Defines <xsl:value-of select="name"/> Reference              <xsl:when test="@length">
133      * @param p<xsl:value-of select="$name"/> reference to set                <xsl:value-of select="@length"/>
134      */              </xsl:when>
135      public final void set<xsl:value-of select="$name"/>(final <xsl:value-of select="$type"/> p<xsl:value-of select="$name"/>) {              <xsl:otherwise>
136      this.<xsl:value-of select="name"/> = p<xsl:value-of select="$name"/>;                <xsl:value-of select="$defaultVarcharLength"/>
137      }              </xsl:otherwise>
138    </xsl:template>            </xsl:choose>
139              </xsl:variable>
140              varchar(<xsl:value-of select="$length"/>)
141            </xsl:otherwise>
142          </xsl:choose>
   <xsl:template match="literal" >  
     /**  
     * Value <xsl:value-of select="value"/> :  
     *  
     * <xsl:apply-templates select="." mode="desc" />  
     */  
     <xsl:text>E_</xsl:text><xsl:call-template name="badChars">  
       <xsl:with-param name="val" select="value"/>  
     </xsl:call-template>  
     <xsl:if test="position() != last()"><xsl:text>,</xsl:text></xsl:if>&cr;  
   </xsl:template>  
     
     
     
     
   <xsl:template match="attribute|reference|collection" mode="tostring">  
     <xsl:variable name="name">  
       <xsl:call-template name="upperCase">  
         <xsl:with-param name="val" select="name"/>  
       </xsl:call-template>  
     </xsl:variable>  
     sb.append("<xsl:value-of select="name"/> = ");  
     sb.append(get<xsl:value-of select="$name"/>());  
     <xsl:if test="position() != last()">sb.append(", ");</xsl:if>  
   </xsl:template>  
     
     
     
     
   <xsl:template name="upperCase">  
     <xsl:param name="val"/>  
     <xsl:variable name="prem" select="substring($val,1,1)"/>  
     <xsl:variable name="first" select="translate($prem,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>  
     <xsl:variable name="end" select="substring($val,2,string-length($val)-1)"/>  
     <xsl:value-of select="concat($first,$end)"/>  
   </xsl:template>  
     
     
     
     
   <xsl:template name="lowerCase">  
     <xsl:param name="val"/>  
     <xsl:variable name="prem" select="substring($val,1,1)"/>  
     <xsl:variable name="first" select="translate($prem,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>  
     <xsl:variable name="end" select="substring($val,2,string-length($val)-1)"/>  
     <xsl:value-of select="@package"/>.<xsl:value-of select="concat($first,$end)"/>  
   </xsl:template>  
     
     
     
     
   <xsl:template name="badChars">  
     <xsl:param name="val"/>  
     <xsl:value-of select="translate($val,'abcdefghijklmnopqrstuvwxyz.: *','ABCDEFGHIJKLMNOPQRSTUVWXYZ___N')"/>  
   </xsl:template>  
     
     
     
     
   <xsl:template match="model" mode="modelVersion">  
     <xsl:variable name="file" select="concat($root_package_dir,'/','ModelVersion.java')"/>  
     <!-- open file for this class -->  
     <xsl:message >Opening file <xsl:value-of select="$file"/></xsl:message>  
     <xsl:result-document href="{$file}">  
       package <xsl:value-of select="$root_package"/>;  
         
       /**  
       * Version class for <xsl:value-of select="name"/> :  
       *  
       * <xsl:apply-templates select="." mode="desc" />  
       *  
       * @author generated by UML2 Generator tool (UML->XMI->XSLT->java code)  
       */  
       public final class ModelVersion {  
         
       /** last modification date of the UML model */  
       public final static long LAST_MODIFICATION_DATE = <xsl:value-of select="$lastModified"/>l;  
         
       private ModelVersion() {  
       // forbidden constructor  
       }  
         
       }  
     </xsl:result-document>  
143    </xsl:template>    </xsl:template>
144    
145        
146        
147        
148        <xsl:template match="reference">
149    <xsl:template match="package" mode="packageDesc">    <xsl:if test="not(subsets)">
150      <xsl:param name="dir"/>  ,&cr;  <xsl:value-of select="name"/>Id&bl;bigint<xsl:if test="multiplicity = '1'"> not null</xsl:if>
151      <xsl:variable name="file" select="concat($dir,'/package.html')"/>    </xsl:if>
     <!-- open file for this class -->  
     <xsl:message >Opening file <xsl:value-of select="$file"/></xsl:message>  
     <xsl:result-document href="{$file}" format="packageInfo">  
       <html>  
         <head>  
           <title>Package Information</title>  
           <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
         </head>  
         <body>&cr;  
           <xsl:apply-templates select="." mode="desc" />  
         </body>  
       </html>  
     </xsl:result-document>  
152    </xsl:template>    </xsl:template>
153        
154        
155        
156        <!-- TODO
157    <xsl:template match="*" mode="desc">    Add templates retrieving for a given objectType the table it is in
158      <xsl:choose>    for a given attribute the column(s) it is in
159        <xsl:when test="count(description) > 0"><xsl:value-of select="description" disable-output-escaping="yes"/></xsl:when>    for a given reference the column it is in
160        <xsl:otherwise>TODO : Missing description : please, update your UML model asap.</xsl:otherwise>    for a given collection the containerId column it is in.
161      </xsl:choose>     -->
   </xsl:template>    
162        
163        
164  </xsl:stylesheet>  </xsl:stylesheet>

Legend:
Removed from v.218  
changed lines
  Added in v.219

msdemlei@ari.uni-heidelberg.de
ViewVC Help
Powered by ViewVC 1.1.26