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 >
Wrap
Text File
|
1996-12-16
|
5KB
|
178 lines
#---------------------------------------------------------------------------
#
# (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]