Mercurial > pub > ModelGenerator
comparison xslt/generator.csharp.xsl @ 6:1f4009d4afb6
working on model to csharp transform
author | cin |
---|---|
date | Mon, 05 Mar 2018 10:37:47 +0300 |
parents | 6f67d3a6b950 |
children | 3fe157be5141 |
comparison
equal
deleted
inserted
replaced
5:6f67d3a6b950 | 6:1f4009d4afb6 |
---|---|
26 </xsl:template> | 26 </xsl:template> |
27 | 27 |
28 <xsl:template match="m:entity" mode="entity"> | 28 <xsl:template match="m:entity" mode="entity"> |
29 <!-- select all members --> | 29 <!-- select all members --> |
30 <xsl:variable name="members"> | 30 <xsl:variable name="members"> |
31 <xsl:apply-templates mode="fiter-members"/> | 31 <xsl:apply-templates mode="filter-members"/> |
32 </xsl:variable> | 32 </xsl:variable> |
33 | 33 |
34 <cs:class modifiers="partial"> | 34 <cs:class modifiers="partial"> |
35 <!-- generate class name --> | 35 <!-- generate class name --> |
36 <xsl:attribute name="name"> | 36 <xsl:attribute name="name"> |
136 | 136 |
137 <!-- property --> | 137 <!-- property --> |
138 | 138 |
139 <xsl:template match="*" mode="property"> | 139 <xsl:template match="*" mode="property"> |
140 <cs:property modifiers="public"> | 140 <cs:property modifiers="public"> |
141 <xsl:attribute name="name"><xsl:apply-templates select="." mode="property-name"/></xsl:attribute> | 141 <xsl:attribute name="name"><xsl:apply-templates select="." mode="member-name"/></xsl:attribute> |
142 <xsl:attribute name="modifiers"><xsl:apply-templates select="." mode="property-modifiers"/></xsl:attribute> | 142 <xsl:attribute name="modifiers"><xsl:apply-templates select="." mode="member-modifiers"/></xsl:attribute> |
143 <xsl:apply-templates select="." mode="property-type"/> | 143 <xsl:apply-templates select="." mode="member-type"/> |
144 <xsl:apply-templates select="." mode="property-attributes"/> | 144 <xsl:apply-templates select="." mode="member-attributes"/> |
145 <xsl:apply-templates select="." mode="property-extension" /> | 145 <xsl:apply-templates select="." mode="member-extension" /> |
146 <xsl:apply-templates select="." mode="property-accessors"/> | 146 <xsl:apply-templates select="." mode="property-accessors"/> |
147 </cs:property> | 147 </cs:property> |
148 </xsl:template> | 148 </xsl:template> |
149 | 149 |
150 | 150 |
151 <!-- property-name --> | 151 <!-- member-name --> |
152 <xsl:template match="m:hasA/clr:association[not(@name|@clr:name)]" mode="property-name"> | 152 <xsl:template match="m:hasA/clr:association[not(@name|@clr:name)]" mode="member-name"> |
153 <!-- if the association doesn't define a name, use it from the parent node --> | 153 <!-- if the association doesn't define a name, use it from the parent node --> |
154 <xsl:apply-templates select=".." mode="property-name"/> | 154 <xsl:apply-templates select=".." mode="member-name"/> |
155 </xsl:template> | 155 </xsl:template> |
156 <xsl:template match="m:hasMany/clr:association[not(@name|@clr:name)]" mode="property-name"> | 156 <xsl:template match="m:hasMany/clr:association[not(@name|@clr:name)]" mode="member-name"> |
157 <!-- if the association doesn't define a name, use it from the parent node --> | 157 <!-- if the association doesn't define a name, use it from the parent node --> |
158 <xsl:apply-templates select=".." mode="property-name"/> | 158 <xsl:apply-templates select=".." mode="member-name"/> |
159 </xsl:template> | 159 </xsl:template> |
160 | 160 |
161 <xsl:template match="*" mode="property-name"> | 161 <!-- member-modifiers --> |
162 <xsl:apply-templates select="." mode="member-name"/> | 162 <xsl:template match="*" mode="member-modifiers"> |
163 </xsl:template> | |
164 | |
165 <!-- property-modifiers --> | |
166 <xsl:template match="*" mode="property-modifiers"> | |
167 <xsl:text>public</xsl:text> | 163 <xsl:text>public</xsl:text> |
168 </xsl:template> | 164 </xsl:template> |
169 | 165 |
170 <!-- property-type --> | 166 <!-- member-type --> |
171 <xsl:template match="*" mode="property-type"> | 167 <xsl:template match="m:hasA[@type]/clr:association[not(clr:type)]" mode="member-type"> |
172 <xsl:apply-templates select="." mode="member-type"/> | 168 <xsl:apply-templates select=".." mode="member-type"/> |
173 </xsl:template> | 169 </xsl:template> |
174 | 170 |
175 <xsl:template match="m:hasA[@type]/clr:association[not(clr:type)]" mode="property-type"> | 171 <xsl:template match="m:hasMany[@type]/clr:association[not(clr:type)]" mode="member-type"> |
176 <xsl:apply-templates select=".." mode="property-type"/> | |
177 </xsl:template> | |
178 | |
179 <xsl:template match="m:hasMany[@type]/clr:association[not(clr:type)]" mode="property-type"> | |
180 <cs:array> | 172 <cs:array> |
181 <xsl:apply-templates select=".." mode="property-type"/> | 173 <xsl:apply-templates select=".." mode="member-type"/> |
182 </cs:array> | 174 </cs:array> |
183 </xsl:template> | 175 </xsl:template> |
184 | 176 |
185 <xsl:template match="m:hasA[@type]/m:thisKey" mode="property-type"> | 177 <xsl:template match="m:hasA[@type]/m:thisKey" mode="member-type"> |
186 <xsl:variable name="otherKey"> | 178 <xsl:variable name="otherKey"> |
187 <xsl:call-template name="getPrimaryKey"> | 179 <xsl:call-template name="getPrimaryKey"> |
188 <xsl:with-param name="type" select="../@type"/> | 180 <xsl:with-param name="type" select="../@type"/> |
189 </xsl:call-template> | 181 </xsl:call-template> |
190 </xsl:variable> | 182 </xsl:variable> |
191 <xsl:choose> | 183 <xsl:choose> |
192 <xsl:when test="@optional"> | 184 <xsl:when test="@optional"> |
185 <cs:nullable> | |
186 <xsl:apply-templates select="exsl:node-set($otherKey)" mode="member-type"/> | |
187 </cs:nullable> | |
193 </xsl:when> | 188 </xsl:when> |
194 <cs:nullable> | |
195 <xsl:apply-templates select="exsl:node-set($otherKey)" mode="property-type"/> | |
196 </cs:nullable> | |
197 <xsl:otherwise> | 189 <xsl:otherwise> |
198 <xsl:apply-templates select="exsl:node-set($otherKey)" mode="property-type"/> | 190 <xsl:apply-templates select="exsl:node-set($otherKey)" mode="member-type"/> |
199 </xsl:otherwise> | 191 </xsl:otherwise> |
200 </xsl:choose> | 192 </xsl:choose> |
201 </xsl:template> | 193 </xsl:template> |
202 | 194 |
203 <!-- property-attributes --> | 195 <!-- member-attributes --> |
204 <xsl:template match="m:primaryKey" mode="property-attributes"> | 196 <xsl:template match="m:primaryKey" mode="member-attributes"> |
205 <cs:attribute> | 197 <cs:attribute> |
206 <cs:type name="PrimaryKey" namespace="Linq2Db" /> | 198 <cs:type name="PrimaryKey" namespace="Linq2Db" /> |
207 </cs:attribute> | 199 </cs:attribute> |
208 </xsl:template> | 200 </xsl:template> |
209 | 201 |
210 <xsl:template match="m:hasA/clr:association" mode="property-attributes"> | 202 <xsl:template match="m:hasA/clr:association" mode="member-attributes"> |
211 <cs:attribute> | 203 <cs:attribute> |
212 <cs:type name="Association" namespace="Linq2Db"/> | 204 <cs:type name="Association" namespace="Linq2Db"/> |
213 <cs:parameter name="thisKey"> | 205 <cs:parameter name="thisKey"> |
214 <cs:nameOf> | 206 <cs:nameOf> |
215 <xsl:call-template name="getMember"> | 207 <xsl:call-template name="getClrMemberReference"> |
216 <xsl:with-param name="memberName" select="../@name"/> | 208 <xsl:with-param name="memberName" select="../@name"/> |
217 <xsl:with-param name="explicitMemberName" select="@thisKey"/> | 209 <xsl:with-param name="type" select="../@declaringType"/> |
218 <xsl:with-param name="type" select="../../@name"/> | |
219 <xsl:with-param name="short" select="true()"/> | |
220 </xsl:call-template> | 210 </xsl:call-template> |
221 </cs:nameOf> | 211 </cs:nameOf> |
222 </cs:parameter> | 212 </cs:parameter> |
223 <cs:parameter name="otherKey"> | 213 <cs:parameter name="otherKey"> |
224 <cs:nameOf> | 214 <cs:nameOf> |
225 <xsl:call-template name="getKeyMember"> | 215 <xsl:call-template name="getClrKeyReference"> |
226 <xsl:with-param name="explicitMemberName" select="@thisKey"/> | |
227 <xsl:with-param name="type" select="../@type"/> | 216 <xsl:with-param name="type" select="../@type"/> |
228 </xsl:call-template> | 217 </xsl:call-template> |
229 </cs:nameOf> | 218 </cs:nameOf> |
230 </cs:parameter> | 219 </cs:parameter> |
231 </cs:attribute> | 220 </cs:attribute> |
232 </xsl:template> | 221 </xsl:template> |
233 | 222 |
234 <xsl:template match="m:hasMany/clr:association" mode="property-attributes"> | 223 <xsl:template match="m:hasMany/clr:association" mode="member-attributes"> |
235 <cs:attribute> | 224 <cs:attribute> |
236 <cs:type name="Association" namespace="Linq2Db"/> | 225 <cs:type name="Association" namespace="Linq2Db"/> |
237 <!-- thisKey points to own primaryKey which may be inherited, using getKeyName to address such cases --> | 226 <!-- thisKey points to own primaryKey which may be inherited, using getKeyName to address such cases --> |
238 <cs:parameter name="thisKey"> | 227 <cs:parameter name="thisKey"> |
239 <cs:nameOf> | 228 <cs:nameOf> |
240 <xsl:call-template name="getKeyMember"> | 229 <xsl:call-template name="getClrKeyReference"> |
241 <xsl:with-param name="type" select="../../@name"/> | 230 <xsl:with-param name="type" select="../../@name"/> |
242 <xsl:with-param name="explicitMemberName" select="@thisKey"/> | |
243 <xsl:with-param name="short" select="true()"/> | |
244 </xsl:call-template> | 231 </xsl:call-template> |
245 </cs:nameOf> | 232 </cs:nameOf> |
246 </cs:parameter> | 233 </cs:parameter> |
247 <cs:parameter name="otherKey"> | 234 <cs:parameter name="otherKey"> |
248 <cs:nameOf> | 235 <cs:nameOf> |
249 <xsl:call-template name="getMember"> | 236 <xsl:call-template name="getClrMemberReference"> |
250 <xsl:with-param name="type" select="../@type"/> | 237 <xsl:with-param name="type" select="../@type"/> |
251 <xsl:with-param name="memberName" select="../m:otherKey/@name"/> | 238 <xsl:with-param name="memberName" select="../m:otherKey/@name"/> |
252 <xsl:with-param name="explicitMemberName" select="@otherKey"/> | |
253 </xsl:call-template> | 239 </xsl:call-template> |
254 </cs:nameOf> | 240 </cs:nameOf> |
255 </cs:parameter> | 241 </cs:parameter> |
256 </cs:attribute> | 242 </cs:attribute> |
257 </xsl:template> | |
258 | |
259 <xsl:template match="*" mode="property-attributes"> | |
260 <xsl:apply-templates select="." mode="member-attributes"/> | |
261 </xsl:template> | |
262 | |
263 <!-- property-extension --> | |
264 <xsl:template match="*" mode="property-extension"> | |
265 <xsl:apply-templates select="." mode="member-extension"/> | |
266 </xsl:template> | 243 </xsl:template> |
267 | 244 |
268 <!-- property-accessors --> | 245 <!-- property-accessors --> |
269 <xsl:template match="*" mode="property-accessors"> | 246 <xsl:template match="*" mode="property-accessors"> |
270 <cs:get/> | 247 <cs:get/> |
296 </xsl:template> | 273 </xsl:template> |
297 | 274 |
298 <!-- fields --> | 275 <!-- fields --> |
299 <xsl:template match="*" mode="field"> | 276 <xsl:template match="*" mode="field"> |
300 <cs:field> | 277 <cs:field> |
301 <xsl:attribute name="name"><xsl:apply-templates select="." mode="field-name"/></xsl:attribute> | 278 <xsl:attribute name="name"><xsl:apply-templates select="." mode="member-name"/></xsl:attribute> |
302 <xsl:apply-templates select="." mode="field-type"/> | 279 <xsl:apply-templates select="." mode="member-type"/> |
303 <xsl:apply-templates select="." mode="field-initializer"/> | 280 <xsl:apply-templates select="." mode="field-initializer"/> |
304 </cs:field> | 281 </cs:field> |
305 </xsl:template> | 282 </xsl:template> |
306 | 283 |
307 <!-- field-name --> | 284 <!-- field-name --> |
308 <xsl:template match="m:hasA/clr:lazy" mode="field-name"> | 285 <xsl:template match="m:hasA/clr:lazy" mode="member-name"> |
309 <xsl:text>m_lazy</xsl:text> | 286 <xsl:text>m_lazy</xsl:text> |
310 <xsl:apply-templates select=".." mode="property-name"/> | 287 <xsl:apply-templates select=".." mode="member-name"/> |
311 </xsl:template> | 288 </xsl:template> |
312 | 289 |
313 <xsl:template match="clr:lazy[@field]" mode="field-name"> | 290 <xsl:template match="clr:lazy[@field]" mode="member-name"> |
314 <xsl:value-of select="@field"/> | 291 <xsl:value-of select="@field"/> |
315 </xsl:template> | 292 </xsl:template> |
316 | 293 |
317 <xsl:template match="*" mode="field-name"> | 294 <!-- member-type --> |
318 <xsl:apply-templates select="." mode="member-name"/> | 295 <xsl:template match="m:hasA[@optional='true']/clr:lazy" mode="member-type"> |
319 </xsl:template> | 296 <xsl:variable name="otherKey"> |
320 | 297 <xsl:call-template name="getPrimaryKey"> |
321 <!-- field-type --> | 298 <xsl:with-param name="type" select="../@type"/> |
322 <xsl:template match="m:hasA[@optional='true']/clr:lazy" mode="field-type"> | 299 </xsl:call-template> |
300 </xsl:variable> | |
323 <cs:type name="NullableReference" namespace="Pallada.Data"> | 301 <cs:type name="NullableReference" namespace="Pallada.Data"> |
324 <xsl:call-template name="getKeyType"> | 302 <xsl:apply-templates select="exsl:node-set($otherKey)" mode="member-type"/> |
325 <xsl:with-param name="type" select="../@type"/> | 303 <xsl:apply-templates select=".." mode="member-type"/> |
326 </xsl:call-template> | |
327 <xsl:apply-templates select=".." mode="property-type"/> | |
328 </cs:type> | 304 </cs:type> |
329 </xsl:template> | 305 </xsl:template> |
330 <xsl:template match="m:hasA[@optional!='true']/clr:lazy" mode="field-type"> | 306 <xsl:template match="m:hasA[@optional!='true']/clr:lazy" mode="member-type"> |
331 <cs:type name="Reference" namespace="Pallada.Data"> | 307 <cs:type name="Reference" namespace="Pallada.Data"> |
332 <xsl:apply-templates select="../m:thisKey" mode="property-type"/> | 308 <xsl:apply-templates select="../m:thisKey" mode="member-type"/> |
333 <xsl:apply-templates select=".." mode="property-type"/> | 309 <xsl:apply-templates select=".." mode="member-type"/> |
334 </cs:type> | 310 </cs:type> |
335 </xsl:template> | 311 </xsl:template> |
336 | 312 |
337 <xsl:template match="*" mode="field-type"> | |
338 <xsl:apply-templates select="." mode="member-type"/> | |
339 </xsl:template> | |
340 <!-- field-initializer --> | 313 <!-- field-initializer --> |
341 <xsl:template match="*|text()" mode="field-initializer"/> | 314 <xsl:template match="*|text()" mode="field-initializer"/> |
342 | 315 |
343 <xsl:template name="getClrKeyReference"> | 316 <xsl:template name="getClrKeyReference"> |
344 <xsl:param name="type"/> | 317 <xsl:param name="type"/> |
365 | 338 |
366 <xsl:apply-templates select="exsl:node-set($member)" mode="clr-member-reference"/> | 339 <xsl:apply-templates select="exsl:node-set($member)" mode="clr-member-reference"/> |
367 </xsl:template> | 340 </xsl:template> |
368 | 341 |
369 <xsl:template match="*" mode="clr-member-reference"> | 342 <xsl:template match="*" mode="clr-member-reference"> |
370 <xsl:param name="$type" select="@declaringType"/> | 343 <xsl:param name="type" select="@declaringType"/> |
371 <cs:member> | 344 <cs:member> |
372 <xsl:attribute name="name"> | 345 <xsl:attribute name="name"> |
373 <xsl:apply-templates select="." mode="member-name"/> | 346 <xsl:apply-templates select="." mode="member-name"/> |
374 </xsl:attribute> | 347 </xsl:attribute> |
375 <xsl:call-template name="getClrType"> | 348 <xsl:call-template name="getClrType"> |
376 <xsl:with-param name="type" select="$type"/> | 349 <xsl:with-param name="type" select="$type"/> |
377 </xsl:call-template> | 350 </xsl:call-template> |
378 </cs:member> | 351 </cs:member> |
379 </xsl:template> | 352 </xsl:template> |
380 | |
381 | 353 |
382 <!-- resolves CLR type for the given type --> | 354 <!-- resolves CLR type for the given type --> |
383 <xsl:template name="getClrType"> | 355 <xsl:template name="getClrType"> |
384 <xsl:param name="type" /> | 356 <xsl:param name="type" /> |
385 <xsl:param name="typeArgs" select="/.." /> | 357 <xsl:param name="typeArgs" select="/.." /> |