home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / t_component.tcl < prev    next >
Text File  |  1996-11-22  |  10KB  |  433 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #    (c) Cadre Technologies Inc. 1995
  4. #
  5. #    File:        @(#)t_component.tcl    /main/hindenburg/1
  6. #    Author:        Challenger
  7. #    Description:    Implementation of old Report Writer table Component
  8. #
  9. #---------------------------------------------------------------------------
  10. # SccsId = @(#)t_component.tcl    /main/hindenburg/1    22 Nov 1996    Copyright 1995 Cadre Technologies Inc.
  11.  
  12.  
  13. constructor ComponentRecord {class this configVersion phaseVersion \
  14.                     systemVersion component} {
  15.     set this [GCObject::constructor $class $this]
  16.  
  17.     set system [$systemVersion system]
  18.     set phase [$phaseVersion phase]
  19.     set fileVersion [$component diagram]
  20.     set file [$fileVersion file]
  21.  
  22.     $this _component $component
  23.     $this _configVersion $configVersion
  24.     $this _fileVersion $fileVersion
  25.     $this _item ""
  26.     $this _workitem ""
  27.     $this _from_role ""
  28.     $this _to_role ""
  29.     $this _qual_label ""
  30.     $this _type_label ""
  31.     $this _free_label ""
  32.  
  33.     $this project_version [$configVersion versionNumber]
  34.     $this phase_version [$phaseVersion versionNumber]
  35.     $this phase_id [$phase identity]
  36.     $this system_version [$systemVersion versionNumber]
  37.     $this system_id [$system identity]
  38.     $this file_version [$fileVersion versionNumber]
  39.     $this file_id [$file identity]
  40.     $this file_type [$file type]
  41.  
  42.     $this component_id [$component identity]
  43.  
  44.     switch [$component objType] {
  45.     Connector    { $this component_kind connector }
  46.     Node        { $this component_kind node }
  47.     ConnectedNode    { $this component_kind noco }
  48.     Row        { $this component_kind row }
  49.     Cell        { $this component_kind cell }
  50.     default        { $this component_kind unknown }
  51.     }
  52.  
  53.     $this component_type [short2longname [$component type]]
  54.     set type [$component type]
  55.     $this short_type $type
  56.  
  57.     switch $type {
  58.     etd_object    { $this _itemlabel type }
  59.     etd_initiator    { $this _itemlabel type }
  60.     etd_event    { $this _itemlabel event }
  61.     transition    { $this _itemlabel event }
  62.     event_msg    { $this _itemlabel event }
  63.     default        { $this _itemlabel name }
  64.     }
  65.  
  66.     set labels [$this labels]
  67.     if ![llength $labels] {
  68.     $this name ""
  69.     } else {
  70.     $this name [query -s value "type == [$this _itemlabel]" $labels]
  71.     }
  72.  
  73.     $this index ""
  74.     $this data_part "unknown"
  75.     $this sequence_nr -1
  76.     $this cardinality ""
  77.     $this prompt "unknown"
  78.  
  79.     return $this
  80. }
  81.  
  82.  
  83. method ComponentRecord::item_id {this} {
  84.     set item [$this item]
  85.     if [$item isNil] {
  86.     return 0
  87.     }
  88.  
  89.     return [$item identity]
  90. }
  91.  
  92.  
  93. method ComponentRecord::item_type {this} {
  94.     set item [$this item]
  95.     if [$item isNil] {
  96.     return 0
  97.     }
  98.  
  99.     return [short2longname [$item type]]
  100. }
  101.  
  102.  
  103. method ComponentRecord::scope {this} {
  104.     set wi [$this workitem]
  105.     if [$wi isNil] {
  106.     return 0
  107.     }
  108.  
  109.     return [old2newscope [$wi scope]]
  110. }
  111.  
  112.  
  113. method ComponentRecord::qualifier {this} {
  114.     set item [$this item]
  115.     if [$item isNil] {
  116.     return 0
  117.     }
  118.     set qual [$item qualifier]
  119.     if [$qual isNil] {
  120.     return 0
  121.     }
  122.  
  123.     return [$qual name]
  124. }
  125.  
  126.  
  127. method ComponentRecord::qualifier_id {this} {
  128.     set item [$this item]
  129.     if [$item isNil] {
  130.     return 0
  131.     }
  132.     set qual [$item qualifier]
  133.     if [$qual isNil] {
  134.     return 0
  135.     }
  136.  
  137.     return [$qual identity]
  138. }    
  139.  
  140.  
  141. method ComponentRecord::data_type {this} {
  142.     return [[$this workitem] getPropertyValue data_type]
  143. }
  144.  
  145.  
  146. method ComponentRecord::from_role {this} {
  147.     if { [$this _from_role] == ""} {
  148.     set cir [$this findCompItemRef role_start de]
  149.     if ![$cir isNil] {
  150.         $this _from_role [$cir item]
  151.     } else {
  152.         $this _from_role [ORB::nil]
  153.     }
  154.     }
  155.  
  156.     if [[$this _from_role] isNil] {
  157.     return 0
  158.     }
  159.  
  160.     return [[$this _from_role] name]
  161. }
  162.  
  163.  
  164. method ComponentRecord::from_role_id {this} {
  165.     # fill _from_role by calling from_role
  166.     $this from_role
  167.  
  168.     if [[$this _from_role] isNil] {
  169.     return 0
  170.     }
  171.  
  172.     return [[$this _from_role] identity]
  173. }
  174.  
  175.  
  176. method ComponentRecord::to_role {this} {
  177.     if { [$this _to_role] == ""} {
  178.     set cir [$this findCompItemRef role_end de]
  179.     if ![$cir isNil] {
  180.         $this _to_role [$cir item]
  181.     } else {
  182.         $this _to_role [ORB::nil]
  183.     }
  184.     }
  185.  
  186.     if [[$this _to_role] isNil] {
  187.     return 0
  188.     }
  189.  
  190.     return [[$this _to_role] name]
  191. }
  192.  
  193.  
  194. method ComponentRecord::to_role_id {this} {
  195.     # fill _to_role by calling to_role
  196.     $this to_role
  197.  
  198.     if [[$this _to_role] isNil] {
  199.     return 0
  200.     }
  201.  
  202.     return [[$this _to_role] identity]
  203. }
  204.  
  205.  
  206. method ComponentRecord::qual_label {this} {
  207.     if { [$this _qual_label] == ""} {
  208.     set cir [$this findCompItemRef qualifier de]
  209.     if ![$cir isNil] {
  210.         $this _qual_label [$cir item]
  211.     } else {
  212.         $this _qual_label [ORB::nil]
  213.     }
  214.     }
  215.  
  216.     if [[$this _qual_label] isNil] {
  217.     return 0
  218.     }
  219.  
  220.     return [[$this _qual_label] name]
  221. }
  222.  
  223.  
  224. method ComponentRecord::qual_label_id {this} {
  225.     # fill _qual_label by calling qual_label
  226.     $this qual_label
  227.  
  228.     if [[$this _qual_label] isNil] {
  229.     return 0
  230.     }
  231.  
  232.     return [[$this _qual_label] identity]
  233. }
  234.  
  235.  
  236. method ComponentRecord::type_label {this} {
  237.     if { [$this _type_label] == ""} {
  238.     if { [$this short_type] != "link_attrib" } {
  239.         $this _type_label [ORB::nil]
  240.         return 0
  241.     }
  242.     set cir [$this findCompItemRef type cl]
  243.     if ![$cir isNil] {
  244.         $this _type_label [$cir item]
  245.     } else {
  246.         $this _type_label [ORB::nil]
  247.     }
  248.     }
  249.  
  250.     if [[$this _type_label] isNil] {
  251.     return 0
  252.     }
  253.  
  254.     return [[$this _type_label] name]
  255. }
  256.  
  257.  
  258. method ComponentRecord::type_label_id {this} {
  259.     # fill _type_label by calling type_label
  260.     $this type_label
  261.  
  262.     if [[$this _type_label] isNil] {
  263.     return 0
  264.     }
  265.  
  266.     return [[$this _type_label] identity]
  267. }
  268.  
  269.  
  270. method ComponentRecord::free_label {this} {
  271.     if { [[$this _component] objType] != "Cell" } {
  272.     return 0
  273.     }
  274.  
  275.     if { [$this _free_label] == "" } {
  276.     set label [lindex [[$this _component] labels] 0]
  277.     if { $label == "" } {
  278.         return 0
  279.     }
  280.  
  281.     $this _free_label [$label value]
  282.     }
  283.  
  284.     return [$this _free_label]
  285. }
  286.  
  287.  
  288. method ComponentRecord::from_id {this} {
  289.     if { [[$this _component] objType] != "Connector" } {
  290.     return 0
  291.     }
  292.     return [query -s _component.from.identity $this]
  293. }
  294.  
  295.  
  296. method ComponentRecord::to_id {this} {
  297.     if { [[$this _component] objType] != "Connector" } {
  298.     return 0
  299.     }
  300.     return [query -s _component.to.identity $this]
  301. }
  302.  
  303.  
  304. method ComponentRecord::related_id {this} {
  305.     if { [[$this _component] objType] != "ConnectedNode" } {
  306.     return 0
  307.     }
  308.     return [query -s _component.from.identity $this]
  309. }
  310.  
  311.  
  312. method ComponentRecord::row_id {this} {
  313.     if { [[$this _component] objType] != "Cell" } {
  314.     return 0
  315.     }
  316.     return [query -s _component.row.identity $this]
  317. }
  318.  
  319.  
  320. method ComponentRecord::key {this} {
  321.     if { [[$this _component] getPropertyValue COMP_KEY] == "1" } {
  322.     return 1
  323.     } else {
  324.     return 0
  325.     }
  326. }
  327.  
  328.  
  329. #
  330. # Extra methods
  331. #
  332. method ComponentRecord::labels {this} {
  333.     if { [$this _labels] == "" } {
  334.     set component [$this _component]
  335.     if { [$component isA Connector] &&
  336.          [$component type] != "transition" } {
  337.         $this _labels [query $component.segments.labels]
  338.     } else {    
  339.         $this _labels [$component labels]
  340.     }
  341.     }
  342.  
  343.     return [$this _labels]
  344. }
  345.  
  346.  
  347. method ComponentRecord::item {this} {
  348.     if { [$this _item] == ""} {
  349.     set comptype [comptype2itemtype [$this short_type]]
  350.     set cir [$this findCompItemRef [$this _itemlabel] $comptype]
  351.     if ![$cir isNil] {
  352.         $this _item [$cir item]
  353.     } else {
  354.         $this _item [ORB::nil]
  355.     }
  356.     }
  357.  
  358.     return [$this _item]
  359. }
  360.  
  361.  
  362. method ComponentRecord::workitem {this} {
  363.     if { [$this _workitem] == "" } {
  364.     set item [$this item]
  365.     if [$item isNil] {
  366.         return [ORB::nil]
  367.     }
  368.     set name [$item name]
  369.     set type [$item type]
  370.     set ctx [$this _configVersion]
  371.     $this _workitem [[$this _fileVersion] findDeclaration $name $type $ctx]
  372.     }
  373.  
  374.     return [$this _workitem]
  375. }
  376.  
  377.  
  378. method ComponentRecord::findCompItemRef {this labelname itemtype} {
  379.     set complabels [$this labels]
  380.     set result ""
  381.     if ![llength $complabels] {
  382.     return [ORB::nil]
  383.     }
  384.     set complabel [query "type == $labelname" $complabels]
  385.     if { $complabel == "" } {
  386.     # check name_type label
  387.     if { $labelname == "name" || $labelname == "type" } {
  388.         set complabel [query "type == name_type" $complabels]
  389.         set short_type [$this short_type]
  390.         if ![info exists labelPartName($short_type,name_type,$labelname)] {
  391.         return [ORB::nil]
  392.         }
  393.         set it $labelPartName($short_type,name_type,$labelname)
  394.         set result [query "item != [ORB::nil] && item.type == $it" \
  395.                   $complabels.itemRefs]
  396.     }
  397.     if ![lempty $result] {
  398.         return [lindex $result 0]
  399.     }
  400.     return [ORB::nil]
  401.     }
  402.     set itemrefs [$complabel itemRefs]
  403.     if { $itemrefs == "" } {
  404.     return [ORB::nil]
  405.     }
  406.     set result [lindex [query "item.isNil == 0 && item.type == $itemtype" \
  407.                   $itemrefs] 0]
  408.     if { $result == "" } {
  409.     return [ORB::nil]
  410.     }
  411.  
  412.     return $result
  413. }
  414.  
  415.  
  416. global labelPartName
  417.  
  418. set labelPartName(attribute,name_type,name)    de
  419. set labelPartName(attribute,name_type,type)    cl
  420. set labelPartName(method,name_type,name)    pe
  421. set labelPartName(method,name_type,type)    cl
  422. set labelPartName(parameter,name_type,name)    de
  423. set labelPartName(parameter,name_type,type)    cl
  424. set labelPartName(link_attrib,name_type,name)    de
  425. set labelPartName(link_attrib,name_type,type)    cl
  426.  
  427. set labelPartName(etd_object,name_type,name)    de
  428. set labelPartName(etd_object,name_type,type)    cl
  429. set labelPartName(etd_initiator,name_type,name)    de
  430. set labelPartName(etd_initiator,name_type,type)    cl
  431. set labelPartName(etd_event,event,name)        pe
  432. set labelPartName(etd_event,event,type)        de
  433.