home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / msumlassoc.tcl < prev    next >
Text File  |  1997-06-03  |  4KB  |  143 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)msumlassoc.tcl    /main/hindenburg/11
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)msumlassoc.tcl    /main/hindenburg/11   3 Jun 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 MSUMLAssociation : {MSUMLElement} {
  17.     constructor
  18.     method destructor
  19.     method ot2ms
  20.     method ms2ot
  21.     method promoter
  22.     method roleSet
  23.     method addRole
  24.     method removeRole
  25.     attribute smAssociation
  26.     attribute _roleSet
  27. }
  28.  
  29. constructor MSUMLAssociation {class this typeName smAssociation} {
  30.     set this [MSUMLElement::constructor $class $this $typeName]
  31.     $this smAssociation $smAssociation
  32.     $this _roleSet [List new]
  33.     # Start constructor user section
  34.     # End constructor user section
  35.     return $this
  36. }
  37.  
  38. method MSUMLAssociation::destructor {this} {
  39.     foreach ref [[$this _roleSet] contents] {
  40.         $ref _association ""
  41.     }
  42.     # Start destructor user section
  43.     [$this roleSet]  foreach role {
  44.         $role delete
  45.     }
  46.     # End destructor user section
  47.     $this MSUMLElement::destructor
  48. }
  49.  
  50. method MSUMLAssociation::ot2ms {this package} {
  51.     set smConnector [$this smAssociation]
  52.     set item [$smConnector getItem] 
  53.     set name ""
  54.     if ![$item isNil] {
  55.         set name [$item name]
  56.     } else {
  57.         set name noName
  58.     }
  59.     global trans
  60.     $trans begin
  61.     puts "\tAssociation '$name'"
  62.         set umlAssoc  [$package createAssociation $name]
  63.     set workItem [$smConnector getWorkItem]
  64.     if ![$workItem isNil] {
  65.         $this saveFreeTextProp $umlAssoc [$workItem properties]
  66.     }
  67.     $this msUmlObject $umlAssoc
  68.     $trans commit
  69.     return $umlAssoc
  70.  
  71. }
  72.  
  73. method MSUMLAssociation::ms2ot {this diag} {
  74.     set roleSet [$this roleSet]
  75.     set assocName [$this name]
  76.     puts "\tAssociation '$assocName'"
  77.     set noOfClasses [$roleSet length]
  78.     if {$noOfClasses < 2} {
  79.         puts "association $assocName with less than 2 classes"
  80.         exit
  81.     }
  82.     set role1 [$roleSet index 0]
  83.     set class1 [$role1 getTypeAsUML] 
  84.     MSUMLClass promote $class1
  85.     set cl1Name [[$class1 property msObject] property  name]
  86.  
  87.     set role2 [$roleSet index 1]
  88.     set class2 [$role2 getTypeAsUML] 
  89.     MSUMLClass promote $class2
  90.     set cl2Name [[$class2 property msObject ] property name]
  91.  
  92.     set c1 [$class1 ms2ot $diag "find"]
  93.     set c2 [$class2 ms2ot $diag "find"]
  94.     set iRole1 [$role1 getInterface IUmlAssociationRole] 
  95.     set iRole2 [$role2 getInterface IUmlAssociationRole] 
  96.     set isAggr1 [$iRole1 property IsAggregate]
  97.     set isAggr2 [$iRole2 property IsAggregate]
  98.     if {[llength $isAggr1] && $isAggr1 == "1"} {
  99.         set assoc [$diag addConn "aggregation" $c1 $c2]
  100.     }  elseif {[llength $isAggr2] && $isAggr2 == "1"} {
  101.         set assoc [$diag addConn "aggregation" $c2 $c1]
  102.     } else {
  103.         set assoc [$diag addConn "association" $c1 $c2]
  104.     }
  105.     $this loadFreeTextProp $assoc
  106.     $this loadFreeTextProp $assoc role_start
  107.     $this loadFreeTextProp $assoc role_end
  108.     $role1 ms2ot $assoc "start"
  109.     $role2 ms2ot $assoc "end"
  110.     $iRole1 delete
  111.     $iRole2 delete
  112.     return $assoc
  113. }
  114.  
  115. method MSUMLAssociation::promoter {this} {
  116.     $this MSUMLElement::promoter
  117.     #classes 
  118.     $this _roleSet [List new]
  119.     # Roles
  120.         set noOfRoles [$this getNoOfRoles]
  121.         for {set i 1} {$i <= $noOfRoles} {incr i} {
  122.             set umlRole [$this getRoleAsUML $i]
  123.             MSUMLAssRole promote $umlRole $this
  124.         }
  125. }
  126.  
  127. # Do not delete this line -- regeneration end marker
  128.  
  129. method MSUMLAssociation::roleSet {this} {
  130.     return [$this _roleSet]
  131. }
  132.  
  133. method MSUMLAssociation::addRole {this newRole} {
  134.     [$this _roleSet] append $newRole
  135.     $newRole _association $this
  136. }
  137.  
  138. method MSUMLAssociation::removeRole {this oldRole} {
  139.     $oldRole _association ""
  140.     [$this _roleSet] removeValue $oldRole
  141. }
  142.  
  143.