home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / repchanged.tcl < prev    next >
Text File  |  1997-10-06  |  9KB  |  358 lines

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