home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / mtitem.tcl < prev    next >
Text File  |  1997-11-13  |  4KB  |  161 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)mtitem.tcl    /main/titanic/3
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)mtitem.tcl    /main/titanic/3   13 Nov 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. require "mergeobjec.tcl"
  15.  
  16. Class MTItem : {MergeObject} {
  17.     constructor
  18.     method destructor
  19.     method hasConflict
  20.     method getInfo
  21.     method merge
  22.     method import
  23.     method copyProperties
  24.     method copy
  25.     method overwrite
  26. }
  27.  
  28. constructor MTItem {class this name fromRepObj toRepObj} {
  29.     set this [MergeObject::constructor $class $this $name $fromRepObj $toRepObj]
  30.     # Start constructor user section
  31.     # End constructor user section
  32.     return $this
  33. }
  34.  
  35. method MTItem::destructor {this} {
  36.     # Start destructor user section
  37.     # End destructor user section
  38.     $this MergeObject::destructor
  39. }
  40.  
  41. method MTItem::hasConflict {this} {
  42.  
  43.     set to [$this toRepObj]
  44.     set from [$this fromRepObj]
  45.  
  46.     # check if 'to' element does not exist
  47.     if {$to == ""} {
  48.         return 0
  49.     }
  50.  
  51.     # check if the scope is identical
  52.     set fromScope [$from scope]
  53.     set toScope [$to scope]
  54.     if {$fromScope == $toScope} {
  55.         return 0
  56.     }
  57.  
  58.     # No conflict when importing and
  59.     # there is no definition of the item in the target itemkeeper
  60.     if {[.main import] &&
  61.         $toScope == "scopePhaseRef" &&
  62.         [[[$to owner] findDefinition [$to item] [.main toConfig]] isNil]} {
  63.         return 0
  64.     }
  65.  
  66.     # now it's clear there's a conflict
  67.     return 1
  68. }
  69.  
  70. method MTItem::getInfo {this} {
  71.  
  72.     set info ""
  73.  
  74.     # show the scopes
  75.     lappend info "Source scope"
  76.     lappend info [[$this fromRepObj] scope]
  77.     if {[$this toRepObj] != ""} {
  78.         lappend info "Target scope"
  79.         lappend info [[$this toRepObj] scope]
  80.     }
  81.  
  82.     return $info
  83. }
  84.  
  85. method MTItem::merge {this} {
  86.  
  87.     if ![$this hasConflict] {
  88.         return [$this copy]
  89.     }
  90.  
  91.     # conflicting items can not be merged
  92.     return 0
  93.  
  94. }
  95.  
  96. method MTItem::import {this} {
  97.  
  98.     if ![$this hasConflict] {
  99.         return [$this copy]
  100.     }
  101.  
  102.     return [$this copyProperties]
  103. }
  104.  
  105. method MTItem::copyProperties {this} {
  106.  
  107.     set fromProps [[$this fromRepObj] properties]
  108.     set toProps [[$this toRepObj] properties]
  109.  
  110.     # check if properties exists (PhaseRef)
  111.     if {![$fromProps isNil] && ![$toProps isNil]} {
  112.         foreach prop [$fromProps properties] {
  113.             $toProps setProperty [$prop name] [$prop value]
  114.         }
  115.     }
  116.  
  117.     return 1
  118. }
  119.  
  120. method MTItem::copy {this} {
  121.  
  122.     set parentObj [MTProcs::makeToWorking [$this parent]]
  123.     if {$parentObj == ""} {
  124.         return 0
  125.     }
  126.  
  127.     set workItem [$this fromRepObj]
  128.     set newWorkItem [$parentObj declareItem [$workItem item] \
  129.             [$workItem scope]]
  130.     if [$newWorkItem isNil] {
  131.         return 0
  132.     }
  133.  
  134.     # update rep information
  135.     $this toRepObj $newWorkItem
  136.  
  137.     # copy the properties too
  138.     return [$this copyProperties]
  139. }
  140.  
  141. method MTItem::overwrite {this} {
  142.  
  143.     # change scope of item
  144.  
  145.     set itemKeeper [[$this parent] toRepObj]
  146.     set fromWorkItem [$this fromRepObj]
  147.  
  148.     if {[$fromWorkItem scope] == "scopePhaseRef" ||
  149.         [$fromWorkItem scope] == "scopePhaseDef"} {
  150.         $itemKeeper export [[$this toRepObj] item] 1
  151.     } else {
  152.         $itemKeeper export [[$this toRepObj] item] 0
  153.     }
  154.  
  155.     # copy the properties too
  156.     return [$this copyProperties]
  157. }
  158.  
  159. # Do not delete this line -- regeneration end marker
  160.  
  161.