home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / flows.tcl < prev    next >
Text File  |  1997-08-21  |  5KB  |  210 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #    (c) Cayenne Software Inc. 1997
  4. #
  5. #    File:        @(#)flows.tcl    /main/titanic/2
  6. #    Author:        M. van Leeuewn
  7. #    Description:    Report on flows
  8. #    Usage in:    SystemVersions and DFD editor
  9. #
  10. #---------------------------------------------------------------------------
  11. # SccsId = @(#)flows.tcl    /main/titanic/2    21 Aug 1997    Copyright 1997 Cayenne Software Inc.
  12.  
  13.  
  14. eval [$cc getCustomFileContents semanticbase tcl reports]
  15.  
  16.  
  17. Class ReportFlows : {SemanticBase} {
  18.     constructor
  19.     method doReport
  20.  
  21.     method objName
  22.     method printEvent
  23.     method printConnector
  24. }
  25.  
  26.  
  27. constructor ReportFlows {class this} {
  28.     set this [SemanticBase::constructor $class $this]
  29.     $this reportName Flows
  30.     return $this
  31. }
  32.  
  33.  
  34. method ReportFlows::doReport {this model} {
  35.     # get all DFD nodes
  36.     set nodes [concat \
  37.     [$model getSMObjects $OMT_DFD_Actor] \
  38.     [$model getSMObjects $OMT_DFD_Anchor] \
  39.     [$model getSMObjects $OMT_DFD_DataProcess] \
  40.     [$model getSMObjects $OMT_DFD_DataStore] \
  41.     ]
  42.     if [lempty $nodes] { return 0 }
  43.  
  44.     set report [$this report]
  45.     set sortedNodes [concat \
  46.     [query "getItem.isNil == 1" $nodes] \
  47.     [osort getItem.name [query "getItem.isNil == 0" $nodes]]]
  48.     foreach class $sortedNodes {
  49.     case [[$class getSemType] getFileType] in {
  50.         dfd {
  51.         set eventsSent [concat \
  52.                      [$class getConnectorsOut $OMT_DFD_ControlFlow $ANY] \
  53.                      [$class getConnectorsOut $OMT_DFD_DataFlow $ANY] \
  54.                      [$class getConnectorsOut $OMT_DFD_ResultFlow $ANY] \
  55.                      [$class getConnectorsOut $OMT_DFD_UpdateFlow $ANY] \
  56.         ]
  57.         set eventsRcvd [concat \
  58.                      [$class getConnectorsIn $OMT_DFD_ControlFlow $ANY] \
  59.                      [$class getConnectorsIn $OMT_DFD_DataFlow $ANY] \
  60.                      [$class getConnectorsIn $OMT_DFD_ResultFlow $ANY] \
  61.                      [$class getConnectorsIn $OMT_DFD_UpdateFlow $ANY] \
  62.         ]
  63.         }
  64.     }
  65.  
  66.     if { [lempty $eventsSent] && [lempty $eventsRcvd] } {
  67.         continue
  68.     }
  69.  
  70.     $report print "[$this objName $class]" line
  71.  
  72.     # all events sent
  73.     if ![lempty $eventsSent] {
  74.         $report space 2
  75.         $report print Sends 40
  76.         $report print To 38
  77.         $report print In line
  78.         foreach sentEvent $eventsSent {
  79.         $this printEvent $sentEvent out
  80.         }
  81.     }
  82.  
  83.     # all events received
  84.     if ![lempty $eventsRcvd] {
  85.         $report space 2
  86.         $report print Receives 40
  87.         $report print From 38
  88.         $report print In line
  89.         foreach rcvdEvent $eventsRcvd {
  90.         $this printEvent $rcvdEvent in
  91.         }
  92.     }
  93.  
  94.     $report line
  95.     }
  96.  
  97.     $report page
  98.  
  99.     return 0
  100. }
  101.  
  102.  
  103. method ReportFlows::objName {this smObj} {
  104.     set type [query -s type $smObj.getComponents]
  105.  
  106.     set objName ""
  107.     set item [$smObj getItem]
  108.     set qi [ORB::nil]
  109.     if [$item isNil] {
  110.     case $type in {
  111.         instance {
  112.         set item [$smObj getItem 0 name_type de]
  113.         set qi [$smObj getItem 0 name_type cl]
  114.         }
  115.     }
  116.     }
  117.  
  118.     if ![$item isNil] {
  119.     append objName [$item name]
  120.     if ![$qi isNil] {
  121.         append objName ":"
  122.     }
  123.     }
  124.     if ![$qi isNil] {
  125.     append objName [$qi name]
  126.     }
  127.     if {"$objName" == "" } {
  128.     set objName ?
  129.     } 
  130.     if {"$type" == "dfd_anchor"} {
  131.         return "($type)"
  132.     }
  133.  
  134.     return "$objName ($type)"
  135. }
  136.  
  137.  
  138. method ReportFlows::printEvent {this event io} {
  139.     if [$event isA SMConnector] {
  140.     set conn [$event getConnector]
  141.     set items [query $conn.segments.labels.itemRefs.item]
  142.     if [lempty $items] {
  143.         set items [ORB::nil]
  144.     }
  145.     foreach item $items {
  146.         $this printConnector $event $item [ORB::nil] $io
  147.     }
  148.     return
  149.     }
  150.  
  151.     if [$event isA SMNode] {
  152.     set conn [$event getSuperiorObjects $OMT_COD_Conn]
  153.     $this printConnector $conn [ORB::nil] [$event getLabel] $io
  154.     }
  155. }
  156.  
  157.  
  158. method ReportFlows::printConnector {this smConn item label io} {
  159.     set report [$this report]
  160.  
  161.     set objName {}
  162.  
  163.     set flowType [lindex [[$smConn getSemType] name] 1]
  164.     set end      [string first "Flow" $flowType]
  165.     if { $end > 0 } {
  166.         incr end -1
  167.         set flowType "[string tolower [string range $flowType 0 $end]]"
  168.     }
  169.  
  170.     if ![$item isNil] {
  171.     set objName [$item name]
  172.     } elseif ![$label isNil] {
  173.     set objName [$label value]
  174.     } elseif { "$flowType" != "result" } {
  175.     set objName ?
  176.     }
  177.  
  178.     $report space 4
  179.     $report print "($flowType)" 9
  180.     $report space
  181.     $report print "$objName" 29
  182.     $report space
  183.  
  184.     case [[$smConn getSemType] getFileType] in {
  185.     dfd {
  186.         if { $io == "in" } {
  187.                 set action getFrom
  188.         } else {
  189.         set action getTo
  190.         }
  191.         set toComp [$smConn $action $OMT_DFD_Actor]
  192.         if {$toComp == ""} {
  193.            set toComp [$smConn $action $OMT_DFD_Anchor] }
  194.         if {$toComp == ""} {
  195.         set toComp [$smConn $action $OMT_DFD_DataProcess] }
  196.         if {$toComp == ""} {
  197.         set toComp [$smConn $action $OMT_DFD_DataStore] }
  198.     }
  199.     }
  200.  
  201.     $report print "[$this objName $toComp]" 37
  202.     $report space
  203.     $report print [$this fullFileName [$smConn getDefiningDiagram]] line
  204. }
  205.  
  206.  
  207. # ----------------------------------------------------------------------
  208. #
  209. set executeMe [ReportFlows new]
  210.