home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / actors.tcl < prev    next >
Text File  |  1997-09-03  |  7KB  |  278 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. #                properties: show all properties of each actor
  11. #
  12. #---------------------------------------------------------------------------
  13. # SccsId = %W%    %G%    Copyright 1996 Cayenne Software, Inc.
  14.  
  15.  
  16. eval [$cc getCustomFileContents semanticbase tcl reports]
  17.  
  18.  
  19. Class ReportActors : {SemanticBase} {
  20.     constructor
  21.  
  22.     method doReport
  23.     method getEvents
  24.     method findCommunication
  25.  
  26.     method printFreeText
  27.     attribute showFreeText
  28.     attribute showPropVals
  29. }
  30.  
  31.  
  32. constructor ReportActors {class this} {
  33.     set this [SemanticBase::constructor $class $this]
  34.     $this reportName "UseCase Actors"
  35.     $this showFreeText 0
  36.     $this showPropVals 0
  37.     if { [lsearch $Options "freeText"] != -1 }   { $this showFreeText 1 }
  38.     if { [lsearch $Options "properties"] != -1 } { $this showPropVals 1 }
  39.     return $this
  40. }
  41.  
  42.  
  43. method ReportActors::getEvents {this Actor} {
  44.     set events ""
  45.     switch [[$Actor getSemType] getCompType] {
  46.     ucd_actor {
  47.         set events [concat \
  48.         [$Actor getConnectorsIn \
  49.             $OMT_UCD_UndirectedCommunicationAssociation \
  50.             $OMT_UCD_UseCase] \
  51.         [$Actor getConnectorsOut \
  52.             $OMT_UCD_UndirectedCommunicationAssociation \
  53.             $OMT_UCD_UseCase] \
  54.         [$Actor getConnectorsIn \
  55.             $OMT_UCD_DirectedCommunicationAssociation \
  56.             $OMT_UCD_UseCase] \
  57.         [$Actor getConnectorsOut \
  58.             $OMT_UCD_DirectedCommunicationAssociation \
  59.             $OMT_UCD_UseCase] \
  60.         ]
  61.     }
  62.     cod_actor {
  63.         set events [concat \
  64.         [$Actor getConnectorsIn \
  65.             $OMT_COD_Link $OMT_COD_Instance] \
  66.         [$Actor getConnectorsOut \
  67.             $OMT_COD_Link $OMT_COD_Instance] \
  68.         ]
  69.     }
  70.     etd_initiator {
  71.         set events [concat \
  72.         [$Actor getConnectorsIn \
  73.             $OMT_ETD_Event $OMT_ETD_Initiator] \
  74.         [$Actor getConnectorsOut \
  75.             $OMT_ETD_Event $OMT_ETD_Initiator] \
  76.         [$Actor getConnectorsIn \
  77.             $OMT_ETD_Event $OMT_ETD_Object] \
  78.         [$Actor getConnectorsOut \
  79.             $OMT_ETD_Event $OMT_ETD_Object] \
  80.         ]
  81.     }
  82.         default {
  83.         }
  84.     }
  85.     return $events
  86. }
  87.  
  88.  
  89. method ReportActors::findCommunication {this Event from} {
  90.     set node ""
  91.     set text ""
  92.  
  93.     set fromNode [$from getComponents]
  94.     if { [$fromNode getPropertyValue initiator] == "1" } {
  95.     set text "initiates"
  96.     } else {
  97.     set text "sends to"
  98.     }
  99.  
  100.     switch [[$Event getConnector] type] {
  101.     link {
  102.             # COD
  103.         set text "is linked with"
  104.         set node [$Event getTo $OMT_COD_Instance]
  105.         if { [lempty $node] || $node == $from } {
  106.         set node [$Event getFrom $OMT_COD_Instance]
  107.         }
  108.     }
  109.     und_com_assoc {
  110.             # UCD
  111.         set text "communicates with"
  112.         set node [$Event getTo $OMT_UCD_UseCase]
  113.         if { [lempty $node] || $node == $from } {
  114.         set node [$Event getFrom $OMT_UCD_UseCase]
  115.         }
  116.     }
  117.         dir_com_assoc {
  118.             # UCD
  119.         set node [$Event getTo $OMT_UCD_UseCase]
  120.         if { [lempty $node] || $node == $from } {
  121.         set text "receives from"
  122.         set node [$Event getFrom $OMT_UCD_UseCase]
  123.         }
  124.         }
  125.     etd_event {
  126.             # ETD
  127.             set text "sends to"
  128.         set node [$Event getTo $OMT_ETD_Initiator]
  129.         if { [lempty $node] || $node == $from } {
  130.         set node [$Event getTo $OMT_ETD_Object]
  131.         }
  132.         if { [lempty $node] || $node == $from } { 
  133.         set text "receives from"
  134.         set node [$Event getFrom $OMT_ETD_Initiator]
  135.         }
  136.         if { [lempty $node] || $node == $from } {
  137.         set node [$Event getFrom $OMT_ETD_Object]
  138.         }
  139.     }
  140.     }
  141.     return [list $text $node]
  142. }
  143.  
  144. method ReportActors::doReport {this model} {
  145.     # get all UCD actors
  146.     set actors [concat [$model getSMObjects $OMT_UCD_Actor] \
  147.                        [$model getSMObjects $OMT_COD_Actor] \
  148.                        [$model getSMObjects $OMT_ETD_Initiator]]
  149.     if [lempty $actors] { return 0 }
  150.  
  151.     set report [$this report]
  152.     $report header {
  153.     set report [$this report]
  154.     $report print "Actor" 21
  155.     $report print "Action"  18
  156.     $report print "UseCase/Object" 21
  157.     if [[$this fileV] isNil] {
  158.         $report print "By Event" 31
  159.         $report print "In FileVersion" line
  160.     } else {
  161.         $report print "By Event" line
  162.     }
  163.     $report line
  164.     }
  165.  
  166.     # Sort on actor name
  167.     # First get all actors without a name
  168.     set actorsWithoutName [query "getLabel.isNil == 1" $actors]
  169.     set actorsWithName    [query "getLabel.isNil == 0" $actors]
  170.     set sortedActors [concat $actorsWithoutName \
  171.                  [osort getLabel.value $actorsWithName]]
  172.  
  173.     set prevActorName ""
  174.     set prevActorI   [ORB::nil]
  175.     set prevDiagram  [ORB::nil]
  176.  
  177.     foreach actor $sortedActors {
  178.         set events [$this getEvents $actor]
  179.  
  180.     set actorName [$this objName $actor]
  181.  
  182.     # print freeText of previous actor
  183.     if { $prevActorName != $actorName } {
  184.         $this printFreeText $prevActorName $prevActorI $prevDiagram
  185.     }
  186.  
  187.         # $report [query -s getSemType.getCompType $actor]
  188.  
  189.         if [lempty $events] {
  190.         $report print $actorName 20
  191.         $report space
  192.         $report print "** no actions **" 17
  193.         $report space 53
  194.         if [[$this fileV] isNil] {
  195.         set fv [$actor getDefiningDiagram]
  196.         $report print [$this fullFileName $fv] 40
  197.         } 
  198.         $report line
  199.         }
  200.  
  201.         set actorPrinted 0
  202.     foreach event $events {
  203.             set communication [$this findCommunication $event $actor]
  204.             set toNode    [lindex $communication 1]
  205.         set eventName [$this objName $event]
  206.  
  207.         if { ! $actorPrinted } {
  208.         $report print $actorName 20
  209.                 set actorPrinted 1
  210.         } else {
  211.                 $report space 20
  212.         }
  213.         $report space
  214.         $report print [lindex $communication 0] 17
  215.         $report space
  216.         $report print [$this objName $toNode] 20
  217.         $report space
  218.  
  219.         # don't print fileVersion if executed on file level, so the
  220.         # available space for the event text depends on it
  221.         if [[$this fileV] isNil] {
  222.         $report print $eventName 30
  223.         $report space
  224.         set fv [$event getDefiningDiagram]
  225.         $report print [$this fullFileName $fv] 40
  226.         } else {
  227.         $report print $eventName 71
  228.         }
  229.         $report line
  230.     }
  231.  
  232.     set prevActorName $actorName
  233.     set prevActorI    [$actor getItem]
  234.     set prevDiagram   [$actor getDefiningDiagram]
  235.     }
  236.  
  237.     # print freeText of precious actor
  238.     $this printFreeText $prevActorName $prevActorI $prevDiagram
  239.  
  240.     $report page
  241.     $report remove header
  242.  
  243.     return 0
  244. }
  245.  
  246.  
  247. method ReportActors::printFreeText {this actorName actorI diagram} {
  248.     if { [$actorI isNil] || [$diagram isNil] } {
  249.     [$this report] line
  250.     return
  251.     }
  252.     if { ![$this showFreeText] && ![$this showPropVals] } {
  253.     [$this report] line
  254.     return
  255.     }
  256.  
  257.     set actorWI [$diagram findDeclaration $actorI [$this configV]]
  258.  
  259.     if ![$actorWI isNil] {
  260.     set report [$this report]
  261.     set properties [$actorWI properties]
  262.     if ![$properties isNil] {
  263.             if { [$this showPropVals] } { 
  264.         $this showProperties $properties
  265.         } else {
  266.         $this showProperties $properties freeText
  267.         }
  268.     }
  269.     }
  270.     [$this report] line 
  271.     return
  272. }
  273.  
  274.  
  275. # ----------------------------------------------------------------------
  276. #
  277. set executeMe [ReportActors new]
  278.