home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / genitempro.tcl < prev    next >
Text File  |  1997-10-14  |  3KB  |  140 lines

  1. Class GenItemProp : {Object} {
  2.     method destructor
  3.     constructor
  4.     method getDocStructure
  5.     method getStructureLines
  6.     method match
  7.     attribute document
  8. }
  9.  
  10. method GenItemProp::destructor {this} {
  11.     # Start destructor user section
  12.     # End destructor user section
  13. }
  14.  
  15. constructor GenItemProp {class this name document} {
  16.     set this [Object::constructor $class $this $name]
  17.     $this document $document
  18.     # Start constructor user section
  19.     # End constructor user section
  20.     return $this
  21. }
  22.  
  23. method GenItemProp::getDocStructure {this fileTypes itemType componentType labelType properties {prefix ""}} {
  24.  
  25.     set structure ""
  26.     set first 1
  27.  
  28.     set sv [[$this document] documentedSystem]
  29.  
  30.     if [$sv isNil] {
  31.     wmtkerror "Invalid documented system"
  32.     return $structure
  33.     }
  34.  
  35.     foreach fv [$sv localFileVersions] {
  36.     if [$this match $fileTypes $fv] {
  37.         set strLine [$this getStructureLines $fv $itemType \
  38.         $componentType $labelType $properties $first $prefix]
  39.         if {! [lempty $strLine]} {
  40.         if $first {
  41.             set structure $strLine
  42.         } else {
  43.             set structure "$structure\n$strLine"
  44.         }
  45.         set first 0
  46.         }
  47.     }
  48.     }
  49.  
  50.     return $structure
  51. }
  52.  
  53. method GenItemProp::match {this fileTypes fileVersion} {
  54.  
  55.     if {[lsearch $fileTypes [[$fileVersion file] type]] == -1} {
  56.     return 0
  57.     }
  58.     return 1
  59. }
  60.  
  61. method GenItemProp::getStructureLines {this fileVersion itemType componentType labelType properties first {prefix ""}} {
  62.  
  63.     set indent "+"
  64.     set line ""
  65.     set lines ""
  66.  
  67.     # get all the items with given componentType and itemType
  68.  
  69.     if {![$fileVersion isA Diagram]} {
  70.     return $lines
  71.     }
  72.  
  73.     set confV [[$this document] configVersion]
  74.     foreach comp [$fileVersion components] {
  75.     if {[$comp type] != $componentType} continue
  76.  
  77.     set lbls [$comp labels]
  78.     if [$comp isA Connector] {
  79.         # special: for connectors look at segments
  80.         foreach segm [$comp segments] {
  81.         set lbls [concat $lbls [$segm labels]]
  82.         }
  83.     }
  84.  
  85.     foreach label $lbls {
  86.         if {[$label type] != $labelType} continue
  87.  
  88.         foreach itemRef [$label itemRefs] {
  89.         set item [$itemRef item]
  90.         if {[$item type] != $itemType} continue
  91.  
  92.         set workItem [$fileVersion findDeclaration $item $confV]
  93.         set name [$workItem qualifiedName :]
  94.  
  95.         # add propertieNames to get unique names
  96.         # max 2 prop names
  97.         if {$properties != "*"} {
  98.             set prCount 0
  99.             foreach prop $properties {
  100.             if {$prCount > 1} {
  101.                 break
  102.             }
  103.             incr prCount
  104.             append name "_$prop"
  105.             }
  106.         }
  107.  
  108.         # skip phaseRef workItems
  109.         if {[$workItem scope] == "scopePhaseRef"} continue
  110.  
  111.         # skip when there are no properties
  112.         set prop [$workItem properties]
  113.         if {[$prop isNil] || [lempty [$prop properties]]} continue
  114.         if $first {
  115.             set first 0
  116.         } else {
  117.             set indent "="
  118.         }
  119.         set itemKeeper [$workItem owner]
  120.         if [$itemKeeper isA SystemVersion] {
  121.             set keeper [[$itemKeeper system] name]
  122.         } else {
  123.             set keeper [[$itemKeeper file] name]
  124.         }
  125.         set line "${keeper}_${itemType}_$name | $indent | | Itemprop \
  126.             | | | $fileVersion | $workItem | $properties | Itemprop"
  127.         if {$prefix != ""} {
  128.             set line "${prefix}_$line"
  129.         }
  130.         set lines "$lines\n$line"
  131.         }
  132.     }
  133.     }
  134.  
  135.     return $lines
  136. }
  137.  
  138. # Do not delete this line -- regeneration end marker
  139.  
  140.