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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)msumlopera.tcl    /main/titanic/2
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)msumlopera.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 "msumlmembe.tcl"
  15.  
  16. Class MSUMLOperation : {MSUMLMember} {
  17.     constructor
  18.     method destructor
  19.     method ot2ms
  20.     method ms2ot
  21.     method promoter
  22.     method parameterSet
  23.     method addParameter
  24.     method removeParameter
  25.     attribute _parameterSet
  26. }
  27.  
  28. constructor MSUMLOperation {class this typeName workItem {typeItem ""}} {
  29.     set this [MSUMLMember::constructor $class $this $typeName $workItem $typeItem]
  30.     $this _parameterSet [List new]
  31.     # Start constructor user section
  32.     # End constructor user section
  33.     return $this
  34. }
  35.  
  36. method MSUMLOperation::destructor {this} {
  37.     foreach ref [[$this _parameterSet] contents] {
  38.         $ref _owner ""
  39.     }
  40.     # Start destructor user section
  41.     [$this parameterSet] foreach parameter {
  42.         $parameter delete
  43.     }
  44.     # End destructor user section
  45.     $this MSUMLMember::destructor
  46. }
  47.  
  48. method MSUMLOperation::ot2ms {this msClass cells} {
  49.     set workItem [$this workItem]
  50.     set name [$workItem name]
  51.     puts "\t\tOperation '$name'"
  52.     set ip [$workItem properties]
  53.     global trans
  54.     $trans begin
  55.     set msOperation  [$msClass createOperation $name]
  56.     set iOper [$msOperation getInterface IUmlOperation]
  57.     $this saveFreeTextProp $msOperation $ip
  58.     #properties 
  59.     if { [$ip getPropertyValue is_abstract] == "1"} {
  60.         $iOper property IsAbstract 1
  61.     } else {
  62.         $iOper property IsAbstract 0
  63.     }
  64.     set isConst [$ip getPropertyValue is_const_func]
  65.     if [llength $isConst] {
  66.         # only for C++ target
  67.         if $isConst {
  68.         $iOper property IsQuery 0
  69.         } else {
  70.         $iOper property IsQuery 1
  71.         }
  72.     }
  73.     $iOper property Concurrency "Sequential"
  74.  
  75.     $trans commit
  76.     foreach cell $cells {
  77.         set nameItem ""
  78.         set typeItem ""
  79.         foreach item [lindex $cell 1] {
  80.         if {[$item type]  == "de"} {
  81.             set nameItem $item
  82.             } else {
  83.             set typeItem $item
  84.         }
  85.         }
  86.         if ![llength $nameItem] {
  87.         continue
  88.         }
  89.         set p [MSUMLParameter new UMLParameter [lindex $cell 0] $nameItem $this $typeItem]
  90.         $p ot2ms $msOperation 
  91.     }
  92.     return $msOperation
  93. }
  94.  
  95. method MSUMLOperation::ms2ot {this myClass} {
  96.         set operName [$this name]
  97.     set typeName ""
  98.     set msParameter ""
  99.     set returnValueParameter ""
  100.     [$this parameterSet] foreach msParameter {
  101.         set iParam [$msParameter getInterface IUmlParameter]
  102.         if {[$iParam property Kind] == "return"} {
  103.         set returnValueParameter $msParameter
  104.         set typeName [$iParam property TypeExpression]
  105.         }
  106.     }
  107.     set operName "${operName}()"
  108.     if [llength $typeName] {
  109.         set operName "${operName}:$typeName"
  110.     }
  111.     set iOper [$this getInterface IUmlOperation]
  112.     set isTypeScope [$iOper property IsTypeScope]
  113.         if {[llength $isTypeScope] && $isTypeScope == "1"} {
  114.             set operName "\$$operName"
  115.         }
  116.     set isAbstract [$iOper property IsAbstract]
  117.     if {[llength $isAbstract] && $isAbstract == "1"} {
  118.         set operName  "$operName\{abstract\}"
  119.     }
  120.         set myOper [$myClass addMethod $operName]
  121.     [$this parameterSet] foreach msParameter {
  122.         if {$msParameter != $returnValueParameter} {
  123.         $msParameter ms2ot $myOper
  124.         }
  125.     }
  126.     return $myOper
  127. }
  128.  
  129. method MSUMLOperation::promoter {this} {
  130.     $this MSUMLMember::promoter
  131.     $this _parameterSet [List new]
  132.         set noOfParams [$this getNoOfParameters]
  133.         for {set i 1} {$i <= $noOfParams} {incr i} {
  134.             set umlParam [$this getParameterAsUML $i]
  135.             MS[$umlParam property objectType] promote $umlParam
  136.             $this addParameter $umlParam
  137.         }
  138.  
  139. }
  140.  
  141. # Do not delete this line -- regeneration end marker
  142.  
  143. method MSUMLOperation::parameterSet {this} {
  144.     return [$this _parameterSet]
  145. }
  146.  
  147. method MSUMLOperation::addParameter {this newParameter} {
  148.     [$this _parameterSet] append $newParameter
  149.     $newParameter _owner $this
  150. }
  151.  
  152. method MSUMLOperation::removeParameter {this oldParameter} {
  153.     $oldParameter _owner ""
  154.     [$this _parameterSet] removeValue $oldParameter
  155. }
  156.  
  157.