home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / drslinkabl.tcl < prev    next >
Text File  |  1997-09-23  |  6KB  |  169 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)drslinkabl.tcl    /main/titanic/5
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)drslinkabl.tcl    /main/titanic/5   23 Sep 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 isIntegrated
  20.     method lock
  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::isIntegrated {this doorsObjId} {
  41.     if ![llength $doorsObjId] {
  42.         return 0
  43.     }
  44.  
  45.     set level [$this getPropertyObject]
  46.     set intPhase [$level getPropertyValue ${DrsDriver::FORMALMODULE}_Phase]
  47.     if ![llength $intPhase] {
  48.         return 0
  49.     }
  50.  
  51.     set intProject [$level getPropertyValue ${DrsDriver::FORMALMODULE}_Project]
  52.     if ![llength $intProject] {
  53.         return 0
  54.     }
  55.  
  56.     set currPhase [$this getPhase]
  57.     set currPhaseName [$currPhase name]
  58.     if {$intPhase != $currPhaseName} {
  59.         return 0
  60.     }
  61.  
  62.     set currProjName [[$currPhase project] name]
  63.     if {$intProject != $currProjName} {
  64.         set timeStampObj [$this getTimeStampObject]
  65.         set currTime [$timeStampObj updateTime]
  66.         set intTime [$level getPropertyValue ${DrsDriver::FORMALMODULE}_TIMESTAMP]
  67.         if {$currTime >  [expr $intTime + 5]} {
  68.         $level setProperty ${DrsDriver::FORMALMODULE}_Project $currProjName
  69.         return 0
  70.         }
  71.     }
  72.     return 1
  73. }
  74.  
  75. method DrsLinkableObject::lock {this} {
  76.     set propObj [$this getPropertyObject]
  77.         set intPhase [$propObj getPropertyValue ${DrsDriver::FORMALMODULE}_Phase]
  78.     set currPhase [$this getPhase]
  79.         set currPhaseName [$currPhase name]
  80.         if {$intPhase == $currPhaseName} {
  81.         set intProject [$propObj getPropertyValue ${DrsDriver::FORMALMODULE}_Project]
  82.         set currProjName [[$currPhase project] name]
  83.         if {[llength $intProject] && $intProject == $currProjName} {
  84.         # The current linkable object is already available in DOORS
  85.         return 1
  86.         }
  87.     }
  88.     set levelV [$this getLevelV]
  89.         if {[$levelV isA FileVersion] && [$levelV status] != "working"} {
  90.             return 0
  91.         }
  92.     set thisLevel [$this level]
  93.         if [$thisLevel isA WorkItem] {
  94.             set owner [$thisLevel owner]
  95.             if {[$owner status] != "working"} {
  96.                 return 0
  97.             }
  98.         }
  99.         set cc [ClientContext::global]
  100.         set currentFile [$cc currentFile]
  101.     $this locked 1
  102.     if {$levelV != $currentFile } {
  103.         # don't lock the current file if in edit mode
  104.         $levelV edit
  105.         $levelV quit
  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 ${DrsDriver::FORMALMODULE}_Phase $phaseName
  118.     $level setProperty ${DrsDriver::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 ${DrsDriver::FORMALMODULE} $drsRef
  127.         $levelV setProperty ${DrsDriver::FORMALMODULE}_Phase $phaseName
  128.         $levelV setProperty ${DrsDriver::FORMALMODULE}_Project $projectName
  129.     }
  130. }
  131.  
  132. method DrsLinkableObject::linkToPrevPhase {this levelVObjId newDoorsObject} {
  133.         set levelV [$this getLevelV]
  134.         set linkedInPhase [$levelV getPropertyValue ${DrsDriver::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 ${DrsDriver::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.