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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)installman.tcl    /main/hindenburg/4
  6. #      Author:         <generated>
  7. #      Description:    VCM integration file
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)installman.tcl    /main/hindenburg/4   21 Mar 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14.  
  15. # Generic install manager that provides functionality
  16. # to install and uninstall customization files. It also
  17. # provides a main window with a message area.
  18.  
  19. Class InstallManager : {GCObject} {
  20.     constructor
  21.     method destructor
  22.     method gotoLevel
  23.     method validFiles
  24.     method showMessage
  25.     method installCustomFiles
  26.     method unInstallCustomFiles
  27.     method customFileSet
  28.     method addCustomFile
  29.     method removeCustomFile
  30.     attribute installWindow
  31.     attribute messageArea
  32.     attribute _customFileSet
  33. }
  34.  
  35. constructor InstallManager {class this} {
  36.     set this [GCObject::constructor $class $this]
  37.     $this _customFileSet [List new]
  38.     # Start constructor user section
  39.     $this installWindow [MainWindow new .main -closed { exit }]
  40.     $this messageArea [MessageArea new .main.messageArea]
  41.     interface DlgRow .main.row {
  42.     sizeEqual 1
  43.     index 0
  44.     DlgColumn col {
  45.         spaceType EVEN
  46.         Image image {
  47.         pixmap wmt
  48.         }
  49.     }
  50.     }
  51.     # End constructor user section
  52.     return $this
  53. }
  54.  
  55. method InstallManager::destructor {this} {
  56.     # Start destructor user section
  57.     # End destructor user section
  58. }
  59.  
  60.  
  61. # Go to the specified level. Level is 
  62. # specified with names only.
  63. #
  64. method InstallManager::gotoLevel {this level} {
  65.     #level: project_name/config_name/phase_name/system_name
  66.     set cc [ClientContext::global]
  67.     while { [$cc currentLevel] != "Corporate" } {
  68.     $cc upLevel
  69.     }
  70.  
  71.     set levelComponents [split $level "/"]
  72.     set project [lindex $levelComponents 0]
  73.     $cc downLevel $project
  74.  
  75.     if { [llength $levelComponents] ==  1 } {
  76.     return
  77.     }
  78.  
  79.     # find working config version with specified name
  80.     set configName [lindex $levelComponents 1]
  81.     foreach configVersion [[$cc currentProject] configVersions] {
  82.     if { ([$configVersion status] == "working") && \
  83.         ([[$configVersion config] name] == $configName) } {
  84.         set version [$configVersion versionNumber]
  85.         $cc downLevel "$configName:$version"
  86.         break
  87.     }
  88.     }
  89.  
  90.     if { [llength $levelComponents] ==  2 } {
  91.     return
  92.     }    
  93.  
  94.      # goto phase name, assume name = type
  95.     set phaseName [lindex $levelComponents 2]
  96.     $cc downLevel "$phaseName.$phaseName"
  97.  
  98.     if { [llength $levelComponents] ==  2 } {
  99.     return
  100.     }    
  101.  
  102.     # goto system. If type 'system' fails, try 'document'
  103.     set systemName [lindex $levelComponents 3]
  104.     if [catch { $cc downLevel "$systemName.system" }] {
  105.     $cc downLevel "$systemName.document"
  106.     }
  107. }
  108.  
  109.  
  110. # Return subset of the customFile association:
  111. # files that are valid for the specified level.
  112. #
  113. method InstallManager::validFiles {this level} {
  114.     set currentLevel [[ClientContext::global] currentLevel]
  115.     set fileList {}
  116.     [$this customFileSet] foreach customFile {
  117.     set validLevels [$customFile level]
  118.     if { $validLevels != "" } {
  119.         if { ![regexp $currentLevel $validLevels] } {
  120.         continue
  121.         }
  122.     }
  123.     lappend fileList $customFile
  124.     }
  125.     return $fileList
  126. }
  127.  
  128.  
  129. # Show the given message in the message area. Invoked for each install
  130. # or uninstall action on a file.
  131. #
  132. method InstallManager::showMessage {this message} {
  133.     [$this messageArea] message $message
  134. }
  135.  
  136.  
  137. # Installs the files in the customFileList at the given
  138. # level, discarding any files that are not 
  139. # appropriate for this level.
  140. #
  141. method InstallManager::installCustomFiles {this level} {
  142.     $this gotoLevel $level
  143.  
  144.     foreach customFile [$this validFiles $level] {
  145.     $this showMessage "Installing [$customFile name] [$customFile type]\
  146.         at level $level..."
  147.     $customFile install
  148.     }
  149. }
  150.  
  151.  
  152. # Uninstalls the files in customFile list from the
  153. # given level.
  154. #
  155. method InstallManager::unInstallCustomFiles {this level} {
  156.     $this gotoLevel $level
  157.  
  158.     foreach customFile [$this validFiles $level] {
  159.     $this showMessage "Uninstalling [$customFile name] [$customFile type]\
  160.         at level $level..."
  161.     $customFile unInstall
  162.     }
  163. }
  164.  
  165. # Do not delete this line -- regeneration end marker
  166.  
  167. method InstallManager::customFileSet {this} {
  168.     return [$this _customFileSet]
  169. }
  170.  
  171. method InstallManager::addCustomFile {this newCustomFile} {
  172.     [$this _customFileSet] append $newCustomFile
  173.     $newCustomFile _manager $this
  174. }
  175.  
  176. method InstallManager::removeCustomFile {this oldCustomFile} {
  177.     $oldCustomFile _manager ""
  178.     [$this _customFileSet] removeValue $oldCustomFile
  179. }
  180.  
  181.  
  182.