home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / cadclass.tcl < prev    next >
Text File  |  1996-06-11  |  7KB  |  265 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cadre Technologies Inc.    1996
  4. #
  5. #      File:           @(#)cadclass.tcl    /main/2
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)cadclass.tcl    /main/2   11 Jun 1996 Copyright 1996 Cadre Technologies Inc.
  10.  
  11. # Start user added include file section
  12. require "cachedmatr.tcl"
  13. require "cadfeature.tcl"
  14. require "cadmethod.tcl"
  15. # End user added include file section
  16.  
  17.  
  18. Class CADClass : {SMNode} {
  19.     constructor
  20.     method destructor
  21.     method getNameLabel
  22.     method getNameItem
  23.     method getNameWorkItem
  24.     method name
  25.     method load
  26.     method loadClassDefinition
  27.     method createFeature
  28.     method findClassDefinition
  29.     method loadConnections
  30.     method getSuperClasses
  31.     method getSubClasses
  32.     method featureSet
  33.     method addFeature
  34.     method removeFeature
  35.     method addSuperGroup
  36.     method removeSuperGroup
  37.     method addSubGroup
  38.     method removeSubGroup
  39.     method addBinaryAssocIn
  40.     method removeBinaryAssocIn
  41.     method addBinaryAssocOut
  42.     method removeBinaryAssocOut
  43.     method addNAssocConn
  44.     method removeNAssocConn
  45.     attribute loaded
  46.     attribute _featureSet
  47.     attribute classDefinition
  48.     attribute superGroupSet
  49.     attribute subGroupSet
  50.     attribute binaryAssocInSet
  51.     attribute binaryAssocOutSet
  52.     attribute nAssocConnSet
  53. }
  54.  
  55. constructor CADClass {class this inModel} {
  56.     set this [SMNode::constructor $class $this $inModel]
  57.     $this loaded 0
  58.     $this _featureSet [List new]
  59.     $this superGroupSet [List new]
  60.     $this subGroupSet [List new]
  61.     $this binaryAssocInSet [List new]
  62.     $this binaryAssocOutSet [List new]
  63.     $this nAssocConnSet [List new]
  64.     # Start constructor user section
  65.     # End constructor user section
  66.     return $this
  67. }
  68.  
  69. method CADClass::destructor {this} {
  70.     foreach ref [[$this _featureSet] contents] {
  71.         $ref _theClass ""
  72.     }
  73.     # Start destructor user section
  74.     # End destructor user section
  75. }
  76.  
  77. method CADClass::getNameLabel {this} {
  78.     return [$this getLabel]
  79. }
  80.  
  81. method CADClass::getNameItem {this} {
  82.     return [$this getItem]
  83. }
  84.  
  85. method CADClass::getNameWorkItem {this} {
  86.     return [$this getWorkItem]
  87. }
  88.  
  89. method CADClass::name {this} {
  90.     set nameItem [$this getNameItem]
  91.     if {[$nameItem isNil]} {
  92.         return ""
  93.     }
  94.     return [$nameItem name]
  95. }
  96.  
  97. method CADClass::load {this} {
  98.     if {[$this loaded] == 1} {
  99.         return
  100.     }
  101.     $this loaded 1
  102.     $this loadClassDefinition
  103.     $this loadConnections
  104. }
  105.  
  106. method CADClass::loadClassDefinition {this} {
  107.     set classDef [$this CADClass::findClassDefinition]
  108.     if {[$classDef isNil]} {
  109.         return
  110.     }
  111.     $classDef loadCachedMatrix
  112.     [$classDef cachedRowSet] foreach row {
  113.         $this createFeature $row
  114.     }
  115. }
  116.  
  117. method CADClass::createFeature {this row} {
  118.     if {[$row type] == $CDM_ATTR} {
  119.         return [CADFeature new $this $row]
  120.     }
  121.     if {[$row type] == $CDM_METHOD} {
  122.         return [CADMethod new $this $row]
  123.     }
  124.     return ""
  125. }
  126.  
  127. method CADClass::findClassDefinition {this} {
  128.     set systemV [$this getDefiningSystemVersion]
  129.     if {[$systemV isNil]} {
  130.         return $systemV
  131.     }
  132.     $this classDefinition [$systemV findFileVersion [$this name] $CDM_TYPE]
  133.     return [$this classDefinition]
  134. }
  135.  
  136. method CADClass::loadConnections {this} {
  137.     set connectors [$this getConnectorsIn $anySMType $anySMType]
  138.     foreach conn $connectors {
  139.         set connSemType [$conn getSemType]
  140.         if { $connSemType == $OMT_CAD_CB_GenConn } {
  141.             set superInhGrp \
  142.                 [$conn getFrom $OMT_CAD_CB_Generalization]
  143.             $this addSuperGroup $superInhGrp
  144.             $superInhGrp load
  145.             continue
  146.         }
  147.         if { $connSemType == $OMT_CAD_CB_Association } {
  148.             $this addBinaryAssocIn $conn
  149.             $conn load
  150.             continue
  151.         }
  152.         if { $connSemType == $OMT_CAD_NaryAssocConn } {
  153.             $this addNAssocConn $conn
  154.             set naryAssocNode [$conn getFrom $OMT_CAD_NAssoc]
  155.             $conn load
  156.             $naryAssocNode load
  157.             continue
  158.         }
  159.     }
  160.  
  161.     set connectors [$this getConnectorsOut $anySMType $anySMType]
  162.     foreach conn $connectors {
  163.         set connSemType [$conn getSemType]
  164.         if { $connSemType == $OMT_CAD_CB_GenConn } {
  165.             set subInhGrp [$conn getTo $OMT_CAD_CB_Generalization]
  166.             $this addSubGroup $subInhGrp
  167.             $subInhGrp load
  168.             continue
  169.         }
  170.         if { $connSemType == $OMT_CAD_CB_Association } {
  171.             $this addBinaryAssocOut $conn
  172.             $conn load
  173.             continue
  174.         }
  175.         if { $connSemType == $OMT_CAD_NaryAssocConn } {
  176.             $this addNAssocConn $conn
  177.             set naryAssocNode [$conn getTo $OMT_CAD_NAssoc]
  178.             $conn load
  179.             $naryAssocNode load
  180.             continue
  181.         }
  182.     }
  183. }
  184.  
  185. method CADClass::getSuperClasses {this} {
  186.     $this load
  187.     set superClasses ""
  188.     [$this superGroupSet] foreach superInhGrp {
  189.         lappend superClasses [$superInhGrp superClass]
  190.     }
  191.     return $superClasses
  192. }
  193.  
  194. method CADClass::getSubClasses {this} {
  195.     $this load
  196.     set subClasses ""
  197.     [$this subGroupSet] foreach subInhGrp {
  198.         set subClasses [concat $subClasses \
  199.             [[$subInhGrp subClassSet] contents]]
  200.     }
  201.     return $subClasses
  202. }
  203.  
  204. # Do not delete this line -- regeneration end marker
  205.  
  206. method CADClass::featureSet {this} {
  207.     return [$this _featureSet]
  208. }
  209.  
  210. method CADClass::addFeature {this newFeature} {
  211.     [$this _featureSet] append $newFeature
  212.     $newFeature _theClass $this
  213. }
  214.  
  215. method CADClass::removeFeature {this oldFeature} {
  216.     $oldFeature _theClass ""
  217.     [$this _featureSet] removeValue $oldFeature
  218. }
  219.  
  220. method CADClass::addSuperGroup {this newSuperGroup} {
  221.     [$this superGroupSet] append $newSuperGroup
  222.  
  223. }
  224.  
  225. method CADClass::removeSuperGroup {this oldSuperGroup} {
  226.     [$this superGroupSet] removeValue $oldSuperGroup
  227. }
  228.  
  229. method CADClass::addSubGroup {this newSubGroup} {
  230.     [$this subGroupSet] append $newSubGroup
  231.  
  232. }
  233.  
  234. method CADClass::removeSubGroup {this oldSubGroup} {
  235.     [$this subGroupSet] removeValue $oldSubGroup
  236. }
  237.  
  238. method CADClass::addBinaryAssocIn {this newBinaryAssocIn} {
  239.     [$this binaryAssocInSet] append $newBinaryAssocIn
  240.  
  241. }
  242.  
  243. method CADClass::removeBinaryAssocIn {this oldBinaryAssocIn} {
  244.     [$this binaryAssocInSet] removeValue $oldBinaryAssocIn
  245. }
  246.  
  247. method CADClass::addBinaryAssocOut {this newBinaryAssocOut} {
  248.     [$this binaryAssocOutSet] append $newBinaryAssocOut
  249.  
  250. }
  251.  
  252. method CADClass::removeBinaryAssocOut {this oldBinaryAssocOut} {
  253.     [$this binaryAssocOutSet] removeValue $oldBinaryAssocOut
  254. }
  255.  
  256. method CADClass::addNAssocConn {this newNAssocConn} {
  257.     [$this nAssocConnSet] append $newNAssocConn
  258.  
  259. }
  260.  
  261. method CADClass::removeNAssocConn {this oldNAssocConn} {
  262.     [$this nAssocConnSet] removeValue $oldNAssocConn
  263. }
  264.  
  265.