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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)represtore.tcl    /main/hindenburg/18
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)represtore.tcl    /main/hindenburg/18   13 May 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 RepRestoreDialog : {RepDbDialog} {
  17.     constructor
  18.     method destructor
  19.     method popUp
  20.     method ok
  21.     method checkOk
  22.     method restoreFinished
  23.     method shutdownServers
  24.     method browseDir
  25.     method browseArchive
  26.     attribute name
  27.     attribute dir
  28.     attribute unarchiveCmd
  29.     attribute unarchiveButton
  30.     attribute unarchiveSrc
  31.     attribute archiveBrowser
  32.     attribute dirBrowser
  33. }
  34.  
  35. constructor RepRestoreDialog {class this name view} {
  36.     set this [RepDbDialog::constructor $class $this $name $view]
  37.     # Start constructor user section
  38.  
  39.         set rep [[$this view] rep]
  40.         set name [$rep currentName]
  41.  
  42.         $this config \
  43.             -title "Restore Repository" \
  44.             -okPressed { busy { %this ok } } \
  45.         -helpPressed { [%this view] helpOnName restoreRepository }
  46.  
  47.         interface DlgColumn $this.gui {
  48.         verStretchFactor 0
  49.             DlgColumn name {
  50.                 Label l { text "Corporate Name" }
  51.                 SingleLineText name {
  52.                     columnCount 30
  53.                 }
  54.             }
  55.             DlgColumn dir {
  56.         Label l {
  57.             text "Directory in which to restore repository"
  58.             alignment LEFT
  59.             horStretchFactor 100
  60.         }
  61.                 DlgRow r {
  62.             spaceType NONE
  63.                     DlgColumn d {
  64.                         spaceType EVEN
  65.             horStretchFactor 100
  66.             SingleLineText dir {
  67.                 columnCount 30
  68.                 horStretchFactor 100
  69.             }
  70.                     }
  71.                 }
  72.             }
  73.             NamedGroup options {
  74.                 label "Options"
  75.                 DlgColumn options {
  76.                     CheckButton register {
  77.                         label "Register Implementation"
  78.                         state 0
  79.                     }
  80.                     CheckButton overwrite {
  81.                         label "Overwrite Existing Database"
  82.                         state 0
  83.                     }
  84.                 }
  85.             }
  86.             NamedGroup unarchive {
  87.                 label "Unarchive"
  88.                 DlgColumn c {
  89.             CheckButton unarchive {
  90.             label "Unarchive Dump"
  91.             state 1
  92.             }
  93.             DlgColumn src {
  94.             Label l {
  95.                 text "Source File"
  96.                 horStretchFactor 100
  97.             }
  98.             DlgRow r {
  99.                 spaceType NONE
  100.                 DlgColumn d {
  101.                 spaceType EVEN
  102.                 horStretchFactor 100
  103.                 SingleLineText src {
  104.                     columnCount 30
  105.                     horStretchFactor 100
  106.                 }
  107.                 }
  108.                 DlgColumn b {
  109.                 spaceType EVEN
  110.                 horStretchFactor 0
  111.                 PushButton browse {
  112.                     horStretchFactor 0
  113.                     label "Browse..."
  114.                 }
  115.                 }
  116.             }
  117.             }
  118.             DlgColumn cmd {
  119.             Label l {
  120.                             text "Command to unarchive repository archive"
  121.                         }
  122.             SingleLineText cmd {
  123.                 columnCount 30
  124.             }
  125.                     }
  126.                 }
  127.             }
  128.             NamedGroup db {
  129.                 label "Database to create/overwrite"
  130.                 DlgColumn attr {
  131.             verStretchFactor 0
  132.                 }
  133.             }
  134.         }
  135.  
  136.         if !$win95 {
  137.         interface DlgColumn $this.gui.dir.r.b {
  138.         spaceType EVEN
  139.         horStretchFactor 0
  140.         PushButton browse {
  141.             horStretchFactor 0
  142.             label "Browse..."
  143.         }
  144.         }
  145.         $this.gui.dir.r.b.browse activated "$this browseDir"
  146.         }
  147.  
  148.         PushButton new $this.shutdown \
  149.             -label "Shutdown" \
  150.             -activated "busy { $this shutdownServers }"
  151.  
  152.         $this name $this.gui.name.name
  153.         [$this name] textModified "$this checkOk"
  154.  
  155.         $this dir $this.gui.dir.r.d.dir
  156.         [$this dir] textModified "$this checkOk"
  157.  
  158.         set a $this.gui.unarchive.c
  159.         $this unarchiveButton $a.unarchive
  160.         $this unarchiveCmd $a.cmd.cmd
  161.         $this unarchiveSrc $a.src.r.d.src
  162.         set   unarchiveBrowse $a.src.r.b.browse
  163.         $unarchiveBrowse activated "$this browseArchive"
  164.  
  165.         [$this unarchiveCmd] textModified "$this checkOk"
  166.         [$this unarchiveButton] stateChanged "
  167.             [$this unarchiveCmd] sensitive \[%this state]
  168.             [$this unarchiveSrc] sensitive \[%this state]
  169.             $unarchiveBrowse sensitive \[%this state]
  170.             $this checkOk
  171.         "
  172.  
  173.         $this createDbInterface $this.gui.db.attr 30
  174.         $this setDbFields
  175.         [$this dbname] textModified "$this checkOk"
  176.  
  177.         # Initialize some fields, but only when first created.
  178.         #
  179.     set corp [[[$this view] rep] currentCorporate]
  180.     if [$corp isNil] {
  181.         $this.gui.options.options.register state 1
  182.         $this.gui.options.options.overwrite state 0
  183.     } else {
  184.         [$this name] text [$corp name]
  185.         [$this dir] text [$corp location]        
  186.  
  187.         $this.gui.options.options.register state 0
  188.         $this.gui.options.options.overwrite state 1
  189.     }
  190.  
  191.     # End constructor user section
  192.     return $this
  193. }
  194.  
  195. method RepRestoreDialog::destructor {this} {
  196.     # Start destructor user section
  197.     # End destructor user section
  198.     $this RepDbDialog::destructor
  199. }
  200.  
  201. method RepRestoreDialog::popUp {this} {
  202.     [$this unarchiveCmd] text [m4_var get M4_unarchive_cmd]
  203.  
  204.     # Set sensitivity of "OK" and "Shutdown" buttons.
  205.     $this checkOk
  206.  
  207.     $this RepDbDialog::popUp
  208. }
  209.  
  210. method RepRestoreDialog::ok {this} {
  211.     m4_var set M4_unarchive_cmd [[$this unarchiveCmd] text]
  212.  
  213.     if ![$this getDbFields cmdInfo] {
  214.     [$this view] message "Repository not restored."
  215.         return
  216.     }
  217.  
  218.     set rep [[$this view] rep]
  219.  
  220.     set name [[$this name] text]
  221.     if {[string length $name] == 0} {
  222.         [$this view] error "No repository name specified."
  223.     [$this view] message "Repository not restored."
  224.         return
  225.     }
  226.  
  227.     set dir [Repository::expandDirName [[$this dir] text]]
  228.     if {[string length $dir] == 0} {
  229.         [$this view] error "No repository directory specified."
  230.     [$this view] message "Repository not restored."
  231.         return
  232.     }
  233.  
  234.     if ![file exists $dir] {
  235.     set dlg [QuestionDialog new [$this view].createdir \
  236.         -title "Create Directory" \
  237.         -message "Repository directory '$dir' does not\
  238.               exist.\nCreate it?" \
  239.         -okPressed "BasicFS::makeDir $dir; $this ok" \
  240.         -cancelPressed "return"]
  241.     $dlg delHelpButton
  242.     $dlg popUp
  243.     return
  244.     }
  245.  
  246.     set options ""
  247.     if [$this.gui.options.options.register state] {
  248.         append options " -i"
  249.     }
  250.     if [$this.gui.options.options.overwrite state] {
  251.         append options " -o"
  252.     }
  253.  
  254.     set unarchive [[$this unarchiveButton] state]
  255.     if $unarchive {
  256.     set src [Repository::expandFileName [[$this unarchiveSrc] text]]
  257.     set cmd [[$this unarchiveCmd] text]
  258.     if {[string length $cmd] == 0} {
  259.         [$this view] error "No unarchive command specified."
  260.         [$this view] message "Repository not restored."
  261.         return
  262.     }
  263.     } else {
  264.         set src ""
  265.         set cmd ""
  266.     }
  267.  
  268.     $rep restoreRepository "$this restoreFinished" cmdInfo \
  269.                                     $options $name $dir {} $unarchive $src
  270. }
  271.  
  272. method RepRestoreDialog::checkOk {this} {
  273.     if {[string length [[$this name] text]] > 0} {
  274.     $this.shutdown sensitive 1
  275.     } else {
  276.     $this.shutdown sensitive 0
  277.     }
  278.  
  279.     if {[string length [[$this name] text]] > 0 &&
  280.         [string length [[$this dir] text]] > 0 &&
  281.         [string length [[$this dbname] text]] > 0 &&
  282.         [$this passwordOk]} {
  283.  
  284.         if {[[$this unarchiveButton] state] &&
  285.             [string length [[$this unarchiveCmd] text]] == 0} {
  286.         $this okSensitive 0
  287.         } else {
  288.         $this okSensitive 1
  289.         }
  290.     } else {
  291.     $this okSensitive 0
  292.     }
  293. }
  294.  
  295. method RepRestoreDialog::restoreFinished {this exitCode} {
  296.     set rep [[$this view] rep]
  297.     set name [[$this name] text]
  298.  
  299.     if {$exitCode == 0} {
  300.     [$this view] updateRepositories
  301.         [$this view] viewRefresh
  302.     [$this view] message "Restored repository '$name' successfully."
  303.     } else {
  304.         [$this view] message "Restore of repository '$name' failed."
  305.     }
  306. }
  307.  
  308. method RepRestoreDialog::shutdownServers {this} {
  309.     set rep [[$this view] rep]
  310.     set name [[$this name] text]
  311.  
  312.     $rep shutdownDbServers $name
  313. }
  314.  
  315. method RepRestoreDialog::browseDir {this} {
  316.     if {[$this dirBrowser] == ""} {
  317.         $this dirBrowser [FileChooser new [$this view].dirbrowser \
  318.         -selectionPolicy SINGLE \
  319.         -title "Select Parent Repository Directory" \
  320.         -okPressed "[$this dir] text \[%this directory]"]
  321.         [$this dirBrowser] delHelpButton
  322.     }
  323.  
  324.     set dir [Repository::expandDirName [[$this dir] text] existingDir]
  325.     [$this dirBrowser] selectedSet $dir
  326.     [$this dirBrowser] directory $existingDir
  327.     [$this dirBrowser] popUp
  328. }
  329.  
  330. method RepRestoreDialog::browseArchive {this} {
  331.     if {[$this archiveBrowser] == ""} {
  332.         $this archiveBrowser [FileChooser new [$this view].archivebrowser \
  333.         -selectionPolicy SINGLE \
  334.         -title "Select Destination Archive" \
  335.         -okPressed \
  336.                 "[$this unarchiveSrc] text \[lindex \[%this selectedSet] 0]"]
  337.         [$this archiveBrowser] delHelpButton
  338.     }
  339.  
  340.     set file [Repository::expandFileName [[$this unarchiveSrc] text]]
  341.     Repository::expandDirName [file dir $file] existingDir
  342.  
  343.     [$this archiveBrowser] selectedSet $file
  344.     [$this archiveBrowser] directory $existingDir
  345.     [$this archiveBrowser] popUp
  346. }
  347.  
  348. # Do not delete this line -- regeneration end marker
  349.  
  350.