home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 1997 November
/
PCWorld_1997-11_cd.bin
/
software
/
programy
/
komix
/
DATA.Z
/
flows.tcl
< prev
next >
Wrap
Text File
|
1996-11-22
|
4KB
|
153 lines
#---------------------------------------------------------------------------
#
# (c) Cadre Technologies Inc. 1995
#
# File: @(#)flows.tcl /main/hindenburg/1
# Author: Harm Leijendeckers
# Description: Report on flows
# Usage in: SystemVersions and DFD editor
#
#---------------------------------------------------------------------------
# SccsId = @(#)flows.tcl /main/hindenburg/1 22 Nov 1996 Copyright 1995 Cadre Technologies Inc.
eval [$cc getCustomFileContents semanticbase tcl reports]
Class ReportFlows : {SemanticBase} {
constructor
method doReport
method makeFlow
}
constructor ReportFlows {class this} {
set this [SemanticBase::constructor $class $this]
$this reportName Flows
defineTypes
defineArrows
return $this
}
method ReportFlows::doReport {this model} {
# get all DFD nodes
set nodes [query {getSemType.name in {"DFD DataProcess" \
"DFD DataStore" "DFD Actor" "DFD Anchor"} && objType == SMNode} \
[$model getSMObjects $ANY]]
if [lempty $nodes] { return 0 }
set report [$this report]
$report header {
set report [$this report]
$report print "--- Data Flow -->" 32 center
$report print "- - Control Flow - >" 32 center
$report print "=== Result Flow ==>" 32 center
$report print "<-< Update Flow >->" 32 center line
$report line
$report print "From Type" 12
$report print "From Node" 27
$report print Flow 54
$report print "To Node" 27
$report print "To Type" line
$report line
}
set sortedNodes [concat [query "getItem.isNil == 1" $nodes] \
[osort getItem.name [query "getItem.isNil == 0" $nodes]]]
foreach node $sortedNodes {
set outFlows [getOut $node]
if [lempty $outFlows] { continue }
$report print [string range [$this objType $node] 4 end] 11
$report space
$report print [$this objName $node] 26
$report space
foreach flow $outFlows {
if ![$report queued] { $report space 39 }
$report print [$this makeFlow $flow] 53
$report space
set toNode [lindex $flow [expr [llength $flow]-1]]
$report print [$this objName $toNode] 26
$report space
$report print [string range [$this objType $toNode] 4 end] 11
$report line
}
$report line
}
$report page
$report remove header
return 0
}
method ReportFlows::makeFlow {this flows} {
set flowType [[lindex $flows 0] getSemType]
set result $leftArrow($flowType)
while { [llength $flows] != 2 } {
set txt [$this labelValue [lvarpop flows]]
if { $txt == "" } { continue }
set result [concat $result $txt $middleArrow($flowType)]
}
return [concat $result [$this labelValue [lvarpop flows]] \
$rightArrow($flowType)]
}
proc getOut {node} {
set connsOut [$node getConnectorsOut $ANY $ANY]
if { $connsOut == "" } { return "" }
set result ""
foreach conn $connsOut {
set endNode [concat [$conn getTo $OMT_DFD_DataProcess] \
[$conn getTo $OMT_DFD_DataStore] \
[$conn getTo $OMT_DFD_Actor] \
[$conn getTo $OMT_DFD_Anchor]]
if { $endNode != "" } {
lappend result [concat $conn $endNode]
} else {
set toSplit [$conn getTo $OMT_DFD_Node]
foreach subResult [getOut $toSplit] {
lappend result [concat $conn $subResult]
}
}
}
return $result
}
proc defineArrows {} {
global leftArrow middleArrow rightArrow
set leftArrow($OMT_DFD_DataFlow) "---"
set leftArrow($OMT_DFD_UpdateFlow) "<-<"
set leftArrow($OMT_DFD_ControlFlow) "- -"
set leftArrow($OMT_DFD_ResultFlow) ""
set middleArrow($OMT_DFD_DataFlow) "---"
set middleArrow($OMT_DFD_UpdateFlow) "<->"
set middleArrow($OMT_DFD_ControlFlow) "- -"
set middleArrow($OMT_DFD_ResultFlow) ""
set rightArrow($OMT_DFD_DataFlow) "-->"
set rightArrow($OMT_DFD_UpdateFlow) ">->"
set rightArrow($OMT_DFD_ControlFlow) "- >"
set rightArrow($OMT_DFD_ResultFlow) "==>"
}
# ----------------------------------------------------------------------
#
set executeMe [ReportFlows new]