home *** CD-ROM | disk | FTP | other *** search
- #---------------------------------------------------------------------------
- #
- # (c) Cayenne Software, Inc. 1996
- #
- # File: %W%
- # Author: Harm Leijendeckers
- # Description: Report on UseCase actors
- # Usage in: SystemVersion and UCD editor
- # Options: freeText: show freeText of each actor
- #
- #---------------------------------------------------------------------------
- # SccsId = %W% %G% Copyright 1996 Cayenne Software, Inc.
-
-
- eval [$cc getCustomFileContents semanticbase tcl reports]
-
-
- Class ReportActors : {SemanticBase} {
- constructor
-
- method doReport
-
- method printFreeText
- attribute showFreeText
- }
-
-
- constructor ReportActors {class this} {
- set this [SemanticBase::constructor $class $this]
- $this reportName "UseCase Actors"
- if { [lsearch $Options "freeText"] != -1 } {
- $this showFreeText 1
- } else {
- $this showFreeText 0
- }
- return $this
- }
-
-
- method ReportActors::doReport {this model} {
- # get all UCD actors
- set actors [concat [$model getSMObjects $OMT_UCD_Actor]]
- if [lempty $actors] { return 0 }
-
- set report [$this report]
- $report header {
- set report [$this report]
- $report print "Actor" 21
- $report print "Action" 17
- $report print "UseCase" 21
- if [[$this fileV] isNil] {
- $report print "By Event" 31
- $report print "In FileVersion" line
- } else {
- $report print "By Event" line
- }
- $report line
- }
-
- # Sort on actor name
- # First get all actors without a name
- set actorsWithoutName [query "getLabel.isNil == 1" $actors]
- set actorsWithName [query "getLabel.isNil == 0" $actors]
- set sortedActors [concat $actorsWithoutName \
- [osort getLabel.value $actorsWithName]]
-
- set prevActorName ""
- set prevActorI [ORB::nil]
- set prevDiagram [ORB::nil]
- foreach actor $sortedActors {
- set events [concat \
- [$actor getConnectorsOut \
- $OMT_UCD_UndirectedCommunicationAssociation $OMT_UCD_UseCase] \
- [$actor getConnectorsOut \
- $OMT_UCD_DirectedCommunicationAssociation $OMT_UCD_UseCase]]
- if [lempty $events] {
- # skip actors which don't send anything
- continue
- }
-
- set actorName [$this objName $actor]
-
- # print freeText of precious actor
- if { $prevActorName != $actorName } {
- $this printFreeText $prevActorName $prevActorI $prevDiagram
- $report line
- }
-
- set actorNode [$actor getComponents]
- if { [$actorNode getPropertyValue initiator] == "1" } {
- set nodeText "initiates"
- } else {
- set nodeText "participates in"
- }
-
- foreach event $events {
- $report print $actorName 20
- $report space
- $report print $nodeText 16
- $report space
-
- set toNode [$event getTo $OMT_UCD_UseCase]
- set toI [$toNode getItem]
- if ![$toI isNil] {
- $report print [$toI name] 20
- } else {
- $report print ? 20
- }
- $report space
-
- # don't print fileVersion if executed on file level, so the
- # available space for the event text depends on it
- if [[$this fileV] isNil] {
- set eventLength 30
- } else {
- set eventLength 71
- }
-
- set eventI [$event getItem]
- if ![$eventI isNil] {
- $report print [$eventI name] $eventLength
- } else {
- $report print ? $eventLength
- }
-
- # don't print fileVersion if executed on file level
- if [[$this fileV] isNil] {
- $report space
- set fv [$event getDefiningDiagram]
- $report print [$this fullFileName $fv] 40
- }
-
- $report line
-
- }
-
- set prevActorName $actorName
- set prevActorI [$actor getItem]
- set prevDiagram [$actor getDefiningDiagram]
- }
-
- # print freeText of precious actor
- $this printFreeText $prevActorName $prevActorI $prevDiagram
-
- $report page
- $report remove header
-
- return 0
- }
-
-
- method ReportActors::printFreeText {this actorName actorI diagram} {
- if { ![$this showFreeText] || [$actorI isNil] || [$diagram isNil] } {
- return
- }
-
- set actorWI [$diagram findDeclaration $actorI [$this configV]]
-
- if ![$actorWI isNil] {
- set report [$this report]
- set properties [$actorWI properties]
- if ![$properties isNil] {
- set freeText [$properties getPropertyValue freeText]
- if ![lempty $freeText] {
- $report line
- $report print "Free Text of $actorName:" line
- $report space 4
- $report print $freeText 120 line
- }
- }
- }
- }
-
-
- # ----------------------------------------------------------------------
- #
- set executeMe [ReportActors new]
-