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

  1. #---------------------------------------------------------------------------
  2. #
  3. #    (c) Cayenne Software, Inc. 1996
  4. #
  5. #    File:        %W%
  6. #    Author:        Harm Leijendeckers
  7. #    Description:    Report on UseCase actors
  8. #    Usage in:    SystemVersion and UCD editor
  9. #    Options:    freeText: show freeText of each actor
  10. #
  11. #---------------------------------------------------------------------------
  12. # SccsId = %W%    %G%    Copyright 1996 Cayenne Software, Inc.
  13.  
  14.  
  15. eval [$cc getCustomFileContents semanticbase tcl reports]
  16.  
  17.  
  18. Class ReportActors : {SemanticBase} {
  19.     constructor
  20.  
  21.     method doReport
  22.  
  23.     method printFreeText
  24.     attribute showFreeText
  25. }
  26.  
  27.  
  28. constructor ReportActors {class this} {
  29.     set this [SemanticBase::constructor $class $this]
  30.     $this reportName "UseCase Actors"
  31.     if { [lsearch $Options "freeText"] != -1 } {
  32.     $this showFreeText 1
  33.     } else {
  34.     $this showFreeText 0
  35.     }
  36.     return $this
  37. }
  38.  
  39.  
  40. method ReportActors::doReport {this model} {
  41.     # get all UCD actors
  42.     set actors [concat [$model getSMObjects $OMT_UCD_Actor]]
  43.     if [lempty $actors] { return 0 }
  44.  
  45.     set report [$this report]
  46.     $report header {
  47.     set report [$this report]
  48.     $report print "Actor" 21
  49.     $report print "Action"  17
  50.     $report print "UseCase" 21
  51.     if [[$this fileV] isNil] {
  52.         $report print "By Event" 31
  53.         $report print "In FileVersion" line
  54.     } else {
  55.         $report print "By Event" line
  56.     }
  57.     $report line
  58.     }
  59.  
  60.     # Sort on actor name
  61.     # First get all actors without a name
  62.     set actorsWithoutName [query "getLabel.isNil == 1" $actors]
  63.     set actorsWithName    [query "getLabel.isNil == 0" $actors]
  64.     set sortedActors [concat $actorsWithoutName \
  65.                  [osort getLabel.value $actorsWithName]]
  66.  
  67.     set prevActorName ""
  68.     set prevActorI   [ORB::nil]
  69.     set prevDiagram  [ORB::nil]
  70.     foreach actor $sortedActors {
  71.     set events [concat \
  72.         [$actor getConnectorsOut \
  73.         $OMT_UCD_UndirectedCommunicationAssociation $OMT_UCD_UseCase] \
  74.         [$actor getConnectorsOut \
  75.         $OMT_UCD_DirectedCommunicationAssociation $OMT_UCD_UseCase]]
  76.     if [lempty $events] {
  77.         # skip actors which don't send anything
  78.         continue
  79.     }
  80.  
  81.     set actorName [$this objName $actor]
  82.  
  83.     # print freeText of precious actor
  84.     if { $prevActorName != $actorName } {
  85.         $this printFreeText $prevActorName $prevActorI $prevDiagram
  86.         $report line
  87.     }
  88.  
  89.     set actorNode [$actor getComponents]
  90.     if { [$actorNode getPropertyValue initiator] == "1" } {
  91.         set nodeText "initiates"
  92.     } else {
  93.         set nodeText "participates in"
  94.     }
  95.  
  96.     foreach event $events {
  97.         $report print $actorName 20
  98.         $report space
  99.         $report print $nodeText 16
  100.         $report space
  101.  
  102.         set toNode [$event getTo $OMT_UCD_UseCase]
  103.         set toI    [$toNode getItem]
  104.         if ![$toI isNil] {
  105.         $report print [$toI name] 20
  106.         } else {
  107.         $report print ? 20
  108.         }
  109.         $report space
  110.  
  111.         # don't print fileVersion if executed on file level, so the
  112.         # available space for the event text depends on it
  113.         if [[$this fileV] isNil] {
  114.         set eventLength 30
  115.         } else {
  116.         set eventLength 71
  117.         }
  118.  
  119.         set eventI [$event getItem]
  120.         if ![$eventI isNil] {
  121.         $report print [$eventI name] $eventLength
  122.         } else {
  123.         $report print ? $eventLength
  124.         }
  125.  
  126.         # don't print fileVersion if executed on file level
  127.         if [[$this fileV] isNil] {
  128.         $report space
  129.         set fv [$event getDefiningDiagram]
  130.         $report print [$this fullFileName $fv] 40
  131.         }
  132.  
  133.         $report line
  134.  
  135.     }
  136.  
  137.     set prevActorName $actorName
  138.     set prevActorI    [$actor getItem]
  139.     set prevDiagram   [$actor getDefiningDiagram]
  140.     }
  141.  
  142.     # print freeText of precious actor
  143.     $this printFreeText $prevActorName $prevActorI $prevDiagram
  144.  
  145.     $report page
  146.     $report remove header
  147.  
  148.     return 0
  149. }
  150.  
  151.  
  152. method ReportActors::printFreeText {this actorName actorI diagram} {
  153.     if { ![$this showFreeText] || [$actorI isNil] || [$diagram isNil] } {
  154.     return
  155.     }
  156.  
  157.     set actorWI [$diagram findDeclaration $actorI [$this configV]]
  158.  
  159.     if ![$actorWI isNil] {
  160.     set report [$this report]
  161.     set properties [$actorWI properties]
  162.     if ![$properties isNil] {
  163.         set freeText [$properties getPropertyValue freeText]
  164.         if ![lempty $freeText] {
  165.         $report line
  166.         $report print "Free Text of $actorName:" line
  167.         $report space 4
  168.         $report print $freeText 120 line
  169.         }
  170.     }
  171.     }
  172. }
  173.  
  174.  
  175. # ----------------------------------------------------------------------
  176. #
  177. set executeMe [ReportActors new]
  178.