home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / cmusecase.tcl < prev    next >
Text File  |  1996-09-16  |  5KB  |  175 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)cmusecase.tcl    /main/hindenburg/7
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)cmusecase.tcl    /main/hindenburg/7   16 Sep 1996 Copyright 1996 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require chktcl_msg.tcl
  13. # End user added include file section
  14.  
  15.  
  16. Class CMUseCase : {SMNode} {
  17.     method destructor
  18.     constructor
  19.     method initChkSysV
  20.     method getName
  21.     method getLocation
  22.     method isInSystem
  23.     method checkDiagramRef
  24.     method checkInitiator
  25.     method mcheck
  26.     attribute chkSysV
  27.     attribute file
  28. }
  29.  
  30. method CMUseCase::destructor {this} {
  31.     # Start destructor user section
  32.     # End destructor user section
  33. }
  34.  
  35. constructor CMUseCase {class this inModel} {
  36.     set this [SMNode::constructor $class $this $inModel]
  37.     $this chkSysV ""
  38.     return $this
  39. }
  40.  
  41. method CMUseCase::initChkSysV {this} {
  42.     # in case of scopeSystem, 'chkSysV' contains the appropriate systemVersion
  43.     # must be called prior to the check functions
  44.     # note that a CMUseCase has item interpretation, and may have scopePhase
  45.     #    or scopeSystem
  46.     #
  47.     if {[$this chkSysV] != ""} {
  48.     return
  49.     }
  50.     $this chkSysV [$this getDefiningSystemVersion]
  51. }
  52.  
  53. method CMUseCase::getName {this} {
  54.     set label [$this getLabel]
  55.     if {[$label isNil]} {
  56.     return ""
  57.     }
  58.     return [$label value]
  59. }
  60.  
  61. method CMUseCase::getLocation {this} {
  62.     # get the location of this, starting in current system
  63.     #
  64.     if {[$this file] == ""} {
  65.     set sys [[[ClientContext::global] currentSystem] system]
  66.     foreach comp [$this getComponents] {
  67.         if {[$comp system] == $sys} {
  68.         $this file [[[$comp diagram] file] name].[[[$comp diagram] file] type]
  69.         break
  70.         }
  71.     }
  72.     if {[$this file] == ""} {
  73.         set comp [lindex [$this getComponents] 0]
  74.         $this file "[[[$comp diagram] file] name].[[[$comp diagram] file] type] of System '[[$comp system] name]'"
  75.     }
  76.     }
  77.     return "File '[$this file]'"
  78. }
  79.  
  80. method CMUseCase::isInSystem {this {sys ""}} {
  81.     # if not supplied, use current system for 'sys'
  82.     #
  83.     if {$sys == ""} {
  84.     set sys [[[ClientContext::global] currentSystem] system]
  85.     }
  86.     set defSysV [$this getDefiningSystemVersion]
  87.     if {![$defSysV isNil]} {
  88.     if {[$defSysV system] == $sys} {
  89.         return 1
  90.     }
  91.     }
  92.     foreach comp [$this getComponents] {
  93.     if {[$comp system] == $sys} {
  94.         return 1
  95.     }
  96.     }
  97.     return 0
  98. }
  99.  
  100. method CMUseCase::checkDiagramRef {this} {
  101.     # For each UseCase there must be a UCD with the same name or at least one
  102.     #   ETD qualified by the name of the UseCase
  103.     #
  104.     set name [$this getName]
  105.     regsub -all " " $name "" name
  106.     if {$name == ""} {
  107.     return
  108.     }
  109.  
  110.     set cc [ClientContext::global]
  111.     set project [$cc currentProject]
  112.     set configV [$cc currentConfig]
  113.     set systemV [$this chkSysV]
  114.     if {[$systemV isNil]} {
  115.     set systemV [$cc currentSystem]
  116.     }
  117.  
  118.     # UCD
  119.     #
  120.     set item [$project findItem $name cl]
  121.     if {![$item isNil]} {
  122.     $systemV getDecompositions $item $configV decompFiles {ucd} resultSystems resultFiles
  123.     if {![lempty $resultFiles]} {
  124.         return
  125.     }
  126.     }
  127.  
  128.     # ETD
  129.     #
  130.     set workItem [$systemV findDefinition [$this getItem] $configV]
  131.     if {![$workItem isNil]} {
  132.     set sysV [$workItem owner]
  133.     if {![$sysV isNil]} {
  134.         foreach qfiedWorkItem [$workItem qualifiedDeclarations] {
  135.         set fileV [$sysV findFileVersion -byItemAndType [$qfiedWorkItem item] "etd"]
  136.         if {![$fileV isNil]} {
  137.             return
  138.         }
  139.         }
  140.     }
  141.     }
  142.  
  143.     m4_error $E_USECASE_NO_DIAG_REF $name " in [$this getLocation]"
  144. }
  145.  
  146. method CMUseCase::checkInitiator {this} {
  147.     # Each UseCase must have exactly one initiating UCD Actor
  148.     #
  149.     set chkSysV [$this chkSysV]
  150.  
  151.     set actors [$this getOppositeObjects $OMT_UCD_UndirectedCommunicationAssociation $OMT_UCD_Actor]
  152.     foreach conn [$this getConnectorsIn $OMT_UCD_DirectedCommunicationAssociation $OMT_UCD_Actor] {
  153.     lappend actors [$conn getFrom $OMT_UCD_Actor]
  154.     }
  155.  
  156.     set iniCnt 0
  157.     foreach ac $actors {
  158.     if {([$chkSysV isNil] || [$ac getDefiningSystemVersion] == $chkSysV) && [$ac getPropertyValue "initiator"] == "1"} {
  159.         set iniCnt [expr $iniCnt + 1]
  160.     }
  161.     }
  162.     if {$iniCnt != 1} {
  163.     m4_error $E_USECASE_WRONG_INIT [$this getName] " in [$this getLocation]" $iniCnt
  164.     }
  165. }
  166.  
  167. method CMUseCase::mcheck {this} {
  168.     $this initChkSysV
  169.     $this checkDiagramRef
  170.     $this checkInitiator
  171. }
  172.  
  173. # Do not delete this line -- regeneration end marker
  174.  
  175.