home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / drslinkabl.tcl < prev    next >
Text File  |  1997-05-23  |  5KB  |  169 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)drslinkabl.tcl    /main/hindenburg/12
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)drslinkabl.tcl    /main/hindenburg/12   23 May 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. require "drslevelob.tcl"
  15.  
  16. #Class DrsLinkableObject : {DrsLevelObject} {
  17. #    constructor
  18. #    method destructor
  19. #    method install
  20. #    method isIntegrated
  21. #    method saveReference
  22. #    method linkToPrevPhase
  23. #    attribute locked
  24. #}
  25.  
  26. constructor DrsLinkableObject {class this level levelVersion pLevel pVersion} {
  27.     set this [DrsLevelObject::constructor $class $this $level $levelVersion $pLevel $pVersion]
  28.     # Start constructor user section
  29.     $this locked 0
  30.     # End constructor user section
  31.     return $this
  32. }
  33.  
  34. method DrsLinkableObject::destructor {this} {
  35.     # Start destructor user section
  36.     # End destructor user section
  37.     $this DrsLevelObject::destructor
  38. }
  39.  
  40. method DrsLinkableObject::lock {this} {
  41.     set propObj [$this getPropertyObject]
  42.         set intPhase [$propObj getPropertyValue ${FORMALMODULE}_Phase]
  43.     set currPhase [$this getPhase]
  44.         set currPhaseName [$currPhase name]
  45.         if {$intPhase == $currPhaseName} {
  46.         set intProject [$propObj getPropertyValue ${FORMALMODULE}_Project]
  47.         set currProjName [[$currPhase project] name]
  48.         if {[llength $intProject] && $intProject == $currProjName} {
  49.         # The current linkable object is already available in DOORS
  50.         return 1
  51.         }
  52.     }
  53.     set levelV [$this getLevelV]
  54.         if {[$levelV isA FileVersion] && [$levelV status] != "working"} {
  55.             return 0
  56.         }
  57.     set thisLevel [$this level]
  58.         if [$thisLevel isA WorkItem] {
  59.             set owner [$thisLevel owner]
  60.             if {[$owner status] != "working"} {
  61.                 return 0
  62.             }
  63.         }
  64.         set cc [ClientContext::global]
  65.         set currentFile [$cc currentFile]
  66.     $this locked 1
  67.     if {$levelV != $currentFile } {
  68.         # don't lock the current file if in edit mode
  69.         $levelV edit
  70.         $levelV quit
  71.         }
  72.     return 1
  73. }
  74.  
  75. method DrsLinkableObject::isIntegrated {this doorsObjId} {
  76.     if ![llength $doorsObjId] {
  77.         return 0
  78.     }
  79.  
  80.     set level [$this getPropertyObject]
  81.     set intPhase [$level getPropertyValue ${FORMALMODULE}_Phase]
  82.     if ![llength $intPhase] {
  83.         return 0
  84.     }
  85.  
  86.     set intProject [$level getPropertyValue ${FORMALMODULE}_Project]
  87.     if ![llength $intProject] {
  88.         return 0
  89.     }
  90.  
  91.     set currPhase [$this getPhase]
  92.     set currPhaseName [$currPhase name]
  93.     if {$intPhase != $currPhaseName} {
  94.         return 0
  95.     }
  96.  
  97.     set currProjName [[$currPhase project] name]
  98.     if {$intProject != $currProjName} {
  99.         set timeStampObj [$this getTimeStampObject]
  100.         set currTime [$timeStampObj updateTime]
  101.         set intTime [$level getPropertyValue ${FORMALMODULE}_TIMESTAMP]
  102.         if {$currTime >  [expr $intTime + 5]} {
  103.         $level setProperty ${FORMALMODULE}_Project $currProjName
  104.         return 0
  105.         }
  106.     }
  107.     return 1
  108. }
  109.  
  110. method DrsLinkableObject::saveReference {this level drsRef parOTVers selIts} {
  111.     $this DrsLevelObject::saveReference $level $drsRef $parOTVers $selIts
  112.     set level [$this getPropertyObject]
  113.     set phase [$this getPhase]
  114.     set phaseName [$phase name]
  115.     set project [$phase project]
  116.     set projectName [$project name]
  117.     $level setProperty ${FORMALMODULE}_Phase $phaseName
  118.     $level setProperty ${FORMALMODULE}_Project $projectName
  119.     if ![$this locked] {
  120.         return
  121.     }
  122.     set levelV [$this getLevelV]
  123.     if [llength $levelV] {
  124.         # only file versions and system versions
  125.         set drsRef [lindex $drsRef 0]
  126.         $levelV setProperty $FORMALMODULE $drsRef
  127.         $levelV setProperty ${FORMALMODULE}_Phase $phaseName
  128.         $levelV setProperty ${FORMALMODULE}_Project $projectName
  129.     }
  130. }
  131.  
  132. method DrsLinkableObject::linkToPrevPhase {this levelVObjId newDoorsObject} {
  133.         set levelV [$this getLevelV]
  134.         set linkedInPhase [$levelV getPropertyValue ${FORMALMODULE}_Phase]
  135.         set phase [$this getPhase]
  136.         set phaseName [$phase name]
  137.         if {$phaseName != "Implementation" && $linkedInPhase == $phaseName} {
  138.             return
  139.         }
  140.     set projectName [[$phase project] name]
  141.         set linkedInProject [$levelV getPropertyValue ${FORMALMODULE}_Project]
  142.         if {$phaseName != "Implementation" && $linkedInProject != $projectName} {
  143.             return
  144.         }
  145.     
  146.         set dxlCommand [$this dxlCommand]
  147.         set prevPhase [$phase previous]
  148.         if ![$prevPhase isNil] {
  149.         #check whether to link from previous to current
  150.         if {$phaseName == "Implementation" || [$prevPhase name] == $linkedInPhase} {
  151.         set prevPhaseObj [$dxlCommand doorsObjectFind  $levelVObjId]
  152.         $dxlCommand doorsObjectCreateLink $newDoorsObject $prevPhaseObj\
  153.             [m4_var get M4_doors_trace_link_module]
  154.         }
  155.         }
  156.         set nextPhase [$phase next]
  157.     if ![$nextPhase isNil] {
  158.         #check whether to link from current to next
  159.         if {[$nextPhase name] == $linkedInPhase} {
  160.         set nextPhaseObj [$dxlCommand doorsObjectFind  $levelVObjId]
  161.         $dxlCommand doorsObjectCreateLink $nextPhaseObj $newDoorsObject\
  162.             [m4_var get M4_doors_trace_link_module]
  163.         }
  164.     }
  165. }
  166.  
  167. # Do not delete this line -- regeneration end marker
  168.  
  169.