home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / msumlmodel.tcl < prev    next >
Text File  |  1997-08-29  |  6KB  |  200 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)msumlmodel.tcl    /main/titanic/2
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)msumlmodel.tcl    /main/titanic/2   29 Aug 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. #require "msumleleme.tcl"
  15.  
  16. Class MSUMLModel : {MSUMLElement} {
  17.     constructor
  18.     method destructor
  19.     method ot2ms
  20.     method otFeat2Ms
  21.     method otclass2ms
  22.     method otass2ms
  23.     method otgen2ms
  24.     method ms2ot
  25.     method promoter
  26.     method packageSet
  27.     method addPackage
  28.     method removePackage
  29.     attribute dictOfClasses
  30.     attribute dictOfSMModels
  31.     attribute packageForExternals
  32.     attribute transactionManager
  33.     attribute _packageSet
  34. }
  35.  
  36. global MSUMLModel::confs
  37. set MSUMLModel::confs ""
  38.  
  39.  
  40. constructor MSUMLModel {class this typeName i_transactionManager} {
  41.     set this [MSUMLElement::constructor $class $this $typeName]
  42.     $this transactionManager $i_transactionManager
  43.     $this _packageSet [List new]
  44.     # Start constructor user section
  45.     $this dictOfClasses [Dictionary new]
  46.     if ![llength ${MSUMLModel::confs}] {
  47.         set MSUMLModel::confs [Dictionary new]
  48.     }
  49.     # End constructor user section
  50.     return $this
  51. }
  52.  
  53. method MSUMLModel::destructor {this} {
  54.     foreach ref [[$this _packageSet] contents] {
  55.         $ref _model ""
  56.     }
  57.     # Start destructor user section
  58.     [$this packageSet] foreach package {
  59.         $package delete
  60.     }
  61.     # End destructor user section
  62.     $this MSUMLElement::destructor
  63. }
  64.  
  65. method MSUMLModel::ot2ms {this package modelName} {
  66.     [$this transactionManager] begin
  67.     set createdPackage [$package createModel $modelName]
  68.     [$this transactionManager] commit
  69.     return $createdPackage
  70. }
  71.  
  72. method MSUMLModel::otFeat2Ms {this classes} {
  73.     foreach msUmlClass $classes {
  74.         $msUmlClass otFeat2Ms
  75.     }
  76. }
  77.  
  78. method MSUMLModel::otclass2ms {this smClasses smModel package sysV} {
  79.     set externals ""
  80.     set dictOfSMModels [$this dictOfSMModels]
  81.     set dictOfClasses [$this dictOfClasses]
  82.     set doneClasses ""
  83.     
  84.     set msUmlPackage [MSUMLPackage new UMLPackage $smModel]
  85.     $this addPackage $msUmlPackage
  86.     foreach smClass $smClasses {
  87.         set definingSysV [$smClass getDefiningSystemVersion]
  88.         if { [$definingSysV isNil] || $definingSysV != $sysV} {
  89.         lappend externals $smClass
  90.         continue
  91.         } 
  92.         set msumlClass [MSUMLClass new UMLClass $smClass ] 
  93.         $msUmlPackage addElement $msumlClass
  94.         #puts "set dictOf Cla  $smClass class name: [[$smClass getItem] name]"
  95.         $dictOfClasses set $smClass  $msumlClass
  96.         lappend doneClasses $msumlClass
  97.         set umlClass [$msumlClass ot2ms $package]
  98.     }
  99.     $this otFeat2Ms $doneClasses
  100.     return [list $doneClasses $externals]
  101. }
  102.  
  103. method MSUMLModel::otass2ms {this smAssocs package} {
  104.     foreach smAssoc $smAssocs {
  105.         set smClassType [SMTypeDB::find "Class"]
  106.         set smStartClass [$smAssoc getFrom $smClassType] 
  107.         set smEndClass [$smAssoc getTo $smClassType] 
  108.         set msAss [MSUMLAssociation new UMLAssociation $smAssoc]
  109.  
  110.         set startRoleItem [$smAssoc getItem 0 role_start de]
  111.         set endRoleItem [$smAssoc getItem 0 role_end de]
  112.         
  113.         set startWorkItem [$smAssoc getWorkItem 0 role_start de]
  114.         set endWorkItem [$smAssoc getWorkItem 0 role_end de]
  115.         set msStartRole [MSUMLAssRole new UMLAssociationRole $startWorkItem start $msAss $startRoleItem ]
  116.         set msEndRole [MSUMLAssRole new UMLAssociationRole $endWorkItem end $msAss $endRoleItem ]
  117.         $msStartRole type [[$this dictOfClasses] set $smStartClass]
  118.         $msEndRole type [[$this dictOfClasses] set $smEndClass]
  119.  
  120.         $msAss ot2ms $package
  121.         $msStartRole ot2ms $package
  122.         $msEndRole ot2ms $package
  123.     }
  124. }
  125.  
  126. method MSUMLModel::otgen2ms {this smGens package} {
  127.     set smGenConnType [SMTypeDB::find "CAD CB GenConn"]
  128.     set smClassType [SMTypeDB::find "Class"]
  129.     foreach smGenNode $smGens {
  130.         set smGenClass [$smGenNode getOppositeObjectsIn $smGenConnType $smClassType]
  131.         set msGenClass [[$this dictOfClasses] set $smGenClass]
  132.         foreach smSpecNode [$smGenNode getOppositeObjectsOut $smGenConnType $smClassType] {
  133.         set msGen [MSUMLGeneralization new UMLGeneralization $smGenNode]
  134.         $msGen superType $msGenClass
  135.         set msSubClass [[$this dictOfClasses] set $smSpecNode]
  136.         $msGen subType $msSubClass
  137.             $msGen ot2ms $package
  138.         }
  139.     }
  140. }
  141.  
  142. method MSUMLModel::ms2ot {this packNo} {
  143.     set cc [ClientContext::global]
  144.         set pv [$cc currentPhase]
  145.         set phaseName [[$pv phase] name]
  146.     set modelName [$this name]
  147.     global MSUMLModel::confs
  148.     set confDict ${MSUMLModel::confs}
  149.     set noOfConfsForMe [$confDict set $modelName]
  150.     if ![llength $noOfConfsForMe] {
  151.         set noOfConfsForMe 0
  152.     }
  153.     incr noOfConfsForMe
  154.     $confDict set $modelName $noOfConfsForMe
  155.     if [llength $packNo] {
  156.         set package [[$this packageSet] index [expr $packNo - 1]]
  157.         $package ms2ot "" $phaseName $modelName $noOfConfsForMe
  158.         return
  159.     } 
  160.         
  161.         [$this packageSet] foreach package {
  162.         if {[[$package property msObject] property name] != "Stubs"} {
  163.         $package ms2ot "" $phaseName $modelName $noOfConfsForMe
  164.         }
  165.         }
  166. }
  167.  
  168. method MSUMLModel::promoter {this} {
  169.     $this MSUMLElement::promoter
  170.     $this _packageSet [List new]
  171.     global MSUMLModel::confs
  172.     if ![llength ${MSUMLModel::confs}] {
  173.         set MSUMLModel::confs [Dictionary new]
  174.     }
  175.         set noOfPackages [$this getNoOfPackages]
  176.         for {set i 1} {$i <= $noOfPackages} {incr i} {
  177.             set umlPackage [$this getPackageAsUML $i]
  178.             MS[$umlPackage property objectType] promote $umlPackage
  179.             $this addPackage $umlPackage
  180.         }
  181.  
  182. }
  183.  
  184. # Do not delete this line -- regeneration end marker
  185.  
  186. method MSUMLModel::packageSet {this} {
  187.     return [$this _packageSet]
  188. }
  189.  
  190. method MSUMLModel::addPackage {this newPackage} {
  191.     [$this _packageSet] append $newPackage
  192.     $newPackage _model $this
  193. }
  194.  
  195. method MSUMLModel::removePackage {this oldPackage} {
  196.     $oldPackage _model ""
  197.     [$this _packageSet] removeValue $oldPackage
  198. }
  199.  
  200.