home *** CD-ROM | disk | FTP | other *** search
- #---------------------------------------------------------------------------
- #
- # (c) Cayenne Software Inc. 1997
- #
- # File: @(#)flows.tcl /main/titanic/2
- # Author: M. van Leeuewn
- # Description: Report on flows
- # Usage in: SystemVersions and DFD editor
- #
- #---------------------------------------------------------------------------
- # SccsId = @(#)flows.tcl /main/titanic/2 21 Aug 1997 Copyright 1997 Cayenne Software Inc.
-
-
- eval [$cc getCustomFileContents semanticbase tcl reports]
-
-
- Class ReportFlows : {SemanticBase} {
- constructor
- method doReport
-
- method objName
- method printEvent
- method printConnector
- }
-
-
- constructor ReportFlows {class this} {
- set this [SemanticBase::constructor $class $this]
- $this reportName Flows
- return $this
- }
-
-
- method ReportFlows::doReport {this model} {
- # get all DFD nodes
- set nodes [concat \
- [$model getSMObjects $OMT_DFD_Actor] \
- [$model getSMObjects $OMT_DFD_Anchor] \
- [$model getSMObjects $OMT_DFD_DataProcess] \
- [$model getSMObjects $OMT_DFD_DataStore] \
- ]
- if [lempty $nodes] { return 0 }
-
- set report [$this report]
- set sortedNodes [concat \
- [query "getItem.isNil == 1" $nodes] \
- [osort getItem.name [query "getItem.isNil == 0" $nodes]]]
- foreach class $sortedNodes {
- case [[$class getSemType] getFileType] in {
- dfd {
- set eventsSent [concat \
- [$class getConnectorsOut $OMT_DFD_ControlFlow $ANY] \
- [$class getConnectorsOut $OMT_DFD_DataFlow $ANY] \
- [$class getConnectorsOut $OMT_DFD_ResultFlow $ANY] \
- [$class getConnectorsOut $OMT_DFD_UpdateFlow $ANY] \
- ]
- set eventsRcvd [concat \
- [$class getConnectorsIn $OMT_DFD_ControlFlow $ANY] \
- [$class getConnectorsIn $OMT_DFD_DataFlow $ANY] \
- [$class getConnectorsIn $OMT_DFD_ResultFlow $ANY] \
- [$class getConnectorsIn $OMT_DFD_UpdateFlow $ANY] \
- ]
- }
- }
-
- if { [lempty $eventsSent] && [lempty $eventsRcvd] } {
- continue
- }
-
- $report print "[$this objName $class]" line
-
- # all events sent
- if ![lempty $eventsSent] {
- $report space 2
- $report print Sends 40
- $report print To 38
- $report print In line
- foreach sentEvent $eventsSent {
- $this printEvent $sentEvent out
- }
- }
-
- # all events received
- if ![lempty $eventsRcvd] {
- $report space 2
- $report print Receives 40
- $report print From 38
- $report print In line
- foreach rcvdEvent $eventsRcvd {
- $this printEvent $rcvdEvent in
- }
- }
-
- $report line
- }
-
- $report page
-
- return 0
- }
-
-
- method ReportFlows::objName {this smObj} {
- set type [query -s type $smObj.getComponents]
-
- set objName ""
- set item [$smObj getItem]
- set qi [ORB::nil]
- if [$item isNil] {
- case $type in {
- instance {
- set item [$smObj getItem 0 name_type de]
- set qi [$smObj getItem 0 name_type cl]
- }
- }
- }
-
- if ![$item isNil] {
- append objName [$item name]
- if ![$qi isNil] {
- append objName ":"
- }
- }
- if ![$qi isNil] {
- append objName [$qi name]
- }
- if {"$objName" == "" } {
- set objName ?
- }
- if {"$type" == "dfd_anchor"} {
- return "($type)"
- }
-
- return "$objName ($type)"
- }
-
-
- method ReportFlows::printEvent {this event io} {
- if [$event isA SMConnector] {
- set conn [$event getConnector]
- set items [query $conn.segments.labels.itemRefs.item]
- if [lempty $items] {
- set items [ORB::nil]
- }
- foreach item $items {
- $this printConnector $event $item [ORB::nil] $io
- }
- return
- }
-
- if [$event isA SMNode] {
- set conn [$event getSuperiorObjects $OMT_COD_Conn]
- $this printConnector $conn [ORB::nil] [$event getLabel] $io
- }
- }
-
-
- method ReportFlows::printConnector {this smConn item label io} {
- set report [$this report]
-
- set objName {}
-
- set flowType [lindex [[$smConn getSemType] name] 1]
- set end [string first "Flow" $flowType]
- if { $end > 0 } {
- incr end -1
- set flowType "[string tolower [string range $flowType 0 $end]]"
- }
-
- if ![$item isNil] {
- set objName [$item name]
- } elseif ![$label isNil] {
- set objName [$label value]
- } elseif { "$flowType" != "result" } {
- set objName ?
- }
-
- $report space 4
- $report print "($flowType)" 9
- $report space
- $report print "$objName" 29
- $report space
-
- case [[$smConn getSemType] getFileType] in {
- dfd {
- if { $io == "in" } {
- set action getFrom
- } else {
- set action getTo
- }
- set toComp [$smConn $action $OMT_DFD_Actor]
- if {$toComp == ""} {
- set toComp [$smConn $action $OMT_DFD_Anchor] }
- if {$toComp == ""} {
- set toComp [$smConn $action $OMT_DFD_DataProcess] }
- if {$toComp == ""} {
- set toComp [$smConn $action $OMT_DFD_DataStore] }
- }
- }
-
- $report print "[$this objName $toComp]" 37
- $report space
- $report print [$this fullFileName [$smConn getDefiningDiagram]] line
- }
-
-
- # ----------------------------------------------------------------------
- #
- set executeMe [ReportFlows new]
-