home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / javaoopl.tcl < prev    next >
Text File  |  1997-12-01  |  73KB  |  2,973 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. # Copyright (c) 1997 by Cayenne Software, Inc.
  4. #
  5. # This software is furnished under a license and may be used only in
  6. # accordance with the terms of such license and with the inclusion of
  7. # the above copyright notice. This software or any other copies thereof
  8. # may not be provided or otherwise made available to any other person.
  9. # No title to and ownership of the software is hereby transferred.
  10. #
  11. # The information in this software is subject to change without notice
  12. # and should not be construed as a commitment by Cayenne Software, Inc.
  13. #
  14. #---------------------------------------------------------------------------
  15. #
  16. #       File            : javaoopl.tcl
  17. #       Author          : 
  18. #       Original date   : November 1997
  19. #       Description     : Classes for code generation
  20. #
  21. #---------------------------------------------------------------------------
  22.  
  23.  
  24. #      File:           @(#)jvginitial.tcl    /main/titanic/1
  25.  
  26.  
  27. Class JVGInitializer : {Object} {
  28.     constructor
  29.     method destructor
  30.     method generate
  31. }
  32.  
  33. constructor JVGInitializer {class this} {
  34.     # Start constructor user section
  35.     # End constructor user section
  36.     return $this
  37. }
  38.  
  39. method JVGInitializer::destructor {this} {
  40.     # Start destructor user section
  41.     # End destructor user section
  42. }
  43.  
  44. method JVGInitializer::generate {this sect} {
  45.     # !! Implement this function !!
  46. }
  47.  
  48. # Do not delete this line -- regeneration end marker
  49.  
  50. if [isCommand CMInitializer] {
  51.     Class  JVGInitializerD : {JVGInitializer CMInitializer} {
  52.     }
  53. } else {
  54.     Class JVGInitializerD : {JVGInitializer OPInitializer} {    
  55.     }
  56. }
  57.  
  58. global mostDerivedOOPL ; set mostDerivedOOPL(OPInitializer) JVGInitializerD
  59.  
  60. selfPromoter OPInitializer {this} {
  61.     JVGInitializerD promote $this
  62. }
  63.  
  64.  
  65. #---------------------------------------------------------------------------
  66. #      File:           @(#)jvgobject.tcl    /main/titanic/2
  67.  
  68.  
  69. Class JVGObject : {Object} {
  70.     constructor
  71.     method destructor
  72. }
  73.  
  74. constructor JVGObject {class this name} {
  75.     set this [Object::constructor $class $this $name]
  76.     # Start constructor user section
  77.     # End constructor user section
  78.     return $this
  79. }
  80.  
  81. method JVGObject::destructor {this} {
  82.     # Start destructor user section
  83.     # End destructor user section
  84. }
  85.  
  86. proc JVGObject::generateImportStatement {ooplType unit} {
  87.     if {$ooplType != "" && [$ooplType get_obj_type] == "class_type"} {
  88.         JVGObject::generateImportStatementByClass [$ooplType ooplClass] $unit
  89.     }
  90. }
  91.  
  92. proc JVGObject::generateImportStatementByClass {ooplClass unit} {
  93.     if {$ooplClass != "" && [$ooplClass isExternal]} {
  94.         set package [$ooplClass getPropertyValue package_stmnt]
  95.  
  96.         if {$package != "" && $package != "java.lang"} {
  97.         set fullName $package.[$ooplClass getName]
  98.  
  99.         $unit addSystemImport [JavaPackageName new $fullName]
  100.         }
  101.     }
  102. }
  103.  
  104. # Do not delete this line -- regeneration end marker
  105.  
  106.  
  107.  
  108. #---------------------------------------------------------------------------
  109. #      File:           @(#)jvgassocin.tcl    /main/titanic/1
  110.  
  111.  
  112. Class JVGAssocInitializer : {JVGInitializer} {
  113.     constructor
  114.     method destructor
  115.     method generate
  116. }
  117.  
  118. constructor JVGAssocInitializer {class this} {
  119.     set this [JVGInitializer::constructor $class $this]
  120.     # Start constructor user section
  121.     # End constructor user section
  122.     return $this
  123. }
  124.  
  125. method JVGAssocInitializer::destructor {this} {
  126.     # Start destructor user section
  127.     # End destructor user section
  128. }
  129.  
  130. method JVGAssocInitializer::generate {this sect} {
  131.     set ident [$this getName]
  132.     $sect append "$ident = ${ident}_;\n"
  133. }
  134.  
  135. # Do not delete this line -- regeneration end marker
  136.  
  137. if [isCommand CMAssocInitializer] {
  138.     Class  JVGAssocInitializerD : {JVGAssocInitializer CMAssocInitializer} {
  139.     }
  140. } else {
  141.     Class JVGAssocInitializerD : {JVGAssocInitializer OPAssocInitializer} {    
  142.     }
  143. }
  144.  
  145. global mostDerivedOOPL ; set mostDerivedOOPL(OPAssocInitializer) JVGAssocInitializerD
  146.  
  147. selfPromoter OPAssocInitializer {this} {
  148.     JVGAssocInitializerD promote $this
  149. }
  150.  
  151.  
  152. #---------------------------------------------------------------------------
  153. #      File:           @(#)jvgattribi.tcl    /main/titanic/1
  154.  
  155.  
  156. Class JVGAttribInitializer : {JVGInitializer} {
  157.     constructor
  158.     method destructor
  159.     method generate
  160. }
  161.  
  162. constructor JVGAttribInitializer {class this} {
  163.     set this [JVGInitializer::constructor $class $this]
  164.     # Start constructor user section
  165.     # End constructor user section
  166.     return $this
  167. }
  168.  
  169. method JVGAttribInitializer::destructor {this} {
  170.     # Start destructor user section
  171.     # End destructor user section
  172. }
  173.  
  174. method JVGAttribInitializer::generate {this sect} {
  175.     $sect append "[[$this attrib] getName] = [$this getName]_;\n"
  176. }
  177.  
  178. # Do not delete this line -- regeneration end marker
  179.  
  180. if [isCommand CMAttribInitializer] {
  181.     Class  JVGAttribInitializerD : {JVGAttribInitializer CMAttribInitializer} {
  182.     }
  183. } else {
  184.     Class JVGAttribInitializerD : {JVGAttribInitializer OPAttribInitializer} {    
  185.     }
  186. }
  187.  
  188. global mostDerivedOOPL ; set mostDerivedOOPL(OPAttribInitializer) JVGAttribInitializerD
  189.  
  190. selfPromoter OPAttribInitializer {this} {
  191.     JVGAttribInitializerD promote $this
  192. }
  193.  
  194.  
  195. #---------------------------------------------------------------------------
  196. #      File:           @(#)jvgqualini.tcl    /main/titanic/1
  197.  
  198.  
  199. Class JVGQualInitializer : {JVGInitializer} {
  200.     constructor
  201.     method destructor
  202. }
  203.  
  204. constructor JVGQualInitializer {class this} {
  205.     set this [JVGInitializer::constructor $class $this]
  206.     # Start constructor user section
  207.     # End constructor user section
  208.     return $this
  209. }
  210.  
  211. method JVGQualInitializer::destructor {this} {
  212.     # Start destructor user section
  213.     # End destructor user section
  214. }
  215.  
  216. # Do not delete this line -- regeneration end marker
  217.  
  218. if [isCommand CMQualInitializer] {
  219.     Class  JVGQualInitializerD : {JVGQualInitializer CMQualInitializer} {
  220.     }
  221. } else {
  222.     Class JVGQualInitializerD : {JVGQualInitializer OPQualInitializer} {    
  223.     }
  224. }
  225.  
  226. global mostDerivedOOPL ; set mostDerivedOOPL(OPQualInitializer) JVGQualInitializerD
  227.  
  228. selfPromoter OPQualInitializer {this} {
  229.     JVGQualInitializerD promote $this
  230. }
  231.  
  232.  
  233. #---------------------------------------------------------------------------
  234. #      File:           @(#)jvgsupercl.tcl    /main/titanic/1
  235.  
  236.  
  237. Class JVGSuperClassInitializer : {JVGInitializer} {
  238.     constructor
  239.     method destructor
  240. }
  241.  
  242. constructor JVGSuperClassInitializer {class this} {
  243.     set this [JVGInitializer::constructor $class $this]
  244.     # Start constructor user section
  245.     # End constructor user section
  246.     return $this
  247. }
  248.  
  249. method JVGSuperClassInitializer::destructor {this} {
  250.     # Start destructor user section
  251.     # End destructor user section
  252. }
  253.  
  254. # Do not delete this line -- regeneration end marker
  255.  
  256. if [isCommand CMSuperClassInitializer] {
  257.     Class  JVGSuperClassInitializerD : {JVGSuperClassInitializer CMSuperClassInitializer} {
  258.     }
  259. } else {
  260.     Class JVGSuperClassInitializerD : {JVGSuperClassInitializer OPSuperClassInitializer} {    
  261.     }
  262. }
  263.  
  264. global mostDerivedOOPL ; set mostDerivedOOPL(OPSuperClassInitializer) JVGSuperClassInitializerD
  265.  
  266. selfPromoter OPSuperClassInitializer {this} {
  267.     JVGSuperClassInitializerD promote $this
  268. }
  269.  
  270.  
  271. #---------------------------------------------------------------------------
  272. #      File:           @(#)jvgclass.tcl    /main/titanic/12
  273.  
  274.  
  275. Class JVGClass : {JVGObject} {
  276.     constructor
  277.     method destructor
  278.     method check
  279.     method checkClass
  280.     method checkInterface
  281.     method generate
  282.     method generateClass
  283.     method generateInterface
  284.     method generateAccess
  285.     method generateComment
  286.     method generateContainer
  287.     method generateImportStatements
  288.     method generateModifier
  289.     method generatePackages
  290.     method getModifier
  291.     method isExternal
  292.     method isInterface
  293.     method setUnit
  294.     attribute isMaster
  295.     attribute unit
  296.     attribute container
  297. }
  298.  
  299. constructor JVGClass {class this name} {
  300.     set this [JVGObject::constructor $class $this $name]
  301.     # Start constructor user section
  302.     # End constructor user section
  303.     return $this
  304. }
  305.  
  306. method JVGClass::destructor {this} {
  307.     # Start destructor user section
  308.     # End destructor user section
  309. }
  310.  
  311. method JVGClass::check {this} {
  312.     if [$this isInterface] {
  313.         return [$this checkInterface]
  314.     }
  315.  
  316.     return [$this checkClass]
  317. }
  318.  
  319. method JVGClass::checkClass {this} {
  320.     #
  321.     #    Check if class has only one base class
  322.     #
  323.  
  324.     set firstBase ""
  325.  
  326.     foreach genNode [$this genNodeSet] {
  327.         set super [$genNode superClass]
  328.         set superName [$super getName]
  329.  
  330.         if {![$super isInterface]} {
  331.         if {$firstBase != ""} {
  332.             m4_error $E_NOMULTINH [$this getName] $superName $firstBase
  333.         } else {
  334.             set firstBase $superName
  335.         }
  336.         }
  337.     }
  338.  
  339.     #
  340.     #    Check all features
  341.     #
  342.  
  343.     foreach feature [$this featureSet] {
  344.         $feature check
  345.     }
  346. }
  347.  
  348. method JVGClass::checkInterface {this} {
  349.     #
  350.     #    Interface should not be derived from Class
  351.     #
  352.  
  353.     foreach genNode [$this genNodeSet] {
  354.         set super [$genNode superClass]
  355.         set superName [$super getName]
  356.  
  357.         if {![$super isInterface]} {
  358.         m4_error $E_INTFROMCLASS [$this getName] $superName
  359.         }
  360.     }
  361.  
  362.     #
  363.     #    Interface should not be final
  364.     #
  365.  
  366.     if {[$this getModifier] == "final"} {
  367.         m4_warning $W_INTNOTFINAL [$this getName]
  368.     }
  369.  
  370.     #
  371.     #    Interface should not have a constructor
  372.     #
  373.  
  374.     foreach method [$this operationSet] {
  375.         if {[$method isClassFeature] && [$method getName] == "create"} {
  376.         m4_warning $W_INTNOCONSTR [$this getName]
  377.         } else {
  378.         $method check
  379.         }
  380.     }
  381.  
  382.     #
  383.     #    Interface should not have association attributes
  384.     #
  385.  
  386.     foreach assocAttr [$this genAssocAttrSet] {
  387.         set item [[$assocAttr smConnector] getItem]
  388.  
  389.         if [$item isNil] {
  390.         set itemName ""
  391.         } else {
  392.         set itemName [$item name]
  393.         }
  394.  
  395.         m4_warning $W_INTASSOCATTR [$assocAttr getName] $itemName [$this getName]
  396.     }
  397.  
  398.     #
  399.     #    Check data attributes
  400.     #
  401.  
  402.     foreach dataAttr [$this dataAttrSet] {
  403.         $dataAttr check
  404.     }
  405. }
  406.  
  407. method JVGClass::generate {this model} {
  408.     if {[$this isExternal] || [$this container] != ""} {
  409.         return
  410.     }
  411.  
  412.     $this check
  413.     $this setUnit $model
  414.     $this generateImportStatements
  415.  
  416.     if [$this isInterface] {
  417.         $this generateInterface
  418.     } else {
  419.         $this generateClass
  420.     }
  421. }
  422.  
  423. method JVGClass::generateClass {this} {
  424.     $this container [JavaClass new $this]
  425.  
  426.     $this generateContainer
  427.     $this generatePackages
  428.     $this generateComment
  429.     $this generateAccess
  430.     $this generateModifier
  431.  
  432.     set javaContainer [$this container]
  433.  
  434.     foreach genNode [$this genNodeSet] {
  435.         set super [$genNode superClass]
  436.         set superName [$super getName]
  437.  
  438.         if [$super isInterface] {
  439.         $javaContainer addInterface $superName
  440.         } else {
  441.         $javaContainer superClass $superName
  442.         }
  443.     }
  444.  
  445.     if {[$this constructor] != ""} {
  446.         [$this constructor] generate
  447.     }
  448.  
  449.     foreach dataAttr [$this dataAttrSet] {
  450.         $dataAttr generate
  451.     }
  452.  
  453.     foreach method [$this operationSet] {
  454.         $method generate
  455.     }
  456.  
  457.     foreach assocAttr [$this genAssocAttrSet] {
  458.         $assocAttr generate
  459.     }
  460. }
  461.  
  462. method JVGClass::generateInterface {this} {
  463.     $this container [JavaInterface new $this]
  464.  
  465.     $this generateContainer
  466.     $this generatePackages
  467.     $this generateComment
  468.     $this generateAccess
  469.     $this generateModifier
  470.  
  471.     foreach genNode [$this genNodeSet] {
  472.         set super [$genNode superClass]
  473.         set superName [$super getName]
  474.  
  475.         if [$super isInterface] {
  476.         [$this container] addInterface $superName
  477.         }
  478.     }
  479.  
  480.     foreach dataAttr [$this dataAttrSet] {
  481.         $dataAttr generate
  482.     }
  483.  
  484.     foreach method [$this operationSet] {
  485.         if {[$method isClassFeature] && [$method getName] == "create"} {
  486. #        m4_warning $W_INTNOCONSTR [$this getName]
  487.         } else {
  488.         $method generate
  489.         }
  490.     }
  491. }
  492.  
  493. method JVGClass::generateAccess {this} {
  494.     set access [string tolower [$this getPropertyValue class_access]]
  495.  
  496.     if {$access != "none"} {
  497.         if [$this isMaster] {
  498.         if {$access == ""} {
  499.             set access "public"
  500.         }
  501.         } else {
  502.         if {$access == "public"} {
  503.             m4_warning $W_NOTPUBLIC [$this getName] [[$this unit] name]
  504.             set access ""
  505.         }
  506.         }
  507.  
  508.         if {$access != ""} {
  509.         [$this container] access [JavaAccess new $access]
  510.         }
  511.     }
  512. }
  513.  
  514. method JVGClass::generateComment {this} {
  515.     set text [$this getPropertyValue freeText]
  516.  
  517.     if {$text == ""} {
  518.         return
  519.     }
  520.  
  521.     set type [$this getPropertyValue comment_type]
  522.  
  523.     switch $type {
  524.         Block {[$this container] comment [JavaBlockComment new $text]}
  525.         Document {[$this container] comment [JavaDocComment new $text]}
  526.         default {[$this container] comment [JavaLineComment new $text]}
  527.     }
  528. }
  529.  
  530. method JVGClass::generateContainer {this} {
  531.     set unit [$this unit]
  532.  
  533.     $unit addContainer [$this container]
  534.  
  535.     if {[$this getName] == [$unit name]} {
  536.         $this isMaster 1
  537.         $unit masterContainer [$this container]
  538.  
  539.         set packageStatement [$this getPropertyValue package_stmnt]
  540.  
  541.         if {$packageStatement != ""} {
  542.         $unit packageStatement [JavaPackageName new "$packageStatement"]
  543.         }
  544.     } else {
  545.         $this isMaster 0
  546.     }
  547. }
  548.  
  549. method JVGClass::generateImportStatements {this} {
  550.     foreach genNode [$this genNodeSet] {
  551.         set super [$genNode superClass]
  552.  
  553.         JVGObject::generateImportStatementByClass $super [$this unit]
  554.     }
  555. }
  556.  
  557. method JVGClass::generateModifier {this} {
  558.     set modifier [$this getModifier]
  559.  
  560.     if {$modifier != ""} {
  561.         if {[$this isInterface] && $modifier == "final"} {
  562. #        m4_warning $W_INTNOTFINAL [$this getName]
  563.         } else {
  564.         [$this container] modifier [JavaModifier new $modifier]
  565.         }
  566.     }
  567. }
  568.  
  569. method JVGClass::generatePackages {this} {
  570.     set unit [$this unit]
  571.  
  572.     foreach importPackage [$this getPropertyValue import_package] {
  573.         $unit addImportPackage [JavaPackageName new $importPackage]
  574.     }
  575.  
  576.     foreach importType [$this getPropertyValue import_type] {
  577.         $unit addImportType [JavaPackageName new $importType]
  578.     }
  579.  
  580.     foreach importOnDemand [$this getPropertyValue import_ondemand] {
  581.         $unit addImportOnDemand [JavaPackageName new $importOnDemand]
  582.     }
  583. }
  584.  
  585. method JVGClass::getModifier {this} {
  586.     return [string tolower [$this getPropertyValue class_modifier]]
  587. }
  588.  
  589. method JVGClass::isExternal {this} {
  590.     if [$this OPClass::isExternal] {
  591.         return 1
  592.     }
  593.  
  594.     if [string match External* [$this getPropertyValue class_interface]] {
  595.         return 1
  596.     }
  597.  
  598.     return 0
  599. }
  600.  
  601. method JVGClass::isInterface {this} {
  602.     if [string match *Interface [$this getPropertyValue class_interface]] {
  603.         return 1
  604.     }
  605.  
  606.     return 0
  607. }
  608.  
  609. method JVGClass::setUnit {this model} {
  610.     set unitName [$this getPropertyValue "source_file"]
  611.  
  612.     if {$unitName == ""} {
  613.         set unitName [$this getName]
  614.     }
  615.  
  616.     $this unit [$model getCompilationUnit $unitName]
  617. }
  618.  
  619. # Do not delete this line -- regeneration end marker
  620.  
  621. if [isCommand CMClass] {
  622.     Class  JVGClassD : {JVGClass CMClass} {
  623.     }
  624. } else {
  625.     Class JVGClassD : {JVGClass OPClass} {    
  626.     }
  627. }
  628.  
  629. global mostDerivedOOPL ; set mostDerivedOOPL(OPClass) JVGClassD
  630.  
  631. selfPromoter OPClass {this} {
  632.     JVGClassD promote $this
  633. }
  634.  
  635.  
  636. #---------------------------------------------------------------------------
  637. #      File:           @(#)jvgfeature.tcl    /main/titanic/7
  638.  
  639.  
  640. Class JVGFeature : {JVGObject} {
  641.     constructor
  642.     method destructor
  643.     method check
  644.     method generate
  645.     method generateImportStatements
  646.     method getComment
  647.     method getMethodAccess
  648.     method getTypeName
  649.     method isFinal
  650.     method isNative
  651.     method isSynchronized
  652.     method isThreadsafe
  653.     method isTransient
  654.     method isVolatile
  655. }
  656.  
  657. constructor JVGFeature {class this name} {
  658.     set this [JVGObject::constructor $class $this $name]
  659.     # Start constructor user section
  660.     # End constructor user section
  661.     return $this
  662. }
  663.  
  664. method JVGFeature::destructor {this} {
  665.     # Start destructor user section
  666.     # End destructor user section
  667. }
  668.  
  669. method JVGFeature::check {this} {
  670.     # !! Implement this function !!
  671. }
  672.  
  673. method JVGFeature::generate {this} {
  674.     # !! Implement this function !!
  675. }
  676.  
  677. method JVGFeature::generateImportStatements {this} {
  678.     JVGObject::generateImportStatement [$this ooplType] [[$this ooplClass] unit]
  679. }
  680.  
  681. method JVGFeature::getComment {this} {
  682.     set text [$this getPropertyValue freeText]
  683.  
  684.     if {$text == ""} {
  685.         return ""
  686.     }
  687.  
  688.     set type [$this getPropertyValue comment_type]
  689.  
  690.     switch $type {
  691.         Block {return [JavaBlockComment new $text]}
  692.         Document {return [JavaDocComment new $text]}
  693.         default {return [JavaLineComment new $text]}
  694.     }
  695. }
  696.  
  697. method JVGFeature::getMethodAccess {this} {
  698.     return [string tolower [$this getPropertyValue method_access]]
  699. }
  700.  
  701. method JVGFeature::getTypeName {this} {
  702.     if {[$this ooplType] == ""} {
  703.         return ""
  704.     }
  705.  
  706.     return [[$this ooplType] getName]
  707. }
  708.  
  709. method JVGFeature::isFinal {this} {
  710.     if {[$this getPropertyValue is_final] == "1"} {
  711.         return "1"
  712.     }
  713.  
  714.     return "0"
  715. }
  716.  
  717. method JVGFeature::isNative {this} {
  718.     if {[$this getPropertyValue is_native] == "1"} {
  719.         return "1"
  720.     }
  721.  
  722.     return "0"
  723. }
  724.  
  725. method JVGFeature::isSynchronized {this} {
  726.     if {[$this getPropertyValue is_synchronized] == "1"} {
  727.         return "1"
  728.     }
  729.  
  730.     return "0"
  731. }
  732.  
  733. method JVGFeature::isThreadsafe {this} {
  734.     if {[$this getPropertyValue is_threadsafe] == "1"} {
  735.         return "1"
  736.     }
  737.  
  738.     return "0"
  739. }
  740.  
  741. method JVGFeature::isTransient {this} {
  742.     if {[$this getPropertyValue is_transient] == "1"} {
  743.         return "1"
  744.     }
  745.  
  746.     return "0"
  747. }
  748.  
  749. method JVGFeature::isVolatile {this} {
  750.     if {[$this getPropertyValue is_volatile] == "1"} {
  751.         return "1"
  752.     }
  753.  
  754.     return "0"
  755. }
  756.  
  757. # Do not delete this line -- regeneration end marker
  758.  
  759. if [isCommand CMFeature] {
  760.     Class  JVGFeatureD : {JVGFeature CMFeature} {
  761.     }
  762. } else {
  763.     Class JVGFeatureD : {JVGFeature OPFeature} {    
  764.     }
  765. }
  766.  
  767. global mostDerivedOOPL ; set mostDerivedOOPL(OPFeature) JVGFeatureD
  768.  
  769. selfPromoter OPFeature {this} {
  770.     JVGFeatureD promote $this
  771. }
  772.  
  773.  
  774. #---------------------------------------------------------------------------
  775. #      File:           @(#)jvgparamet.tcl    /main/titanic/2
  776.  
  777.  
  778. Class JVGParameter : {JVGObject} {
  779.     constructor
  780.     method destructor
  781.     method generateImportStatements
  782. }
  783.  
  784. constructor JVGParameter {class this name} {
  785.     set this [JVGObject::constructor $class $this $name]
  786.     # Start constructor user section
  787.     # End constructor user section
  788.     return $this
  789. }
  790.  
  791. method JVGParameter::destructor {this} {
  792.     # Start destructor user section
  793.     # End destructor user section
  794. }
  795.  
  796. method JVGParameter::generateImportStatements {this unit} {
  797.     JVGObject::generateImportStatement [$this ooplType] $unit
  798. }
  799.  
  800. # Do not delete this line -- regeneration end marker
  801.  
  802. if [isCommand CMParameter] {
  803.     Class  JVGParameterD : {JVGParameter CMParameter} {
  804.     }
  805. } else {
  806.     Class JVGParameterD : {JVGParameter OPParameter} {    
  807.     }
  808. }
  809.  
  810. global mostDerivedOOPL ; set mostDerivedOOPL(OPParameter) JVGParameterD
  811.  
  812. selfPromoter OPParameter {this} {
  813.     JVGParameterD promote $this
  814. }
  815.  
  816.  
  817. #---------------------------------------------------------------------------
  818. #      File:           @(#)jvgtype.tcl    /main/titanic/4
  819.  
  820.  
  821. Class JVGType : {JVGObject} {
  822.     constructor
  823.     method destructor
  824. }
  825.  
  826. constructor JVGType {class this name} {
  827.     set this [JVGObject::constructor $class $this $name]
  828.     # Start constructor user section
  829.     # End constructor user section
  830.     return $this
  831. }
  832.  
  833. method JVGType::destructor {this} {
  834.     # Start destructor user section
  835.     # End destructor user section
  836. }
  837.  
  838. # Do not delete this line -- regeneration end marker
  839.  
  840. if [isCommand CMType] {
  841.     Class  JVGTypeD : {JVGType CMType} {
  842.     }
  843. } else {
  844.     Class JVGTypeD : {JVGType OPType} {    
  845.     }
  846. }
  847.  
  848. global mostDerivedOOPL ; set mostDerivedOOPL(OPType) JVGTypeD
  849.  
  850. selfPromoter OPType {this} {
  851.     JVGTypeD promote $this
  852. }
  853.  
  854.  
  855. #---------------------------------------------------------------------------
  856. #      File:           @(#)jvgclassen.tcl    /main/titanic/4
  857.  
  858.  
  859. Class JVGClassEnum : {JVGClass} {
  860.     constructor
  861.     method destructor
  862.     method check
  863.     method generate
  864. }
  865.  
  866. constructor JVGClassEnum {class this name} {
  867.     set this [JVGClass::constructor $class $this $name]
  868.     # Start constructor user section
  869.     # End constructor user section
  870.     return $this
  871. }
  872.  
  873. method JVGClassEnum::destructor {this} {
  874.     # Start destructor user section
  875.     # End destructor user section
  876. }
  877.  
  878. method JVGClassEnum::check {this} {
  879.     # !! Implement this function !!
  880. }
  881.  
  882. method JVGClassEnum::generate {this model} {
  883.     if {[$this isExternal] || [$this container] != ""} {
  884.         return
  885.     }
  886.  
  887.     $this setUnit $model
  888.     $this generateImportStatements
  889.     $this container [JavaEnumClass new $this]
  890.     $this generateContainer
  891.     $this generatePackages
  892.     $this generateComment
  893.     $this generateAccess
  894.     $this generateModifier
  895.  
  896.     foreach dataAttr [$this dataAttrSet] {
  897.         $dataAttr generateEnumVariable
  898.     }
  899. }
  900.  
  901. # Do not delete this line -- regeneration end marker
  902.  
  903. if [isCommand CMClassEnum] {
  904.     Class  JVGClassEnumD : {JVGClassEnum CMClassEnum} {
  905.     }
  906. } else {
  907.     Class JVGClassEnumD : {JVGClassEnum OPClassEnum} {    
  908.     }
  909. }
  910.  
  911. global mostDerivedOOPL ; set mostDerivedOOPL(OPClassEnum) JVGClassEnumD
  912.  
  913. selfPromoter OPClassEnum {this} {
  914.     JVGClassEnumD promote $this
  915. }
  916.  
  917.  
  918. #---------------------------------------------------------------------------
  919. #      File:           @(#)jvgclassge.tcl    /main/titanic/3
  920.  
  921.  
  922. Class JVGClassGenericTypeDef : {JVGClass} {
  923.     constructor
  924.     method destructor
  925.     method check
  926.     method generate
  927. }
  928.  
  929. constructor JVGClassGenericTypeDef {class this name} {
  930.     set this [JVGClass::constructor $class $this $name]
  931.     # Start constructor user section
  932.     # End constructor user section
  933.     return $this
  934. }
  935.  
  936. method JVGClassGenericTypeDef::destructor {this} {
  937.     # Start destructor user section
  938.     # End destructor user section
  939. }
  940.  
  941. method JVGClassGenericTypeDef::check {this} {
  942.     # !! Implement this function !!
  943. }
  944.  
  945. method JVGClassGenericTypeDef::generate {this model} {
  946.     $this JVGClass::generate $model
  947. }
  948.  
  949. # Do not delete this line -- regeneration end marker
  950.  
  951. if [isCommand CMClassGenericTypeDef] {
  952.     Class  JVGClassGenericTypeDefD : {JVGClassGenericTypeDef CMClassGenericTypeDef} {
  953.     }
  954. } else {
  955.     Class JVGClassGenericTypeDefD : {JVGClassGenericTypeDef OPClassGenericTypeDef} {    
  956.     }
  957. }
  958.  
  959. global mostDerivedOOPL ; set mostDerivedOOPL(OPClassGenericTypeDef) JVGClassGenericTypeDefD
  960.  
  961. selfPromoter OPClassGenericTypeDef {this} {
  962.     JVGClassGenericTypeDefD promote $this
  963. }
  964.  
  965.  
  966. #---------------------------------------------------------------------------
  967. #      File:           @(#)jvgclasstd.tcl    /main/titanic/3
  968.  
  969.  
  970. Class JVGClassTDef : {JVGClass} {
  971.     constructor
  972.     method destructor
  973.     method check
  974.     method generate
  975. }
  976.  
  977. constructor JVGClassTDef {class this name} {
  978.     set this [JVGClass::constructor $class $this $name]
  979.     # Start constructor user section
  980.     # End constructor user section
  981.     return $this
  982. }
  983.  
  984. method JVGClassTDef::destructor {this} {
  985.     # Start destructor user section
  986.     # End destructor user section
  987. }
  988.  
  989. method JVGClassTDef::check {this} {
  990.     # !! Implement this function !!
  991. }
  992.  
  993. method JVGClassTDef::generate {this model} {
  994.     $this JVGClass::generate $model
  995. }
  996.  
  997. # Do not delete this line -- regeneration end marker
  998.  
  999. if [isCommand CMClassTDef] {
  1000.     Class  JVGClassTDefD : {JVGClassTDef CMClassTDef} {
  1001.     }
  1002. } else {
  1003.     Class JVGClassTDefD : {JVGClassTDef OPClassTDef} {    
  1004.     }
  1005. }
  1006.  
  1007. global mostDerivedOOPL ; set mostDerivedOOPL(OPClassTDef) JVGClassTDefD
  1008.  
  1009. selfPromoter OPClassTDef {this} {
  1010.     JVGClassTDefD promote $this
  1011. }
  1012.  
  1013.  
  1014. #---------------------------------------------------------------------------
  1015. #      File:           @(#)jvgdatabas.tcl    /main/titanic/3
  1016.  
  1017.  
  1018. Class JVGDatabaseClass : {JVGClass} {
  1019.     constructor
  1020.     method destructor
  1021.     method check
  1022.     method generate
  1023. }
  1024.  
  1025. constructor JVGDatabaseClass {class this name} {
  1026.     set this [JVGClass::constructor $class $this $name]
  1027.     # Start constructor user section
  1028.     # End constructor user section
  1029.     return $this
  1030. }
  1031.  
  1032. method JVGDatabaseClass::destructor {this} {
  1033.     # Start destructor user section
  1034.     # End destructor user section
  1035. }
  1036.  
  1037. method JVGDatabaseClass::check {this} {
  1038.     m4_warning $W_PERSISTENT [$this getName]
  1039. }
  1040.  
  1041. method JVGDatabaseClass::generate {this model} {
  1042.     $this check
  1043. }
  1044.  
  1045. # Do not delete this line -- regeneration end marker
  1046.  
  1047. if [isCommand CMDatabaseClass] {
  1048.     Class  JVGDatabaseClassD : {JVGDatabaseClass CMDatabaseClass} {
  1049.     }
  1050. } else {
  1051.     Class JVGDatabaseClassD : {JVGDatabaseClass OPDatabaseClass} {    
  1052.     }
  1053. }
  1054.  
  1055. global mostDerivedOOPL ; set mostDerivedOOPL(OPDatabaseClass) JVGDatabaseClassD
  1056.  
  1057. selfPromoter OPDatabaseClass {this} {
  1058.     JVGDatabaseClassD promote $this
  1059. }
  1060.  
  1061.  
  1062. #---------------------------------------------------------------------------
  1063. #      File:           @(#)jvglinkcla.tcl    /main/titanic/3
  1064.  
  1065.  
  1066. Class JVGLinkClass : {JVGClass} {
  1067.     constructor
  1068.     method destructor
  1069.     method check
  1070.     method generate
  1071. }
  1072.  
  1073. constructor JVGLinkClass {class this name} {
  1074.     set this [JVGClass::constructor $class $this $name]
  1075.     # Start constructor user section
  1076.     # End constructor user section
  1077.     return $this
  1078. }
  1079.  
  1080. method JVGLinkClass::destructor {this} {
  1081.     # Start destructor user section
  1082.     # End destructor user section
  1083. }
  1084.  
  1085. method JVGLinkClass::check {this} {
  1086.     # !! Implement this function !!
  1087. }
  1088.  
  1089. method JVGLinkClass::generate {this model} {
  1090.     $this JVGClass::generate $model
  1091. }
  1092.  
  1093. # Do not delete this line -- regeneration end marker
  1094.  
  1095. if [isCommand CMLinkClass] {
  1096.     Class  JVGLinkClassD : {JVGLinkClass CMLinkClass} {
  1097.     }
  1098. } else {
  1099.     Class JVGLinkClassD : {JVGLinkClass OPLinkClass} {    
  1100.     }
  1101. }
  1102.  
  1103. global mostDerivedOOPL ; set mostDerivedOOPL(OPLinkClass) JVGLinkClassD
  1104.  
  1105. selfPromoter OPLinkClass {this} {
  1106.     JVGLinkClassD promote $this
  1107. }
  1108.  
  1109.  
  1110. #---------------------------------------------------------------------------
  1111. #      File:           @(#)jvgattribu.tcl    /main/titanic/7
  1112.  
  1113.  
  1114. Class JVGAttribute : {JVGFeature} {
  1115.     constructor
  1116.     method destructor
  1117.     method generate
  1118.     method getAccessorAccess
  1119.     method getAttributeAccess
  1120. }
  1121.  
  1122. constructor JVGAttribute {class this name} {
  1123.     set this [JVGFeature::constructor $class $this $name]
  1124.     # Start constructor user section
  1125.     # End constructor user section
  1126.     return $this
  1127. }
  1128.  
  1129. method JVGAttribute::destructor {this} {
  1130.     # Start destructor user section
  1131.     # End destructor user section
  1132. }
  1133.  
  1134. method JVGAttribute::generate {this} {
  1135.     # !! Implement this function !!
  1136. }
  1137.  
  1138. method JVGAttribute::getAccessorAccess {this mode} {
  1139.     set access [string tolower [$this getPropertyValue attrib_access]]
  1140.  
  1141.     if {$access == ""} {
  1142.         return "public"
  1143.     }
  1144.  
  1145.     set rwAccessList [split $access -]
  1146.  
  1147.     if {[llength $rwAccessList] == 2} {
  1148.         if {$mode == "r"} {
  1149.         return [lindex $rwAccessList 0]
  1150.         }
  1151.  
  1152.         return [lindex $rwAccessList 1]
  1153.     }
  1154.  
  1155.     return $access
  1156. }
  1157.  
  1158. method JVGAttribute::getAttributeAccess {this} {
  1159.     return [string tolower [$this getPropertyValue attrib_visibility]]
  1160. }
  1161.  
  1162. # Do not delete this line -- regeneration end marker
  1163.  
  1164. if [isCommand CMAttribute] {
  1165.     Class  JVGAttributeD : {JVGAttribute CMAttribute} {
  1166.     }
  1167. } else {
  1168.     Class JVGAttributeD : {JVGAttribute OPAttribute} {    
  1169.     }
  1170. }
  1171.  
  1172. global mostDerivedOOPL ; set mostDerivedOOPL(OPAttribute) JVGAttributeD
  1173.  
  1174. selfPromoter OPAttribute {this} {
  1175.     JVGAttributeD promote $this
  1176. }
  1177.  
  1178.  
  1179. #---------------------------------------------------------------------------
  1180. #      File:           @(#)jvgconstru.tcl    /main/titanic/7
  1181.  
  1182.  
  1183. Class JVGConstructor : {JVGFeature} {
  1184.     constructor
  1185.     method destructor
  1186.     method generate
  1187. }
  1188.  
  1189. constructor JVGConstructor {class this name} {
  1190.     set this [JVGFeature::constructor $class $this $name]
  1191.     # Start constructor user section
  1192.     # End constructor user section
  1193.     return $this
  1194. }
  1195.  
  1196. method JVGConstructor::destructor {this} {
  1197.     # Start destructor user section
  1198.     # End destructor user section
  1199. }
  1200.  
  1201. method JVGConstructor::generate {this} {
  1202.     set class [$this ooplClass]
  1203.  
  1204.     if [$class isInterface] {
  1205.         return
  1206.     }
  1207.  
  1208.     set container [$class container]
  1209.     set constructor [JavaConstructor new [$class getName]]
  1210.  
  1211.     $container defaultConstructor $constructor
  1212.     $container addConstructor $constructor
  1213.  
  1214.     foreach param [$class creationParamSet] {
  1215.         set paramType [JavaType new [[$param ooplType] getName]]
  1216.         set javaParam [JavaParameter new [$param getName]_ $paramType]
  1217.         $constructor addParameter $javaParam
  1218.     }
  1219.  
  1220.     set genBody [TextSection new]
  1221.     $constructor generatorBody $genBody
  1222.  
  1223.     set superInitList ""
  1224.  
  1225.     foreach scInitializer [$this superClassInitializerSet] {
  1226.         foreach param [$scInitializer parameterSet] {
  1227.         lappend superInitList "[$param getName]_"
  1228.         }
  1229.     }
  1230.  
  1231.     if {$superInitList != ""} {
  1232.         $genBody append "super([join $superInitList ", "]);\n"
  1233.     }
  1234.  
  1235.     foreach initializer [$this initializerSet] {
  1236.         $initializer generate $genBody
  1237.     }
  1238.  
  1239.     foreach assoc [$class genAssocAttrSet] {
  1240.         set var [$assoc getAssocVariable]
  1241.  
  1242.         if {![$assoc isClassFeature]} {
  1243.         if [$assoc isQualified] {
  1244.             $genBody append "$var = new Hashtable();\n"
  1245.         } elseif {[$assoc getMultiplicity] == "many"} {
  1246.             if {[$assoc isOrdered]} {
  1247.             $genBody append "$var = new Queue();\n"
  1248.             } else {
  1249.             $genBody append "$var = new Vector();\n"
  1250.             }
  1251.         }
  1252.         }
  1253.  
  1254.         if [$assoc isReverseLinkAttr] {
  1255.         set opposite [$assoc opposite]
  1256.  
  1257.         if {$opposite != ""} {
  1258.             $genBody append [$opposite extendAssociation $var]
  1259.         }
  1260.         }
  1261.     }
  1262.  
  1263.     set access [$this getMethodAccess]
  1264.  
  1265.     if {$access == ""} {
  1266.         set access "public"
  1267.     }
  1268.  
  1269.     $constructor access [JavaAccess new $access]
  1270. }
  1271.  
  1272. # Do not delete this line -- regeneration end marker
  1273.  
  1274. if [isCommand CMConstructor] {
  1275.     Class  JVGConstructorD : {JVGConstructor CMConstructor} {
  1276.     }
  1277. } else {
  1278.     Class JVGConstructorD : {JVGConstructor OPConstructor} {    
  1279.     }
  1280. }
  1281.  
  1282. global mostDerivedOOPL ; set mostDerivedOOPL(OPConstructor) JVGConstructorD
  1283.  
  1284. selfPromoter OPConstructor {this} {
  1285.     JVGConstructorD promote $this
  1286. }
  1287.  
  1288.  
  1289. #---------------------------------------------------------------------------
  1290. #      File:           @(#)jvgoperati.tcl    /main/titanic/11
  1291.  
  1292.  
  1293. Class JVGOperation : {JVGFeature} {
  1294.     constructor
  1295.     method destructor
  1296.     method check
  1297.     method checkClassMethod
  1298.     method checkInterfaceMethod
  1299.     method checkStaticInitializer
  1300.     method checkUserConstructor
  1301.     method generate
  1302.     method generateClassMethod
  1303.     method generateExceptions
  1304.     method generateImportStatements
  1305.     method generateInterfaceMethod
  1306.     method generateParameters
  1307.     method generateStaticInitializer
  1308.     method generateUserConstructor
  1309.     method injectCode
  1310. }
  1311.  
  1312. constructor JVGOperation {class this name} {
  1313.     set this [JVGFeature::constructor $class $this $name]
  1314.     # Start constructor user section
  1315.     # End constructor user section
  1316.     return $this
  1317. }
  1318.  
  1319. method JVGOperation::destructor {this} {
  1320.     # Start destructor user section
  1321.     # End destructor user section
  1322. }
  1323.  
  1324. method JVGOperation::check {this} {
  1325.     if {[$this getPropertyValue is_static] != ""} {
  1326.         m4_warning $W_OLDPROPERTY is_static
  1327.     }
  1328.  
  1329.     if {[$this getMethodAccess] == "private protected"} {
  1330.         m4_warning $W_PRIVPROT method [$this getName] [[$this ooplClass] getName]
  1331.     }
  1332.  
  1333.     if {[$this isClassFeature] && [$this getName] == "create"} {
  1334.         return [$this checkUserConstructor]
  1335.     }
  1336.  
  1337.     if {[$this getName] == "static"} {
  1338.         return [$this checkStaticInitializer]
  1339.     }
  1340.  
  1341.     if [[$this ooplClass] isInterface] {
  1342.         return [$this checkInterfaceMethod]
  1343.     }
  1344.  
  1345.     return [$this checkClassMethod]
  1346. }
  1347.  
  1348. method JVGOperation::checkClassMethod {this} {
  1349.     if [$this isAbstract] {
  1350.         set class [$this ooplClass]
  1351.         set className [$class getName]
  1352.  
  1353.         if {[$class getModifier] != "abstract"} {
  1354.         m4_warning $W_ABSTRACTMETH $className [$this getName]
  1355.         }
  1356.  
  1357.         set access [$this getMethodAccess]
  1358.  
  1359.         if {$access == "private" || $access == "private protected"} {
  1360.         m4_warning $W_ABSPRIVMETH $access [$this getName] $className
  1361.         }
  1362.     }
  1363. }
  1364.  
  1365. method JVGOperation::checkInterfaceMethod {this} {
  1366.     set access [$this getMethodAccess]
  1367.     set className [[$this ooplClass] getName]
  1368.  
  1369.     if {$access == "private" || $access == "protected" ||
  1370.         $access == "private protected"} {
  1371.         m4_warning $W_INVINTDECL $access [$this getName] $className
  1372.     }
  1373.  
  1374.     if [$this isNative] {
  1375.         m4_warning $W_INVINTDECL native [$this getName] $className
  1376.     }
  1377.  
  1378.     if [$this isClassFeature] {
  1379.         m4_warning $W_INVINTDECL static [$this getName] $className
  1380.     }
  1381.  
  1382.     if [$this isSynchronized] {
  1383.         m4_warning $W_INVINTDECL synchronized [$this getName] $className
  1384.     }
  1385.  
  1386.     if [$this isFinal] {
  1387.         m4_warning $W_INVINTDECL final [$this getName] $className
  1388.     }
  1389. }
  1390.  
  1391. method JVGOperation::checkStaticInitializer {this} {
  1392. }
  1393.  
  1394. method JVGOperation::checkUserConstructor {this} {
  1395. }
  1396.  
  1397. method JVGOperation::generate {this} {
  1398.     $this generateImportStatements
  1399.  
  1400.     set name [$this getName]
  1401.  
  1402.     if {[$this isClassFeature] && $name == "create"} {
  1403.         return [$this generateUserConstructor]
  1404.     }
  1405.  
  1406.     if {$name == "static"} {
  1407.         return [$this generateStaticInitializer]
  1408.     }
  1409.  
  1410.     if [[$this ooplClass] isInterface] {
  1411.         return [$this generateInterfaceMethod]
  1412.     }
  1413.  
  1414.     return [$this generateClassMethod]
  1415. }
  1416.  
  1417. method JVGOperation::generateClassMethod {this} {
  1418.     set class [$this ooplClass]
  1419.     set container [$class container]
  1420.     set method [JavaUserMethod new [$this getName]]
  1421.  
  1422.     $container addMethod $method
  1423.  
  1424.     $method comment [$this getComment]
  1425.  
  1426.     if {[$this getTypeName] == ""} {
  1427.         $method type [JavaType new "void"]
  1428.     } else {
  1429.         $method type [JavaType new [$this getTypeName]]
  1430.     }
  1431.  
  1432.     set access [$this getMethodAccess]
  1433.  
  1434.     if {[$this isAbstract] &&
  1435.         ($access == "private" || $access == "private protected")} {
  1436.         set access "none"
  1437.     }
  1438.  
  1439.     if {$access != "none"} {
  1440.         if {$access == ""} {
  1441.         set access "public"
  1442.         }
  1443.  
  1444.         $method access [JavaAccess new $access]
  1445.     }
  1446.  
  1447.     if [$this isAbstract] {
  1448.         $method addModifier [JavaModifier new "abstract"]
  1449.         $method hasBody 0
  1450.     } else {
  1451.         if [$this isClassFeature] {
  1452.         $method addModifier [JavaModifier new "static"]
  1453.         }
  1454.  
  1455.         if [$this isFinal] {
  1456.         $method addModifier [JavaModifier new "final"]
  1457.         }
  1458.     }
  1459.  
  1460.     if [$this isNative] {
  1461.         $method addModifier [JavaModifier new "native"]
  1462.         $method hasBody 0
  1463.     }
  1464.  
  1465.     if [$this isSynchronized] {
  1466.         $method addModifier [JavaModifier new "synchronized"]
  1467.     }
  1468.  
  1469.     $this injectCode $method
  1470.     $this generateParameters $method
  1471.     $this generateExceptions $method
  1472. }
  1473.  
  1474. method JVGOperation::generateExceptions {this method} {
  1475.     foreach throwException [$this getPropertyValue method_exceptions] {
  1476.         $method addThrow [JavaException new $throwException]
  1477.     }
  1478. }
  1479.  
  1480. method JVGOperation::generateImportStatements {this} {
  1481.     $this JVGFeature::generateImportStatements
  1482.  
  1483.     foreach param [$this parameterSet] {
  1484.         $param generateImportStatements [[$this ooplClass] unit]
  1485.     }
  1486. }
  1487.  
  1488. method JVGOperation::generateInterfaceMethod {this} {
  1489.     set class [$this ooplClass]
  1490.     set container [$class container]
  1491.     set method [JavaUserMethod new [$this getName]]
  1492.  
  1493.     $container addMethod $method
  1494.     $method hasBody 0
  1495.     $method comment [$this getComment]
  1496.  
  1497.     if {[$this getTypeName] == ""} {
  1498.         $method type [JavaType new "void"]
  1499.     } else {
  1500.         $method type [JavaType new [$this getTypeName]]
  1501.     }
  1502.  
  1503.     set access [$this getMethodAccess]
  1504.  
  1505.     if {$access != "none"} {
  1506.         set access "public"
  1507.  
  1508.         $method access [JavaAccess new $access]
  1509.     }
  1510.  
  1511.     if [$this isAbstract] {
  1512.         $method addModifier [JavaModifier new "abstract"]
  1513.         $method hasBody 0
  1514.     }
  1515.  
  1516.     $this generateParameters $method
  1517.     $this generateExceptions $method
  1518. }
  1519.  
  1520. method JVGOperation::generateParameters {this method} {
  1521.     foreach param [$this parameterSet] {
  1522.         set paramType [JavaType new [[$param ooplType] getName]]
  1523.         set javaParam [JavaParameter new [$param getName] $paramType]
  1524.         $method addParameter $javaParam
  1525.     }
  1526. }
  1527.  
  1528. method JVGOperation::generateStaticInitializer {this} {
  1529.     set container [[$this ooplClass] container]
  1530.     set initializer [JavaStaticInitializer new "static"]
  1531.  
  1532.     $container addMethod $initializer
  1533.  
  1534.     $initializer comment [$this getComment]
  1535.  
  1536.     $this injectCode $initializer
  1537. }
  1538.  
  1539. method JVGOperation::generateUserConstructor {this} {
  1540.     set class [$this ooplClass]
  1541.     set container [$class container]
  1542.     set constructor [JavaUserConstructor new [$class getName]]
  1543.  
  1544.     $container addUserConstructor $constructor
  1545.     $container addConstructor $constructor
  1546.  
  1547.     $constructor comment [$this getComment]
  1548.  
  1549.     foreach param [$this parameterSet] {
  1550.         set paramType [JavaType new [[$param ooplType] getName]]
  1551.         set javaParam [JavaParameter new [$param getName] $paramType]
  1552.         $constructor addParameter $javaParam
  1553.     }
  1554.  
  1555.     foreach throwException [$this getPropertyValue method_exceptions] {
  1556.         $constructor addThrow [JavaException new $throwException]
  1557.     }
  1558.  
  1559.     set access [$this getMethodAccess]
  1560.  
  1561.     if {$access == "" || $access == "none"} {
  1562.         set access "public"
  1563.     }
  1564.  
  1565.     $constructor access [JavaAccess new $access]
  1566.  
  1567.     $this injectCode $constructor
  1568. }
  1569.  
  1570. method JVGOperation::injectCode {this method} {
  1571.     if {[m4_var get M4_code_injection] == "true"} {
  1572.         set code [$this getPropertyValue code_injection_body]
  1573.  
  1574.         if {$code != ""} {
  1575.         set codeSection [TextSection new]
  1576.         $codeSection append $code
  1577.         $method userBody $codeSection
  1578.         }
  1579.     }
  1580. }
  1581.  
  1582. # Do not delete this line -- regeneration end marker
  1583.  
  1584. if [isCommand CMOperation] {
  1585.     Class  JVGOperationD : {JVGOperation CMOperation} {
  1586.     }
  1587. } else {
  1588.     Class JVGOperationD : {JVGOperation OPOperation} {    
  1589.     }
  1590. }
  1591.  
  1592. global mostDerivedOOPL ; set mostDerivedOOPL(OPOperation) JVGOperationD
  1593.  
  1594. selfPromoter OPOperation {this} {
  1595.     JVGOperationD promote $this
  1596. }
  1597.  
  1598.  
  1599. #---------------------------------------------------------------------------
  1600. #      File:           @(#)jvgctorpar.tcl    /main/titanic/2
  1601.  
  1602.  
  1603. Class JVGCtorParameter : {JVGParameter} {
  1604.     constructor
  1605.     method destructor
  1606. }
  1607.  
  1608. constructor JVGCtorParameter {class this name} {
  1609.     set this [JVGParameter::constructor $class $this $name]
  1610.     # Start constructor user section
  1611.     # End constructor user section
  1612.     return $this
  1613. }
  1614.  
  1615. method JVGCtorParameter::destructor {this} {
  1616.     # Start destructor user section
  1617.     # End destructor user section
  1618. }
  1619.  
  1620. # Do not delete this line -- regeneration end marker
  1621.  
  1622. if [isCommand CMCtorParameter] {
  1623.     Class  JVGCtorParameterD : {JVGCtorParameter CMCtorParameter} {
  1624.     }
  1625. } else {
  1626.     Class JVGCtorParameterD : {JVGCtorParameter OPCtorParameter} {    
  1627.     }
  1628. }
  1629.  
  1630. global mostDerivedOOPL ; set mostDerivedOOPL(OPCtorParameter) JVGCtorParameterD
  1631.  
  1632. selfPromoter OPCtorParameter {this} {
  1633.     JVGCtorParameterD promote $this
  1634. }
  1635.  
  1636.  
  1637. #---------------------------------------------------------------------------
  1638. #      File:           @(#)jvgoperpar.tcl    /main/titanic/2
  1639.  
  1640.  
  1641. Class JVGOperParameter : {JVGParameter} {
  1642.     constructor
  1643.     method destructor
  1644. }
  1645.  
  1646. constructor JVGOperParameter {class this name} {
  1647.     set this [JVGParameter::constructor $class $this $name]
  1648.     # Start constructor user section
  1649.     # End constructor user section
  1650.     return $this
  1651. }
  1652.  
  1653. method JVGOperParameter::destructor {this} {
  1654.     # Start destructor user section
  1655.     # End destructor user section
  1656. }
  1657.  
  1658. # Do not delete this line -- regeneration end marker
  1659.  
  1660. if [isCommand CMOperParameter] {
  1661.     Class  JVGOperParameterD : {JVGOperParameter CMOperParameter} {
  1662.     }
  1663. } else {
  1664.     Class JVGOperParameterD : {JVGOperParameter OPOperParameter} {    
  1665.     }
  1666. }
  1667.  
  1668. global mostDerivedOOPL ; set mostDerivedOOPL(OPOperParameter) JVGOperParameterD
  1669.  
  1670. selfPromoter OPOperParameter {this} {
  1671.     JVGOperParameterD promote $this
  1672. }
  1673.  
  1674.  
  1675. #---------------------------------------------------------------------------
  1676. #      File:           @(#)jvgbasetyp.tcl    /main/titanic/3
  1677.  
  1678.  
  1679. Class JVGBaseType : {JVGType} {
  1680.     constructor
  1681.     method destructor
  1682.     method getName
  1683. }
  1684.  
  1685. constructor JVGBaseType {class this name} {
  1686.     set this [JVGType::constructor $class $this $name]
  1687.     # Start constructor user section
  1688.     # End constructor user section
  1689.     return $this
  1690. }
  1691.  
  1692. method JVGBaseType::destructor {this} {
  1693.     # Start destructor user section
  1694.     # End destructor user section
  1695. }
  1696.  
  1697. method JVGBaseType::getName {this} {
  1698.     set name [$this getType3GL]
  1699.  
  1700.     if {$name != ""} {
  1701.         return $name
  1702.     }
  1703.  
  1704.     return [$this OPType::getName]
  1705. }
  1706.  
  1707. # Do not delete this line -- regeneration end marker
  1708.  
  1709. if [isCommand CMBaseType] {
  1710.     Class  JVGBaseTypeD : {JVGBaseType CMBaseType} {
  1711.     }
  1712. } else {
  1713.     Class JVGBaseTypeD : {JVGBaseType OPBaseType} {    
  1714.     }
  1715. }
  1716.  
  1717. global mostDerivedOOPL ; set mostDerivedOOPL(OPBaseType) JVGBaseTypeD
  1718.  
  1719. selfPromoter OPBaseType {this} {
  1720.     JVGBaseTypeD promote $this
  1721. }
  1722.  
  1723.  
  1724. #---------------------------------------------------------------------------
  1725. #      File:           @(#)jvgdblinkc.tcl    /main/titanic/3
  1726.  
  1727.  
  1728. Class JVGDBLinkClass : {JVGLinkClass} {
  1729.     constructor
  1730.     method destructor
  1731.     method check
  1732.     method generate
  1733. }
  1734.  
  1735. constructor JVGDBLinkClass {class this name} {
  1736.     set this [JVGLinkClass::constructor $class $this $name]
  1737.     # Start constructor user section
  1738.     # End constructor user section
  1739.     return $this
  1740. }
  1741.  
  1742. method JVGDBLinkClass::destructor {this} {
  1743.     # Start destructor user section
  1744.     # End destructor user section
  1745. }
  1746.  
  1747. method JVGDBLinkClass::check {this} {
  1748.     m4_warning $W_PERSISTENT [$this getName]
  1749. }
  1750.  
  1751. method JVGDBLinkClass::generate {this model} {
  1752.     $this check
  1753. }
  1754.  
  1755. # Do not delete this line -- regeneration end marker
  1756.  
  1757. if [isCommand CMDBLinkClass] {
  1758.     Class  JVGDBLinkClassD : {JVGDBLinkClass CMDBLinkClass} {
  1759.     }
  1760. } else {
  1761.     Class JVGDBLinkClassD : {JVGDBLinkClass OPDBLinkClass} {    
  1762.     }
  1763. }
  1764.  
  1765. global mostDerivedOOPL ; set mostDerivedOOPL(OPDBLinkClass) JVGDBLinkClassD
  1766.  
  1767. selfPromoter OPDBLinkClass {this} {
  1768.     JVGDBLinkClassD promote $this
  1769. }
  1770.  
  1771.  
  1772. #---------------------------------------------------------------------------
  1773. #      File:           @(#)jvgdataatt.tcl    /main/titanic/10
  1774.  
  1775.  
  1776. Class JVGDataAttr : {JVGAttribute} {
  1777.     constructor
  1778.     method destructor
  1779.     method check
  1780.     method checkClassVariable
  1781.     method checkInterfaceVariable
  1782.     method generate
  1783.     method generateClassVariable
  1784.     method generateEnumVariable
  1785.     method generateInterfaceVariable
  1786.     method getVariableInitializer
  1787. }
  1788.  
  1789. constructor JVGDataAttr {class this name} {
  1790.     set this [JVGAttribute::constructor $class $this $name]
  1791.     # Start constructor user section
  1792.     # End constructor user section
  1793.     return $this
  1794. }
  1795.  
  1796. method JVGDataAttr::destructor {this} {
  1797.     # Start destructor user section
  1798.     # End destructor user section
  1799. }
  1800.  
  1801. method JVGDataAttr::check {this} {
  1802.     if {[$this getPropertyValue is_static] != ""} {
  1803.         m4_warning $W_OLDPROPERTY is_static
  1804.     }
  1805.  
  1806.     if {[$this getPropertyValue default_value] != ""} {
  1807.         m4_warning $W_OLDPROPERTY default_value
  1808.     }
  1809.  
  1810.     if {[$this getAttributeAccess] == "private protected"} {
  1811.         m4_warning $W_PRIVPROT attribute [$this getName] [[$this ooplClass] getName]
  1812.     }
  1813.  
  1814.     if [[$this ooplClass] isInterface] {
  1815.         return [$this checkInterfaceVariable]
  1816.     }
  1817.  
  1818.     return [$this checkClassVariable]
  1819. }
  1820.  
  1821. method JVGDataAttr::checkClassVariable {this} {
  1822.     set class [$this ooplClass]
  1823.  
  1824.     if [$this isTransient] {
  1825.         if {[$this isClassFeature] || [$this isFinal]} {
  1826.         m4_warning $W_TRANSIENTVAR [$this getName] [$class getName]
  1827.         }
  1828.     }
  1829.  
  1830.     if {[$this isFinal] && [$this getPropertyValue initial_value] == ""} {
  1831.         m4_warning $W_FINALVAR [$this getName] [$class getName]
  1832.     }
  1833.  
  1834.     if {[$this isFinal] && [$this isVolatile]} {
  1835.         m4_warning $W_VOLFINVAR [$this getName] [$class getName]
  1836.     }
  1837. }
  1838.  
  1839. method JVGDataAttr::checkInterfaceVariable {this} {
  1840.     if {[$this getPropertyValue initial_value] == ""} {
  1841.         m4_warning $W_INTVARNOASSGN [$this getName]
  1842.     }
  1843.  
  1844.     if [$this isVolatile] {
  1845.         m4_warning $W_VOLINTVAR [$this getName] [[$this ooplClass] getName]
  1846.     }
  1847. }
  1848.  
  1849. method JVGDataAttr::generate {this} {
  1850.     $this generateImportStatements
  1851.  
  1852.     if [[$this ooplClass] isInterface] {
  1853.         return [$this generateInterfaceVariable]
  1854.     }
  1855.  
  1856.     return [$this generateClassVariable]
  1857. }
  1858.  
  1859. method JVGDataAttr::generateClassVariable {this} {
  1860.     set class [$this ooplClass]
  1861.     set container [$class container]
  1862.     set variable [JavaVariable new [$this getName]]
  1863.  
  1864.     $container addVariable $variable
  1865.  
  1866.     $variable type [JavaType new [$this getTypeName]]
  1867.     $variable comment [$this getComment]
  1868.     $variable initializer [$this getVariableInitializer]
  1869.  
  1870.     set access [$this getAttributeAccess]
  1871.  
  1872.     if {$access != "none"} {
  1873.         if {$access == ""} {
  1874.         set access "private"
  1875.         }
  1876.  
  1877.         $variable access [JavaAccess new $access]
  1878.     }
  1879.  
  1880.     if [$this isClassFeature] {
  1881.         $variable addModifier [JavaModifier new "static"]
  1882.     }
  1883.  
  1884.     if [$this isFinal] {
  1885.         $variable addModifier [JavaModifier new "final"]
  1886.     }
  1887.  
  1888.     if [$this isThreadsafe] {
  1889.         $variable addModifier [JavaModifier new "threadsafe"]
  1890.     }
  1891.  
  1892.     if [$this isTransient] {
  1893.         $variable addModifier [JavaModifier new "transient"]
  1894.     }
  1895.  
  1896.     if [$this isVolatile] {
  1897.         $variable addModifier [JavaModifier new "volatile"]
  1898.     }
  1899.  
  1900.     #
  1901.     # Generate accessor methods
  1902.     #
  1903.  
  1904.     set access [$this getAccessorAccess "r"]
  1905.  
  1906.     if {$access != "none"} {
  1907.         set ident [$this getName]
  1908.         set genBody [TextSection new]
  1909.         set accessor [JavaAccMethod new "get[cap $ident]"]
  1910.  
  1911.         if [$this isClassFeature] {
  1912.         $accessor addModifier [JavaModifier new "static"]
  1913.         }
  1914.  
  1915.         $accessor type [JavaType new [$this getTypeName]]
  1916.         $container addAttributeAccessor $accessor
  1917.         $accessor access [JavaAccess new $access]
  1918.         $accessor generatorBody $genBody
  1919.         $genBody append "return $ident;\n"
  1920.     }
  1921.  
  1922.     set access [$this getAccessorAccess "w"]
  1923.  
  1924.     if {![$this isFinal] && $access != "none"} {
  1925.         set ident [$this getName]
  1926.         set paramId "${ident}_"
  1927.         set genBody [TextSection new]
  1928.         set accessor [JavaAccMethod new "set[cap $ident]"]
  1929.         set type [JavaType new [$this getTypeName]]
  1930.         set parameter [JavaParameter new $paramId $type]
  1931.  
  1932.         if [$this isClassFeature] {
  1933.         $accessor addModifier [JavaModifier new "static"]
  1934.         }
  1935.  
  1936.         $container addAttributeAccessor $accessor
  1937.         $accessor type [JavaType new "void"]
  1938.         $accessor addParameter $parameter
  1939.         $accessor access [JavaAccess new $access]
  1940.         $accessor generatorBody $genBody
  1941.         $genBody append "$ident = $paramId;\n"
  1942.     }
  1943. }
  1944.  
  1945. method JVGDataAttr::generateEnumVariable {this} {
  1946.     set variable [JavaVariable new [$this getName]]
  1947.  
  1948.     [[$this ooplClass] container] addVariable $variable
  1949.  
  1950.     $variable type [JavaType new "int"]
  1951.     $variable initializer [$this getVariableInitializer]
  1952.     $variable addModifier [JavaModifier new "static"]
  1953.     $variable addModifier [JavaModifier new "final"]
  1954.  
  1955.     set access [$this getAttributeAccess]
  1956.  
  1957.     if {$access != "none"} {
  1958.         if {$access == ""} {
  1959.         set access "public"
  1960.         }
  1961.  
  1962.         $variable access [JavaAccess new $access]
  1963.     }
  1964. }
  1965.  
  1966. method JVGDataAttr::generateInterfaceVariable {this} {
  1967.     set class [$this ooplClass]
  1968.     set container [$class container]
  1969.     set variable [JavaVariable new [$this getName]]
  1970.  
  1971.     $container addVariable $variable
  1972.  
  1973.     $variable type [JavaType new [$this getTypeName]]
  1974.     $variable comment [$this getComment]
  1975.     $variable access [JavaAccess new "public"]
  1976.     $variable initializer [$this getVariableInitializer]
  1977.  
  1978.     if [$this isClassFeature] {
  1979.         $variable addModifier [JavaModifier new "static"]
  1980.     }
  1981.  
  1982.     if [$this isFinal] {
  1983.         $variable addModifier [JavaModifier new "final"]
  1984.     }
  1985. }
  1986.  
  1987. method JVGDataAttr::getVariableInitializer {this} {
  1988.     if {[set initVal [$this getPropertyValue initial_value]] != ""} {
  1989.         return [JavaInitializer new $initVal]
  1990.     }
  1991.  
  1992.     return ""
  1993. }
  1994.  
  1995. # Do not delete this line -- regeneration end marker
  1996.  
  1997. if [isCommand CMDataAttr] {
  1998.     Class  JVGDataAttrD : {JVGDataAttr CMDataAttr} {
  1999.     }
  2000. } else {
  2001.     Class JVGDataAttrD : {JVGDataAttr OPDataAttr} {    
  2002.     }
  2003. }
  2004.  
  2005. global mostDerivedOOPL ; set mostDerivedOOPL(OPDataAttr) JVGDataAttrD
  2006.  
  2007. selfPromoter OPDataAttr {this} {
  2008.     JVGDataAttrD promote $this
  2009. }
  2010.  
  2011.  
  2012. #---------------------------------------------------------------------------
  2013. #      File:           @(#)jvggenasso.tcl    /main/titanic/8
  2014.  
  2015.  
  2016. Class JVGGenAssocAttr : {JVGAttribute} {
  2017.     constructor
  2018.     method destructor
  2019.     method check
  2020.     method generate
  2021.     method generateAddAccessor
  2022.     method generateGetAccessor
  2023.     method generateGetManyAccessor
  2024.     method generateRemoveAccessor
  2025.     method generateSetAccessor
  2026.     method generateAssociationVariable
  2027.     method getAssocIdentifier
  2028.     method getAssocVariable
  2029.     method isClassFeature
  2030.     method extendAssociation
  2031.     method reduceAssociation
  2032.     method setAssociation
  2033. }
  2034.  
  2035. constructor JVGGenAssocAttr {class this name} {
  2036.     set this [JVGAttribute::constructor $class $this $name]
  2037.     # Start constructor user section
  2038.     # End constructor user section
  2039.     return $this
  2040. }
  2041.  
  2042. method JVGGenAssocAttr::destructor {this} {
  2043.     # Start destructor user section
  2044.     # End destructor user section
  2045. }
  2046.  
  2047. method JVGGenAssocAttr::check {this} {
  2048.     if [$this isClassFeature] {
  2049.         if {[$this opposite] != ""} {
  2050.         set className [[$this ooplClass] getName]
  2051.  
  2052.         m4_warning $W_BIDIRSTATIC [$this getName] $className
  2053.         }
  2054.     }
  2055. }
  2056.  
  2057. method JVGGenAssocAttr::generate {this} {
  2058.     # !! Implement this function !!
  2059. }
  2060.  
  2061. method JVGGenAssocAttr::generateAddAccessor {this} {
  2062.     set ident [$this getAssocIdentifier]
  2063.  
  2064.     if [$this isOrdered] {
  2065.         set accessor [JavaAccMethod new "append[cap $ident]"]
  2066.     } else {
  2067.         set accessor [JavaAccMethod new "add[cap $ident]"]
  2068.     }
  2069.  
  2070.     [[$this ooplClass] container] addAssociationAccessor $accessor
  2071.  
  2072.     if [$this isClassFeature] {
  2073.         $accessor addModifier [JavaModifier new "static"]
  2074.     }
  2075.  
  2076.     $accessor type [JavaType new "void"]
  2077.  
  2078.     if [$this isQualified] {
  2079.         set qualifier [$this qualifier]
  2080.         set qualTypeName [[$qualifier ooplType] getName]
  2081.         set qualId "[$qualifier getName]_"
  2082.         set type [JavaType new $qualTypeName]
  2083.         $accessor addParameter [JavaParameter new $qualId $type]
  2084.     }
  2085.  
  2086.     set opposite [$this opposite]
  2087.  
  2088.     if {$opposite != "" && [$opposite isQualified]} {
  2089.         set qualTypeName [[[$opposite qualifier] ooplType] getName]
  2090.         set qualId "[[$opposite qualifier] getName]_"
  2091.         set type [JavaType new $qualTypeName]
  2092.         $accessor addParameter [JavaParameter new $qualId $type]
  2093.     }
  2094.  
  2095.     set paramId "${ident}_"
  2096.     set type [JavaType new [[$this ooplType] getName]]
  2097.     $accessor addParameter [JavaParameter new $paramId $type]
  2098.  
  2099.     set body [TextSection new]
  2100.  
  2101.     $accessor generatorBody $body
  2102.  
  2103.     $body append "if ($paramId == null)\n"
  2104.     $body append "    return;\n";
  2105.  
  2106.     if {$opposite != ""} {
  2107.         if {[$opposite getMultiplicity] == "one" &&
  2108.         ![$opposite isQualified] && ![$this isQualified]} {
  2109.             $body append [$opposite setAssociation $paramId]
  2110.         }
  2111.  
  2112.         $body append [$opposite extendAssociation $paramId]
  2113.     }
  2114.  
  2115.     if [$this isQualified] {
  2116.         [[$this ooplClass] container] needsVector 1
  2117.         set varName [$this getAssocVariable]
  2118.  
  2119.         $body append "// You must supply a hashCode and equals method for Object\n"
  2120.         $body append "// [[$this qualifier] getName] for java.util.Hashtable usage.\n"
  2121.         $body append "Vector vector = (Vector) $varName.get($qualId);\n"
  2122.         $body append "if (vector == null) {\n"
  2123.         $body append "    vector = new Vector();\n"
  2124.         $body append "    $varName.put($qualId, vector);\n"
  2125.         $body append "}\n"
  2126.         $body append "vector.addElement($paramId);\n"
  2127.     } else {
  2128.         $body append [$this extendAssociation "" $paramId]
  2129.     }
  2130.  
  2131.     set access [$this getAccessorAccess w]
  2132.  
  2133.     if {$access != "none"} {
  2134.         $accessor access [JavaAccess new $access]
  2135.     }
  2136. }
  2137.  
  2138. method JVGGenAssocAttr::generateGetAccessor {this} {
  2139.     set varName [$this getAssocVariable]
  2140.     set accessor [JavaAccMethod new "get[cap $varName]"]
  2141.  
  2142.     [[$this ooplClass] container] addAssociationAccessor $accessor
  2143.  
  2144.     if [$this isClassFeature] {
  2145.         $accessor addModifier [JavaModifier new "static"]
  2146.     }
  2147.  
  2148.     $accessor type [JavaType new [[$this ooplType] getName]]
  2149.  
  2150.     set access [$this getAccessorAccess r]
  2151.  
  2152.     if {$access != "none"} {
  2153.         $accessor access [JavaAccess new $access]
  2154.     }
  2155.  
  2156.     set body [TextSection new]
  2157.  
  2158.     $body append "return $varName;\n"
  2159.  
  2160.     $accessor generatorBody $body
  2161. }
  2162.  
  2163. method JVGGenAssocAttr::generateGetManyAccessor {this} {
  2164.     set varName [$this getAssocVariable]
  2165.     set accessor [JavaAccMethod new "get[cap $varName]"]
  2166.  
  2167.     [[$this ooplClass] container] addAssociationAccessor $accessor
  2168.  
  2169.     if [$this isClassFeature] {
  2170.         $accessor addModifier [JavaModifier new "static"]
  2171.     }
  2172.  
  2173.     if [$this isOrdered] {
  2174.         $accessor type [JavaType new "Queue"]
  2175.     } else {
  2176.         [[$this ooplClass] container] needsVector 1
  2177.         $accessor type [JavaType new "Vector"]
  2178.     }
  2179.  
  2180.     set access [$this getAccessorAccess r]
  2181.  
  2182.     if {$access != "none"} {
  2183.         $accessor access [JavaAccess new $access]
  2184.     }
  2185.  
  2186.     set body [TextSection new]
  2187.  
  2188.     $body append "return $varName;\n"
  2189.  
  2190.     $accessor generatorBody $body
  2191. }
  2192.  
  2193. method JVGGenAssocAttr::generateRemoveAccessor {this} {
  2194.     set ident [$this getAssocIdentifier]
  2195.     set opposite [$this opposite]
  2196.     set accessor [JavaAccMethod new "remove[cap $ident]"]
  2197.  
  2198.     [[$this ooplClass] container] addAssociationAccessor $accessor
  2199.  
  2200.     if [$this isClassFeature] {
  2201.         $accessor addModifier [JavaModifier new "static"]
  2202.     }
  2203.  
  2204.     $accessor type [JavaType new "void"]
  2205.  
  2206.     if {$opposite != "" && [$opposite isQualified]} {
  2207.         set qualifier [$opposite qualifier]
  2208.         set type [JavaType new [[$qualifier ooplType] getName]]
  2209.         set qualId "[$qualifier getName]_"
  2210.         $accessor addParameter [JavaParameter new $qualId $type]
  2211.     }
  2212.  
  2213.     set paramId "${ident}_"
  2214.     set type [JavaType new [[$this ooplType] getName]]
  2215.     $accessor addParameter [JavaParameter new $paramId $type]
  2216.  
  2217.     set body [TextSection new]
  2218.  
  2219.     $accessor generatorBody $body
  2220.  
  2221.     $body append "if ($paramId == null)\n"
  2222.     $body append "    return;\n"
  2223.  
  2224.     if {$opposite != ""} {
  2225.         $body append [$opposite reduceAssociation $paramId]
  2226.     }
  2227.  
  2228.     $body append [$this reduceAssociation "" $paramId]
  2229.  
  2230.     set access [$this getAccessorAccess w]
  2231.  
  2232.     if {$access != "none"} {
  2233.         $accessor access [JavaAccess new $access]
  2234.     }
  2235. }
  2236.  
  2237. method JVGGenAssocAttr::generateSetAccessor {this} {
  2238.     set opposite [$this opposite]
  2239.     set ident [$this getAssocIdentifier]
  2240.     set paramId "${ident}_"
  2241.     set accessor [JavaAccMethod new "set[cap $ident]"]
  2242.  
  2243.     [[$this ooplClass] container] addAssociationAccessor $accessor
  2244.  
  2245.     if [$this isClassFeature] {
  2246.         $accessor addModifier [JavaModifier new "static"]
  2247.     }
  2248.  
  2249.     $accessor type [JavaType new "void"]
  2250.  
  2251.     set access [$this getAccessorAccess w]
  2252.  
  2253.     if {$access != "none"} {
  2254.         $accessor access [JavaAccess new $access]
  2255.     }
  2256.  
  2257.     if {$opposite != "" && [$opposite isQualified]} {
  2258.         set qualifier [$opposite qualifier]
  2259.         set type [JavaType new [[$qualifier ooplType] getName]]
  2260.         set parameter [JavaParameter new "[$qualifier getName]_" $type]
  2261.         $accessor addParameter $parameter
  2262.     }
  2263.  
  2264.     set type [JavaType new [[$this ooplType] getName]]
  2265.     $accessor addParameter [JavaParameter new $paramId $type]
  2266.  
  2267.     set body [TextSection new]
  2268.  
  2269.     $accessor generatorBody $body
  2270.  
  2271.     if {$opposite != ""} {
  2272.         if [$opposite isQualified] {
  2273.         $body append "if ($paramId != null)\n"
  2274.         $body append "    [$opposite extendAssociation $paramId]"
  2275.         } else {
  2276.         $body append "if ($ident != null)\n"
  2277.         $body append "    [$opposite reduceAssociation $ident]"
  2278.  
  2279.         if {[$opposite getMultiplicity] == "one"} {
  2280.             $body append "if ($paramId != null) {\n"
  2281.             $body append "    [$opposite setAssociation $paramId]"
  2282.             $body append "    [$opposite extendAssociation $paramId]"
  2283.             $body append "}\n"
  2284.         }
  2285.  
  2286.         if {[$opposite getMultiplicity] == "many"} {
  2287.             $body append "if ($paramId != null)\n"
  2288.             $body append "    [$opposite extendAssociation $paramId]"
  2289.         }
  2290.         }
  2291.     }
  2292.  
  2293.     $body append "$ident = $paramId;\n"
  2294. }
  2295.  
  2296. method JVGGenAssocAttr::generateAssociationVariable {this} {
  2297.     set assocVar [JavaVariable new [$this getAssocVariable]]
  2298.  
  2299.     if [$this isQualified] {
  2300.         [[$this ooplClass] container] needsHashtable 1
  2301.         $assocVar type [JavaType new "Hashtable"]
  2302.  
  2303.         if [$this isClassFeature] {
  2304.         $assocVar initializer [JavaInitializer new "new Hashtable()"]
  2305.         }
  2306.     } elseif {[$this getMultiplicity] == "many"} {
  2307.         if [$this isOrdered] {
  2308.         $assocVar type [JavaType new "Queue"]
  2309.  
  2310.         if [$this isClassFeature] {
  2311.             $assocVar initializer [JavaInitializer new "new Queue()"]
  2312.         }
  2313.         } else {
  2314.         [[$this ooplClass] container] needsVector 1
  2315.         $assocVar type [JavaType new "Vector"]
  2316.  
  2317.         if [$this isClassFeature] {
  2318.             $assocVar initializer [JavaInitializer new "new Vector()"]
  2319.         }
  2320.         }
  2321.     } else {
  2322.         $assocVar type [JavaType new [[$this ooplType] getName]]
  2323.     }
  2324.  
  2325.     [[$this ooplClass] container] addAssocVariable $assocVar
  2326.  
  2327.     if {[$this opposite] != ""} {
  2328.         set access "public"
  2329.     } else {
  2330.         set access [$this getAttributeAccess]
  2331.     }
  2332.  
  2333.     if {$access != "none"} {
  2334.         if {$access == ""} {
  2335.         set access "private"
  2336.         }
  2337.  
  2338.         $assocVar access [JavaAccess new $access]
  2339.     }
  2340.  
  2341.     if [$this isClassFeature] {
  2342.         $assocVar addModifier [JavaModifier new "static"]
  2343.     }
  2344.  
  2345.     if [$this isThreadsafe] {
  2346.         $assocVar addModifier [JavaModifier new "threadsafe"]
  2347.     }
  2348.  
  2349.     if [$this isTransient] {
  2350.         $assocVar addModifier [JavaModifier new "transient"]
  2351.     }
  2352.  
  2353.     if [$this isVolatile] {
  2354.         $assocVar addModifier [JavaModifier new "volatile"]
  2355.     }
  2356. }
  2357.  
  2358. method JVGGenAssocAttr::getAssocIdentifier {this} {
  2359.     if [$this isLinkAttr] {
  2360.         return [uncap [[$this ooplType] getName]Of[cap [$this getName]]]
  2361.     }
  2362.  
  2363.     return [$this getName]
  2364. }
  2365.  
  2366. method JVGGenAssocAttr::getAssocVariable {this} {
  2367.     if {[$this getMultiplicity] == "many"} {
  2368.         return [$this getAssocIdentifier]Set
  2369.     }
  2370.  
  2371.     return [$this getAssocIdentifier]
  2372. }
  2373.  
  2374. method JVGGenAssocAttr::isClassFeature {this} {
  2375.     if {[$this getPropertyValue "is_static"] == "1"} {
  2376.         return "1"
  2377.     }
  2378.  
  2379.     return "0"
  2380. }
  2381.  
  2382. method JVGGenAssocAttr::extendAssociation {this {prefix ""} {element "this"}} {
  2383.     set sect [TextSection new]
  2384.  
  2385.     if {$prefix != ""} {
  2386.         set prefix ${prefix}.
  2387.     }
  2388.  
  2389.     set varName [$this getAssocVariable]
  2390.  
  2391.     if [$this isQualified] {
  2392.         set qualId "[[$this qualifier] getName]_"
  2393.  
  2394.         if {[$this getMultiplicity] == "one"} {
  2395.         return "$prefix$varName.put($qualId, $element);\n"
  2396.         }
  2397.  
  2398.         set ident [$this getAssocIdentifier]
  2399.  
  2400.         return "${prefix}add[cap $ident]($qualId, $element);\n"
  2401.     }
  2402.  
  2403.     if {[$this getMultiplicity] == "one"} {
  2404.         return "$prefix$varName = $element;\n"
  2405.     }
  2406.  
  2407.     if [$this isOrdered] {
  2408.         return "$prefix$varName.append($element);\n"
  2409.     }
  2410.  
  2411.     return "$prefix$varName.addElement($element);\n"
  2412. }
  2413.  
  2414. method JVGGenAssocAttr::reduceAssociation {this {prefix ""} {element "this"}} {
  2415.     if {$prefix != ""} {
  2416.         set prefix "${prefix}."
  2417.     }
  2418.  
  2419.     set varName [$this getAssocVariable]
  2420.  
  2421.     if [$this isQualified] {
  2422.         set qualId "[[$this qualifier] getName]_"
  2423.  
  2424.         if {[$this getMultiplicity] == "one"} {
  2425.         return "$prefix$varName.remove($qualId);\n"
  2426.         }
  2427.  
  2428.         set ident [$this getAssocIdentifier]
  2429.  
  2430.         return "${prefix}remove[cap $ident]($qualId, $element);\n"
  2431.     }
  2432.  
  2433.     if {[$this getMultiplicity] == "one"} {
  2434.         return "$prefix$varName = null;\n"
  2435.     }
  2436.  
  2437.     return "$prefix$varName.removeElement($element);\n"
  2438. }
  2439.  
  2440. method JVGGenAssocAttr::setAssociation {this {prefix ""} {element "null"}} {
  2441.     if {$prefix != ""} {
  2442.         set prefix "${prefix}."
  2443.     }
  2444.  
  2445.     return "${prefix}set[cap [$this getAssocIdentifier]]($element);\n"
  2446. }
  2447.  
  2448. # Do not delete this line -- regeneration end marker
  2449.  
  2450. if [isCommand CMGenAssocAttr] {
  2451.     Class  JVGGenAssocAttrD : {JVGGenAssocAttr CMGenAssocAttr} {
  2452.     }
  2453. } else {
  2454.     Class JVGGenAssocAttrD : {JVGGenAssocAttr OPGenAssocAttr} {    
  2455.     }
  2456. }
  2457.  
  2458. global mostDerivedOOPL ; set mostDerivedOOPL(OPGenAssocAttr) JVGGenAssocAttrD
  2459.  
  2460. selfPromoter OPGenAssocAttr {this} {
  2461.     JVGGenAssocAttrD promote $this
  2462. }
  2463.  
  2464.  
  2465. #---------------------------------------------------------------------------
  2466. #      File:           @(#)jvgassocat.tcl    /main/titanic/6
  2467.  
  2468.  
  2469. Class JVGAssocAttr : {JVGGenAssocAttr} {
  2470.     constructor
  2471.     method destructor
  2472.     method generate
  2473. }
  2474.  
  2475. constructor JVGAssocAttr {class this name} {
  2476.     set this [JVGGenAssocAttr::constructor $class $this $name]
  2477.     # Start constructor user section
  2478.     # End constructor user section
  2479.     return $this
  2480. }
  2481.  
  2482. method JVGAssocAttr::destructor {this} {
  2483.     # Start destructor user section
  2484.     # End destructor user section
  2485. }
  2486.  
  2487. method JVGAssocAttr::generate {this} {
  2488.     if [[$this ooplClass] isInterface] {
  2489.         return
  2490.     }
  2491.  
  2492.     $this generateImportStatements
  2493.     $this generateAssociationVariable
  2494.  
  2495.     if {[$this getMultiplicity] == "one"} {
  2496.         if {[$this getAccessorAccess r] != "none"} {
  2497.         $this generateGetAccessor
  2498.         }
  2499.  
  2500.         if {[$this getAccessorAccess w] != "none"} {
  2501.         $this generateSetAccessor
  2502.         }
  2503.     } else {
  2504.         if {[$this getAccessorAccess w] != "none"} {
  2505.         $this generateAddAccessor
  2506.         $this generateRemoveAccessor
  2507.         }
  2508.  
  2509.         if {[$this getAccessorAccess r] != "none"} {
  2510.         $this generateGetManyAccessor
  2511.         }
  2512.     }
  2513. }
  2514.  
  2515. # Do not delete this line -- regeneration end marker
  2516.  
  2517. if [isCommand CMAssocAttr] {
  2518.     Class  JVGAssocAttrD : {JVGAssocAttr CMAssocAttr} {
  2519.     }
  2520. } else {
  2521.     Class JVGAssocAttrD : {JVGAssocAttr OPAssocAttr} {    
  2522.     }
  2523. }
  2524.  
  2525. global mostDerivedOOPL ; set mostDerivedOOPL(OPAssocAttr) JVGAssocAttrD
  2526.  
  2527. selfPromoter OPAssocAttr {this} {
  2528.     JVGAssocAttrD promote $this
  2529. }
  2530.  
  2531.  
  2532. #---------------------------------------------------------------------------
  2533. #      File:           @(#)jvglinkatt.tcl    /main/titanic/4
  2534.  
  2535.  
  2536. Class JVGLinkAttr : {JVGGenAssocAttr} {
  2537.     constructor
  2538.     method destructor
  2539.     method generate
  2540. }
  2541.  
  2542. constructor JVGLinkAttr {class this name} {
  2543.     set this [JVGGenAssocAttr::constructor $class $this $name]
  2544.     # Start constructor user section
  2545.     # End constructor user section
  2546.     return $this
  2547. }
  2548.  
  2549. method JVGLinkAttr::destructor {this} {
  2550.     # Start destructor user section
  2551.     # End destructor user section
  2552. }
  2553.  
  2554. method JVGLinkAttr::generate {this} {
  2555.     if [[$this ooplClass] isInterface] {
  2556.         return
  2557.     }
  2558.  
  2559.     $this generateImportStatements
  2560.     $this generateAssociationVariable
  2561.  
  2562.     if {[$this getMultiplicity] == "one"} {
  2563.         $this generateGetAccessor
  2564.     } else {
  2565.         $this generateGetManyAccessor
  2566.     }
  2567. }
  2568.  
  2569. # Do not delete this line -- regeneration end marker
  2570.  
  2571. if [isCommand CMLinkAttr] {
  2572.     Class  JVGLinkAttrD : {JVGLinkAttr CMLinkAttr} {
  2573.     }
  2574. } else {
  2575.     Class JVGLinkAttrD : {JVGLinkAttr OPLinkAttr} {    
  2576.     }
  2577. }
  2578.  
  2579. global mostDerivedOOPL ; set mostDerivedOOPL(OPLinkAttr) JVGLinkAttrD
  2580.  
  2581. selfPromoter OPLinkAttr {this} {
  2582.     JVGLinkAttrD promote $this
  2583. }
  2584.  
  2585.  
  2586. #---------------------------------------------------------------------------
  2587. #      File:           @(#)jvgqualatt.tcl    /main/titanic/11
  2588.  
  2589.  
  2590. Class JVGQualAttr : {JVGGenAssocAttr} {
  2591.     constructor
  2592.     method destructor
  2593.     method check
  2594.     method generate
  2595.     method generateGetQualifiedAccessor
  2596.     method generateImportStatements
  2597.     method generateRemoveQualifiedAccessor
  2598.     method generateSetQualifiedAccessor
  2599. }
  2600.  
  2601. constructor JVGQualAttr {class this name} {
  2602.     set this [JVGGenAssocAttr::constructor $class $this $name]
  2603.     # Start constructor user section
  2604.     # End constructor user section
  2605.     return $this
  2606. }
  2607.  
  2608. method JVGQualAttr::destructor {this} {
  2609.     # Start destructor user section
  2610.     # End destructor user section
  2611. }
  2612.  
  2613. method JVGQualAttr::check {this} {
  2614.     #
  2615.     #    Check if qualifier has one of the Java builtin types.
  2616.     #    The type of a qualifier must be derived from Object.
  2617.     #
  2618.  
  2619.     set wrongTypes "byte short int long char float double boolean"
  2620.  
  2621.     set qualifier [$this qualifier]
  2622.     set qualName [$qualifier getName]
  2623.     set qualType [$qualifier ooplType]
  2624.     set qualTypeName [$qualType getName]
  2625.  
  2626.     if {[lsearch $wrongTypes $qualTypeName] != -1} {
  2627.         set item [[$this smConnector] getItem]
  2628.  
  2629.         if [$item isNil] {
  2630.         set itemName ""
  2631.         } else {
  2632.         set itemName [$item name]
  2633.         }
  2634.  
  2635.         m4_warning $W_QUALWRONGTYPE $qualName $itemName [$this getName] $qualTypeName
  2636.     }
  2637.  
  2638.     return [$this JVGGenAssocAttr::check]
  2639. }
  2640.  
  2641. method JVGQualAttr::generate {this} {
  2642.     if [[$this ooplClass] isInterface] {
  2643.         return
  2644.     }
  2645.  
  2646.     $this generateImportStatements
  2647.     $this generateAssociationVariable
  2648.  
  2649.     if {[$this getAccessorAccess r] != "none"} {
  2650.         $this generateGetQualifiedAccessor
  2651.     }
  2652.  
  2653.     if {[$this getAccessorAccess w] != "none"} {
  2654.         if {[$this getMultiplicity] == "one"} {
  2655.         $this generateSetQualifiedAccessor
  2656.         } else {
  2657.         $this generateAddAccessor
  2658.         }
  2659.  
  2660.         $this generateRemoveQualifiedAccessor
  2661.     }
  2662. }
  2663.  
  2664. method JVGQualAttr::generateGetQualifiedAccessor {this} {
  2665.     set varName [$this getAssocVariable]
  2666.     set assocType [$this ooplType]
  2667.     set accessor [JavaAccMethod new "get[cap $varName]"]
  2668.  
  2669.     [[$this ooplClass] container] addAssociationAccessor $accessor
  2670.  
  2671.     if [$this isClassFeature] {
  2672.         $accessor addModifier [JavaModifier new "static"]
  2673.     }
  2674.  
  2675.     if {[$this getMultiplicity] == "many"} {
  2676.         [[$this ooplClass] container] needsVector 1
  2677.         set assocTypeName "Vector"
  2678.     } else {
  2679.         set assocTypeName [$assocType getName]
  2680.     }
  2681.  
  2682.     set access [$this getAccessorAccess r]
  2683.  
  2684.     if {$access != "none"} {
  2685.         $accessor access [JavaAccess new $access]
  2686.     }
  2687.  
  2688.     $accessor type [JavaType new $assocTypeName]
  2689.  
  2690.     set qualifier [$this qualifier]
  2691.     set qualName [$qualifier getName]
  2692.     set qualType [$qualifier ooplType]
  2693.     set qualTypeName [$qualType getName]
  2694.     set type [JavaType new $qualTypeName]
  2695.     set qualId "${qualName}_"
  2696.  
  2697.     $accessor addParameter [JavaParameter new $qualId $type]
  2698.  
  2699.     set body [TextSection new]
  2700.  
  2701.     $body append "Object object = $varName.get($qualId);\n"
  2702.     $body append "if (object != null)\n"
  2703.     $body append "    return (($assocTypeName) object);\n"
  2704.     $body append "return null;\n"
  2705.  
  2706.     $accessor generatorBody $body 
  2707. }
  2708.  
  2709. method JVGQualAttr::generateImportStatements {this} {
  2710.     $this JVGFeature::generateImportStatements
  2711.  
  2712.     set qualType [[$this qualifier] ooplType]
  2713.  
  2714.     JVGObject::generateImportStatement $qualType [[$this ooplClass] unit]
  2715. }
  2716.  
  2717. method JVGQualAttr::generateRemoveQualifiedAccessor {this} {
  2718.     set ident [$this getAssocIdentifier]
  2719.     set accessor [JavaAccMethod new "remove[cap $ident]"]
  2720.  
  2721.     [[$this ooplClass] container] addAssociationAccessor $accessor
  2722.  
  2723.     if [$this isClassFeature] {
  2724.         $accessor addModifier [JavaModifier new "static"]
  2725.     }
  2726.  
  2727.     $accessor type [JavaType new "void"]
  2728.  
  2729.     set access [$this getAccessorAccess w]
  2730.  
  2731.     if {$access != "none"} {
  2732.         $accessor access [JavaAccess new $access]
  2733.     }
  2734.  
  2735.     set qualType [JavaType new [[[$this qualifier] ooplType] getName]]
  2736.     set qualId "[[$this qualifier] getName]_"
  2737.  
  2738.     $accessor addParameter [JavaParameter new $qualId $qualType]
  2739.  
  2740.     set body [TextSection new]
  2741.  
  2742.     set paramId "${ident}_"
  2743.     set opposite [$this opposite]
  2744.     set varName [$this getAssocVariable]
  2745.  
  2746.     if {[$this getMultiplicity] == "one"} {
  2747.         $body append "Object object = $varName.get($qualId);\n"
  2748.         $body append "if (object == null)\n"
  2749.         $body append "    return;\n"
  2750.         $body append [$this reduceAssociation]
  2751.  
  2752.         if {$opposite != ""} {
  2753.         set typeName [[$this ooplType] getName]
  2754.         $body append "$typeName $paramId = ($typeName) object;\n"
  2755.         }
  2756.     } else {
  2757.         [[$this ooplClass] container] needsVector 1
  2758.         set type [JavaType new [[$this ooplType] getName]]
  2759.         $accessor addParameter [JavaParameter new $paramId $type]
  2760.  
  2761.         $body append "if ($paramId == null)\n"
  2762.         $body append "    return;\n"
  2763.         $body append "Vector vector = (Vector) $varName.get($qualId);\n";
  2764.         $body append "if (vector != null)\n";
  2765.         $body append "    vector.removeElement($paramId);\n"
  2766.     }
  2767.  
  2768.     if {$opposite != ""} {
  2769.         $body append [$opposite reduceAssociation $paramId]
  2770.     }
  2771.  
  2772.     $accessor generatorBody $body 
  2773. }
  2774.  
  2775. method JVGQualAttr::generateSetQualifiedAccessor {this} {
  2776.     set ident [$this getAssocIdentifier]
  2777.     set accessor [JavaAccMethod new "set[cap $ident]"]
  2778.     set qualifier [$this qualifier]
  2779.     set qualType [JavaType new [[$qualifier ooplType] getName]]
  2780.     set qualId "[$qualifier getName]_"
  2781.  
  2782.     [[$this ooplClass] container] addAssociationAccessor $accessor
  2783.  
  2784.     if [$this isClassFeature] {
  2785.         $accessor addModifier [JavaModifier new "static"]
  2786.     }
  2787.  
  2788.     $accessor addParameter [JavaParameter new $qualId $qualType]
  2789.     $accessor type [JavaType new "void"]
  2790.  
  2791.     set paramId "${ident}_"
  2792.     set type [JavaType new [[$this ooplType] getName]]
  2793.  
  2794.     $accessor addParameter [JavaParameter new $paramId $type]
  2795.  
  2796.     set access [$this getAccessorAccess w]
  2797.  
  2798.     if {$access != "none"} {
  2799.         $accessor access [JavaAccess new $access]
  2800.     }
  2801.  
  2802.     set body [TextSection new]
  2803.  
  2804.     $body append "remove[cap $ident]($qualId);\n"
  2805.     $body append "if ($paramId == null)\n"
  2806.     $body append "    return;\n"
  2807.     $body append "$ident.put($qualId, $paramId);\n"
  2808.  
  2809.     set opposite [$this opposite]
  2810.  
  2811.     if {$opposite != ""} {
  2812.         $body append [$opposite extendAssociation $paramId]
  2813.     }
  2814.  
  2815.     $accessor generatorBody $body 
  2816. }
  2817.  
  2818. # Do not delete this line -- regeneration end marker
  2819.  
  2820. if [isCommand CMQualAttr] {
  2821.     Class  JVGQualAttrD : {JVGQualAttr CMQualAttr} {
  2822.     }
  2823. } else {
  2824.     Class JVGQualAttrD : {JVGQualAttr OPQualAttr} {    
  2825.     }
  2826. }
  2827.  
  2828. global mostDerivedOOPL ; set mostDerivedOOPL(OPQualAttr) JVGQualAttrD
  2829.  
  2830. selfPromoter OPQualAttr {this} {
  2831.     JVGQualAttrD promote $this
  2832. }
  2833.  
  2834.  
  2835. #---------------------------------------------------------------------------
  2836. #      File:           @(#)jvgreverse.tcl    /main/titanic/4
  2837.  
  2838.  
  2839. Class JVGReverseLinkAttr : {JVGGenAssocAttr} {
  2840.     constructor
  2841.     method destructor
  2842.     method generate
  2843. }
  2844.  
  2845. constructor JVGReverseLinkAttr {class this name} {
  2846.     set this [JVGGenAssocAttr::constructor $class $this $name]
  2847.     # Start constructor user section
  2848.     # End constructor user section
  2849.     return $this
  2850. }
  2851.  
  2852. method JVGReverseLinkAttr::destructor {this} {
  2853.     # Start destructor user section
  2854.     # End destructor user section
  2855. }
  2856.  
  2857. method JVGReverseLinkAttr::generate {this} {
  2858.     if [[$this ooplClass] isInterface] {
  2859.         return
  2860.     }
  2861.  
  2862.     $this generateImportStatements
  2863.     $this generateAssociationVariable
  2864.  
  2865.     if {[$this getMultiplicity] == "one"} {
  2866.         $this generateGetAccessor
  2867.     } else {
  2868.         $this generateGetManyAccessor
  2869.     }
  2870. }
  2871.  
  2872. # Do not delete this line -- regeneration end marker
  2873.  
  2874. if [isCommand CMReverseLinkAttr] {
  2875.     Class  JVGReverseLinkAttrD : {JVGReverseLinkAttr CMReverseLinkAttr} {
  2876.     }
  2877. } else {
  2878.     Class JVGReverseLinkAttrD : {JVGReverseLinkAttr OPReverseLinkAttr} {    
  2879.     }
  2880. }
  2881.  
  2882. global mostDerivedOOPL ; set mostDerivedOOPL(OPReverseLinkAttr) JVGReverseLinkAttrD
  2883.  
  2884. selfPromoter OPReverseLinkAttr {this} {
  2885.     JVGReverseLinkAttrD promote $this
  2886. }
  2887.  
  2888.  
  2889. #---------------------------------------------------------------------------
  2890. #      File:           @(#)jvgqualass.tcl    /main/titanic/3
  2891.  
  2892.  
  2893. Class JVGQualAssocAttr : {JVGQualAttr} {
  2894.     constructor
  2895.     method destructor
  2896.     method generate
  2897. }
  2898.  
  2899. constructor JVGQualAssocAttr {class this name} {
  2900.     set this [JVGQualAttr::constructor $class $this $name]
  2901.     # Start constructor user section
  2902.     # End constructor user section
  2903.     return $this
  2904. }
  2905.  
  2906. method JVGQualAssocAttr::destructor {this} {
  2907.     # Start destructor user section
  2908.     # End destructor user section
  2909. }
  2910.  
  2911. method JVGQualAssocAttr::generate {this} {
  2912.     $this JVGQualAttr::generate
  2913. }
  2914.  
  2915. # Do not delete this line -- regeneration end marker
  2916.  
  2917. if [isCommand CMQualAssocAttr] {
  2918.     Class  JVGQualAssocAttrD : {JVGQualAssocAttr CMQualAssocAttr} {
  2919.     }
  2920. } else {
  2921.     Class JVGQualAssocAttrD : {JVGQualAssocAttr OPQualAssocAttr} {    
  2922.     }
  2923. }
  2924.  
  2925. global mostDerivedOOPL ; set mostDerivedOOPL(OPQualAssocAttr) JVGQualAssocAttrD
  2926.  
  2927. selfPromoter OPQualAssocAttr {this} {
  2928.     JVGQualAssocAttrD promote $this
  2929. }
  2930.  
  2931.  
  2932. #---------------------------------------------------------------------------
  2933. #      File:           @(#)jvgquallin.tcl    /main/titanic/3
  2934.  
  2935.  
  2936. Class JVGQualLinkAttr : {JVGQualAttr} {
  2937.     constructor
  2938.     method destructor
  2939.     method generate
  2940. }
  2941.  
  2942. constructor JVGQualLinkAttr {class this name} {
  2943.     set this [JVGQualAttr::constructor $class $this $name]
  2944.     # Start constructor user section
  2945.     # End constructor user section
  2946.     return $this
  2947. }
  2948.  
  2949. method JVGQualLinkAttr::destructor {this} {
  2950.     # Start destructor user section
  2951.     # End destructor user section
  2952. }
  2953.  
  2954. method JVGQualLinkAttr::generate {this} {
  2955.     $this JVGQualAttr::generate
  2956. }
  2957.  
  2958. # Do not delete this line -- regeneration end marker
  2959.  
  2960. if [isCommand CMQualLinkAttr] {
  2961.     Class  JVGQualLinkAttrD : {JVGQualLinkAttr CMQualLinkAttr} {
  2962.     }
  2963. } else {
  2964.     Class JVGQualLinkAttrD : {JVGQualLinkAttr OPQualLinkAttr} {    
  2965.     }
  2966. }
  2967.  
  2968. global mostDerivedOOPL ; set mostDerivedOOPL(OPQualLinkAttr) JVGQualLinkAttrD
  2969.  
  2970. selfPromoter OPQualLinkAttr {this} {
  2971.     JVGQualLinkAttrD promote $this
  2972. }
  2973.