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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)msumlpacka.tcl    /main/titanic/2
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)msumlpacka.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 MSUMLPackage : {MSUMLElement} {
  17.     constructor
  18.     method destructor
  19.     method ms2ot
  20.     method promoter
  21.     method model
  22.     method elementSet
  23.     method addElement
  24.     method removeElement
  25.     attribute _model
  26.     attribute smModel
  27.     attribute _elementSet
  28. }
  29.  
  30. constructor MSUMLPackage {class this typeName smModel} {
  31.     set this [MSUMLElement::constructor $class $this $typeName]
  32.     $this smModel $smModel
  33.     $this _elementSet [List new]
  34.     # Start constructor user section
  35.     [$this elementSet] foreach element {
  36.         $element delete
  37.     }
  38.     # End constructor user section
  39.     return $this
  40. }
  41.  
  42. method MSUMLPackage::destructor {this} {
  43.     set ref [$this _model]
  44.     if {$ref != ""} {
  45.         [$ref _packageSet] removeValue $this
  46.     }
  47.     foreach ref [[$this _elementSet] contents] {
  48.         $ref _package ""
  49.     }
  50.     # Start destructor user section
  51.     # End destructor user section
  52.     $this MSUMLElement::destructor
  53. }
  54.  
  55. method MSUMLPackage::ms2ot {this {rtDiag ""} {phaseName ""} {confName ""} {confV ""}} {
  56.     set cc [ClientContext::global]
  57.     set proj [$cc currentProject]
  58.     set cv [$cc currentConfig]
  59.     set pv [$cc currentPhase]
  60.     set sv [$cc currentSystem]
  61.     if ![$sv isNil] {    
  62.         $cc upLevel
  63.     }
  64.     set con [$cv config]
  65.     set myName [$this name]
  66.     puts "Package '$myName'"
  67.     set sv [$pv findSystemVersion $myName system]
  68.     if [$sv isNil] {
  69.         if [isCommand OTShRegister::repository] {
  70.         puts "Error: system '$myName' not available for merging"
  71.         return
  72.         }
  73.         $pv createSystemVersion $myName cl system $cv
  74.     }
  75.     $cc downLevel $myName.system
  76.     if [isCommand OTShRegister::repository] {
  77.         require roundtrip.tcl
  78.         #set $myName [RTDiagram new $myName $myName $phaseName $phaseName  [$con name] [$cv versionNumber] [$proj name]]
  79.         set $myName [RTDiagram new $myName $myName $phaseName $phaseName ] 
  80.     } else {
  81.         set $myName [REDiagram new $myName $myName $phaseName $phaseName ] 
  82.     }
  83.     global diag
  84.     set rtDiag [set $myName]
  85.     set diag $rtDiag
  86.     [$this elementSet] foreach uElement {
  87.         set uType [$uElement objectType]
  88.         if {$uType == "UMLPackage"} {
  89.         $uElement ms2ot $rtDiag $phaseName 
  90.         } else {
  91.         $uElement ms2ot $rtDiag
  92.         }
  93.     }
  94.     
  95.     set tmpSaveFileName [args_file {}]
  96.     $rtDiag save $tmpSaveFileName
  97.     set resultFileName [lindex $argv 0]
  98.     if [file exists $resultFileName] {
  99.         set resultFile [open $resultFileName a]
  100.     } else {
  101.         set resultFile [open $resultFileName w]
  102.     }
  103.     set tmpFile [open $tmpSaveFileName r]
  104.     set tmpFileResult [read $tmpFile]
  105.     puts $resultFile $tmpFileResult
  106.     close $tmpFile
  107.     close $resultFile
  108.     unlink $tmpSaveFileName
  109. }
  110.  
  111. method MSUMLPackage::promoter {this} {
  112.     $this MSUMLElement::promoter
  113.     $this _elementSet [List new]
  114.     set noOfElements [$this getNoOfElements]
  115.     for {set i 1} {$i <= $noOfElements} {incr i} {
  116.         set umlElement [$this getElementAsUML $i]
  117.         MS[$umlElement property objectType] promote $umlElement
  118.         $this addElement $umlElement
  119.     }
  120. }
  121.  
  122. # Do not delete this line -- regeneration end marker
  123.  
  124. method MSUMLPackage::model {this args} {
  125.     if {$args == ""} {
  126.         return [$this _model]
  127.     }
  128.     set ref [$this _model]
  129.     if {$ref != ""} {
  130.         [$ref _packageSet] removeValue $this
  131.     }
  132.     set obj [lindex $args 0]
  133.     if {$obj != ""} {
  134.         [$obj _packageSet] append $this
  135.     }
  136.     $this _model $obj
  137. }
  138.  
  139. method MSUMLPackage::elementSet {this} {
  140.     return [$this _elementSet]
  141. }
  142.  
  143. method MSUMLPackage::addElement {this newElement} {
  144.     [$this _elementSet] append $newElement
  145.     $newElement _package $this
  146. }
  147.  
  148. method MSUMLPackage::removeElement {this oldElement} {
  149.     $oldElement _package ""
  150.     [$this _elementSet] removeValue $oldElement
  151. }
  152.  
  153.