home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / drssmmodel.tcl < prev    next >
Text File  |  1997-05-23  |  7KB  |  229 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)drssmmodel.tcl    /main/hindenburg/13
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)drssmmodel.tcl    /main/hindenburg/13   23 May 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14.  
  15. #Class DrsSMModelObject : {GCObject} {
  16. #    method destructor
  17. #    constructor
  18. #    method initializeSM
  19. #    method getItemDefs
  20. #    method getSMObjects
  21. #    method getChildObjects
  22. #    method localDefined
  23. #    method installRefs
  24. #    method showClassFeatures
  25. #    method showSMObjects
  26. #    attribute childObjects
  27. #    attribute smObjects
  28. #    attribute itemDefs
  29. #    attribute initializedSM
  30. #    attribute smModel
  31. #}
  32.  
  33. method DrsSMModelObject::destructor {this} {
  34.     # Start destructor user section
  35.         if {[$this initializedSM]  && [llength [$this smModel]]} {
  36.             [$this smModel] delete
  37.         }
  38.     # End destructor user section
  39. }
  40.  
  41. constructor DrsSMModelObject {class this levelVersions} {
  42.     set this [GCObject::constructor $class $this]
  43.     # Start constructor user section
  44.     OtkRegister::semanticModel
  45.         $this levelVersions $levelVersions
  46.         $this initializedSM 0
  47.     # End constructor user section
  48.     return $this
  49. }
  50.  
  51. method DrsSMModelObject::getSMModel {this} {
  52.     set smModel [$this smModel]
  53.     if [llength $smModel] {
  54.         return $smModel
  55.     }
  56.     set level [$this level]
  57.         set configV [$this getConfigVersion]
  58.         set levelV [$level selectedVersion $configV]
  59.         set smModel [SM[$level ORB_class]Model new $configV $levelV]
  60.     $this smModel $smModel
  61.     return $smModel
  62. }
  63.  
  64. method DrsSMModelObject::initializeSM {this} {
  65.      [.main messageArea] message "Loading Semantic Model ..."
  66.     set level [$this level]
  67.         set childObjects ""
  68.         set itemDefs ""
  69.         set smObjects ""
  70.  
  71.         set configV [$this getConfigVersion]
  72.         set levelV [$level selectedVersion $configV]
  73.         set levelVersions [$this levelVersions]
  74.         if {[$configV isNil] || [$levelV isNil]} {
  75.             $this initializedSM 1
  76.             return $this
  77.         }
  78.         if {[[$this getPhase] name] == "Implementation"} {
  79.             $this initializedSM 1
  80.             return $this
  81.         }
  82.  
  83.         GCControl collect
  84.         set smModel [$this getSMModel]
  85.         $this smModel $smModel
  86.     set smTypeNames [m4_var get M4_doors_semantic_types]
  87.     if ![llength $smTypeNames] {
  88.         set smTypeNames {Class "UCD UseCase"}
  89.         m4_var set M4_doors_semantic_types $smTypeNames
  90.     }
  91.         foreach smRealTypeName $smTypeNames {
  92.         set smType [SMTypeDB::find $smRealTypeName]
  93.         if [$smType isNil] {
  94.         continue
  95.         }
  96.             set smTypeName [getSMTypeName $smType]
  97.             foreach smNode [$smModel getSMObjects $smType] {
  98.                 set workItem [$smNode getWorkItem]
  99.                 if [$workItem isNil] {
  100.                     continue
  101.                 }
  102.                 set systemV [$workItem owner]
  103.                 set system [$systemV system]
  104.                 if [$this localDefined $workItem] {
  105.                     lappend childObjects [$smNode getWorkItem].$smTypeName
  106.                     lappend itemDefs [$smNode getWorkItem].$smTypeName
  107.                     lappend smObjects $smNode
  108.                 } 
  109.             }
  110.         }
  111.         $this childObjects $childObjects
  112.         $this itemDefs $itemDefs
  113.         $this smObjects $smObjects
  114.         $this initializedSM 1
  115. }
  116.  
  117. method DrsSMModelObject::getItemDefs {this} {
  118.     if ![$this initializedSM] {
  119.             $this initializeSM
  120.         }
  121.         return [$this itemDefs]
  122. }
  123.  
  124. method DrsSMModelObject::getSMObjects {this} {
  125.     if ![$this initializedSM] {
  126.             $this initializeSM
  127.         }
  128.         return [$this smObjects]
  129. }
  130.  
  131. method DrsSMModelObject::getChildObjects {this} {
  132.     if ![$this initializedSM] {
  133.             $this initializeSM
  134.         }
  135.         return [$this childObjects]
  136. }
  137.  
  138. method DrsSMModelObject::localDefined {this workItem} {
  139.     set localSysV [[ClientContext::global] currentSystem]
  140.     if [$localSysV isNil]  {
  141.         return 1
  142.     }
  143.     set owner [$workItem owner]
  144.     if [$owner isA Graph] {
  145.         return 1
  146.     }
  147.     return [$owner isSame $localSysV] 
  148. }
  149.  
  150. method DrsSMModelObject::installRefs {this} {
  151.     set dxlCommand ""
  152.     set parentLevelId [$this parentLevelId]
  153.     foreach smObject  [$this getSMObjects] {
  154.         set workItem [$smObject getWorkItem]
  155.         set systemV [$workItem owner]
  156.         if [$systemV isA Graph] {
  157.         # scope is diagram
  158.         set graph $systemV
  159.         set system [$graph system]
  160.         set systemV [$system selectedVersion [$this getConfigVersion]]
  161.         } else {
  162.         set system [$systemV system]
  163.         }
  164.         set drsItem [DrsSMItemObject new $smObject $system [getVersion $systemV]]
  165.         $drsItem dxlCommand $dxlCommand
  166.         set dxlResult [$drsItem install]
  167.         if ![llength $dxlResult] {
  168.         return
  169.         }
  170.     }
  171.     return "1"
  172. }
  173.  
  174. method DrsSMModelObject::showClassFeatures {this majorOper minorOper} {
  175.     set confV [$this getConfigVersion]
  176.         set dxlCommand [$this dxlCommand]
  177.         foreach smObject [$this getSMObjects] {
  178.                 set workItem [$smObject getWorkItem]
  179.         set item [$smObject getItem]
  180.                 set systemV [$workItem owner]
  181.         if ![$systemV isA SystemVersion] {
  182.             # non class items
  183.             continue
  184.         }
  185.         set matrix [$systemV findFileVersion -byItemAndType $item cdm]
  186.         if [$matrix isNil] {
  187.             continue
  188.         }
  189.         $matrix loadRowData "name_type" rows
  190.         set file [$matrix file]
  191.         foreach rowData $rows {
  192.             foreach item [lindex $rowData 1] {
  193.             set workItem [$systemV findDefinition $item $confV]
  194.             set itemType [$item type]
  195.             if {$itemType == "de" || $itemType == "pe"} {
  196.                 set drsQItem [DrsQItemObject new $workItem \
  197.                         $file [getVersion $matrix]]
  198.                 $drsQItem qualifier [$item qualifier]
  199.                 $drsQItem dxlCommand $dxlCommand
  200.                 $drsQItem filter $majorOper $minorOper 
  201.             }
  202.             }
  203.         }
  204.     }
  205. }
  206.  
  207. method DrsSMModelObject::showSMObjects {this majorOper minorOper} {
  208.         set dxlCommand [$this dxlCommand]
  209.         foreach smObject [$this getSMObjects] {
  210.                 set workItem [$smObject getWorkItem]
  211.                 set systemV [$workItem owner]
  212.         if [$systemV isA Graph] {
  213.             # scope is diagram
  214.             set graph $systemV
  215.             set system [$graph system]
  216.             set systemV [$system selectedVersion [$this getConfigVersion]]
  217.         } else {
  218.             set system [$systemV system]
  219.         }
  220.                 set drsItem [DrsSMItemObject new $smObject $system [getVersion $systemV]]
  221.                 $drsItem dxlCommand $dxlCommand
  222.                 $drsItem filter $majorOper $minorOper
  223.         }
  224.  
  225. }
  226.  
  227. # Do not delete this line -- regeneration end marker
  228.  
  229.