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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)repchanged.tcl    /main/hindenburg/19
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)repchanged.tcl    /main/hindenburg/19   29 Nov 1996 Copyright 1996 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. require "repdbdialo.tcl"
  15.  
  16. Class RepChangeDialog : {RepDbDialog} {
  17.     constructor
  18.     method destructor
  19.     method setFields
  20.     method getFields
  21.     method popUp
  22.     method ok
  23.     method checkOk
  24.     method shutdownServers
  25.     method browseDir
  26.     attribute origName
  27.     attribute origDir
  28.     attribute nameInDb
  29.     attribute serversShutdown
  30.     attribute name
  31.     attribute dir
  32.     attribute moveDir
  33.     attribute dirBrowser
  34. }
  35.  
  36. constructor RepChangeDialog {class this name view} {
  37.     set this [RepDbDialog::constructor $class $this $name $view]
  38.     # Start constructor user section
  39.  
  40.         set rep [[$this view] rep]
  41.         set name [$rep currentName]
  42.  
  43.     $this origName $name
  44.     $this serversShutdown 0
  45.  
  46.         $this config \
  47.             -title "Change Repository '$name'" \
  48.             -okPressed { busy { %this ok } } \
  49.             -autoPopDown 0 \
  50.         -helpPressed { [%this view] helpOnName changeRepositoryName }
  51.  
  52.         interface DlgColumn $this.gui {
  53.         verStretchFactor 0
  54.             NamedGroup change {
  55.                 label "Change Repository"
  56.                 DlgColumn c {
  57.             verStretchFactor 0
  58.                     Label nl { text "Name" }
  59.                     SingleLineText name { }
  60.             Label dl {
  61.             text "Parent Directory"
  62.             alignment LEFT
  63.             horStretchFactor 100
  64.             }
  65.             DlgRow r {
  66.             spaceType NONE
  67.             DlgColumn d {
  68.                 spaceType EVEN
  69.                 horStretchFactor 100
  70.                 SingleLineText dir {
  71.                 columnCount 30
  72.                 horStretchFactor 100
  73.                 }
  74.             }
  75.                     }
  76.                     CheckButton move {
  77.                         label "Move repository directory to correspond with name"
  78.                         state 1
  79.                     }
  80.                 }
  81.             }
  82.             NamedGroup db {
  83.                 label "Database"
  84.                 DlgColumn attr {
  85.             verStretchFactor 0
  86.                 }
  87.             }
  88.         }
  89.  
  90.         if !$win95 {
  91.         interface DlgColumn $this.gui.change.c.r.b {
  92.         spaceType EVEN
  93.         horStretchFactor 0
  94.         PushButton browse {
  95.             horStretchFactor 0
  96.             label "Browse..."
  97.         }
  98.         }
  99.         $this.gui.change.c.r.b.browse activated "$this browseDir"
  100.         }
  101.  
  102.         PushButton new $this.shutdown \
  103.             -label "Shutdown" \
  104.             -activated "busy { $this shutdownServers }"
  105.  
  106.         $this name $this.gui.change.c.name
  107.         $this moveDir $this.gui.change.c.move
  108.         $this dir $this.gui.change.c.r.d.dir
  109.  
  110.     [$this name] text $name
  111.         [$this name] textModified "$this checkOk"
  112.         [$this dir] textModified "$this checkOk"
  113.  
  114.         $this createDbInterface $this.gui.db.attr 30
  115.         $this setDbFields
  116.         $this setupForPassword
  117.  
  118.     # End constructor user section
  119.     return $this
  120. }
  121.  
  122. method RepChangeDialog::destructor {this} {
  123.     # Start destructor user section
  124.     # End destructor user section
  125.     $this RepDbDialog::destructor
  126. }
  127.  
  128. method RepChangeDialog::setFields {this} {
  129.     set rep [[$this view] rep]
  130.     set name [$rep currentName]
  131.     set corp [$rep currentCorporate]
  132.  
  133.     if [$corp isNil] {
  134.     if ![$rep getServerByName $name serverDef] {
  135.         [$this view] message \
  136.                             "Server definition of server '$name' not found."
  137.         return 0
  138.     }
  139.  
  140.         set id $serverDef(id)
  141.     if ![$rep getInfoFromCmdLine $id $serverDef(cmdline) cmdInfo] {
  142.         [$this view] message "Command line of server '$name' not parsed."
  143.         return 0
  144.     }
  145.  
  146.     # Get uncrypted password from passwordDialog since
  147.     # getInfoFromDatabase needs it.
  148.     #
  149.     if [RepositoryDBMS::hasPassword] {
  150.         set pwDialog [[$this view] passwordDialog]
  151.         if {$pwDialog != ""} {
  152.         set cmdInfo(dbpassword) [$pwDialog plainPassword]
  153.         }
  154.     }
  155.  
  156.     if ![$rep getInfoFromDatabase cmdInfo $cmdInfo(dbname) repInfo] {
  157.         [$this view] message "Database '$cmdInfo(dbname)' not read."
  158.         return 0
  159.     }
  160.     
  161.     [$this dir] text $repInfo(location)
  162.     $this origDir $repInfo(location)
  163.     $this nameInDb $repInfo(name)
  164.     } else {
  165.     [$this dir] text [$corp location]
  166.     $this origDir [$corp location]
  167.     $this nameInDb [$corp name]
  168.     }
  169.  
  170.     return 1
  171. }
  172.  
  173. method RepChangeDialog::getFields {this cmdInfoRef nameRef dirRef} {
  174.     upvar $cmdInfoRef cmdInfo
  175.     upvar $nameRef name
  176.     upvar $dirRef dir
  177.  
  178.     if ![$this getDbFields cmdInfo] {
  179.         return 0
  180.     }
  181.  
  182.     set name [[$this name] text]
  183.     if {$name == ""} {
  184.         [$this view] error "No repository name specified."
  185.         return 0
  186.     }
  187.  
  188.     set dir [Repository::expandDirName [[$this dir] text]]
  189.     if {$dir == ""} {
  190.         [$this view] error "No repository directory specified."
  191.         return 0
  192.     }
  193.  
  194.     return 1
  195. }
  196.  
  197. method RepChangeDialog::popUp {this} {
  198.     if {[$this origDir] == "" && ![$this setFields]} {
  199.     return
  200.     }
  201.  
  202.     $this serversShutdown 0
  203.     $this checkOk
  204.     $this RepDbDialog::popUp
  205. }
  206.  
  207. method RepChangeDialog::ok {this {createDir 1}} {
  208.     set rep [[$this view] rep]
  209.  
  210.     set name [$this origName]
  211.     set dir [$this origDir]
  212.  
  213.     if ![$this getFields cmdInfo newName newDir] {
  214.     [$this view] message "Repository not changed."
  215.         $this popDown
  216.     return
  217.     }
  218.  
  219.     if {$newName == $name} {
  220.     set newName ""
  221.     } else {
  222.         if ![$rep checkRepositoryName $newName] {
  223.             return
  224.         }
  225.     }
  226.  
  227.     if {$newDir == $dir} {
  228.     set newDir ""
  229.     }
  230.  
  231.     set moveDir [[$this moveDir] state]
  232.  
  233.     if {$newName != "" || $newDir != ""} {
  234.         if {$newDir != "" && ![file exists $newDir]} {
  235.             if $createDir {
  236.         set dlg [QuestionDialog new [$this view].createdir \
  237.             -title "Create Directory" \
  238.             -message "Parent directory '$newDir' does not\
  239.                               exist.\nCreate it?" \
  240.             -okPressed "BasicFS::makeDir $newDir; $this ok 0" \
  241.             -cancelPressed "return"]
  242.         $dlg delHelpButton
  243.         $dlg popUp
  244.         return
  245.             }
  246.         if ![file exists $newDir] {
  247.         [$this view] error "Parent directory '$newDir' does not exist."
  248.                 return
  249.             }
  250.         }
  251.  
  252.     $this popDown
  253.     if ![$rep changeRepository cmdInfo \
  254.                         $name $dir $newName $newDir $moveDir] {
  255.         [$this view] message "Repository not changed."
  256.         return
  257.     }
  258.  
  259.         if {$newName != ""} {
  260.         # This forces this client's cached corporate object to be
  261.         # made out of date.  If this is not done, the corporate's
  262.         # name() method returns the previously cached name.
  263.         #
  264.             catch {
  265.         set corp [$rep currentCorporate]
  266.         if ![$corp isNil] {
  267.             $corp setProperty __changeName__ 1
  268.             $corp removeProperty __changeName__
  269.         }
  270.             }
  271.         }
  272.     } elseif {$moveDir} {
  273.     $this popDown
  274.     if ![$rep fixRepositoryDir cmdInfo \
  275.                         $dir $name [$this nameInDb]] {
  276.         [$this view] message "Repository not changed."
  277.         return
  278.     }
  279.     } else {
  280.     [$this view] warning "Nothing to change."
  281.     return
  282.     }
  283.  
  284.     if {$newName == ""} {
  285.     set name [$this origName]
  286.     } else {
  287.     set name $newName
  288.     }
  289.     [$this view] selectRepository ""
  290.     [$this view] updateRepositories
  291.     [$this view] selectRepository $name
  292.  
  293.     [$this view] message "Changed repository successfully."
  294. }
  295.  
  296. method RepChangeDialog::checkOk {this} {
  297.     if {[string length [[$this name] text]] > 0 &&
  298.         [string length [[$this dir] text]] > 0 &&
  299.         [$this serversShutdown] && [$this passwordOk]} {
  300.         $this okSensitive 1
  301.     } else {
  302.         $this okSensitive 0
  303.     }
  304. }
  305.  
  306. method RepChangeDialog::shutdownServers {this} {
  307.     set rep [[$this view] rep]
  308.     set name [$this origName]
  309.  
  310.     if [$rep shutdownDbServers $name] {
  311.         $this serversShutdown 1
  312.     } else {
  313.         $this serversShutdown 0
  314.     }
  315.     $this checkOk
  316. }
  317.  
  318. method RepChangeDialog::browseDir {this} {
  319.     if {[$this dirBrowser] == ""} {
  320.         $this dirBrowser [FileChooser new [$this view].dirbrowser \
  321.         -selectionPolicy SINGLE \
  322.         -title "Select Corporate Directory" \
  323.         -okPressed "[$this dir] text \[%this directory]"]
  324.         [$this dirBrowser] delHelpButton
  325.     }
  326.  
  327.     set dir [Repository::expandDirName [[$this dir] text] existingDir]
  328.     [$this dirBrowser] selectedSet $dir
  329.     [$this dirBrowser] directory $existingDir
  330.     [$this dirBrowser] popUp
  331. }
  332.  
  333. # Do not delete this line -- regeneration end marker
  334.  
  335.