home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / repnewdial.tcl < prev    next >
Text File  |  1997-11-28  |  12KB  |  413 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)repnewdial.tcl    /main/titanic/20
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)repnewdial.tcl    /main/titanic/20   28 Nov 1997 Copyright 1996 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require "repdbms.tcl"
  13. require "repository.tcl"
  14. require "repdirbrow.tcl"
  15. # End user added include file section
  16.  
  17. require "repdbdialo.tcl"
  18.  
  19. Class RepNewDialog : {RepDbDialog} {
  20.     constructor
  21.     method destructor
  22.     method popUp
  23.     method checkName
  24.     method ok
  25.     method checkOk
  26.     method startCreate1
  27.     method startCreate2
  28.     method startCreate3
  29.     method createFinished
  30.     method browseDir
  31.     method browseExternalDir
  32.     attribute goodName
  33.     attribute dirBrowser
  34.     attribute externalDirBrowser
  35.     attribute name
  36.     attribute dir
  37.     attribute externalDir
  38. }
  39.  
  40. constructor RepNewDialog {class this name view} {
  41.     set this [RepDbDialog::constructor $class $this $name $view]
  42.     # Start constructor user section
  43.  
  44.         $this config \
  45.             -title "New Repository" \
  46.             -okPressed { %this ok } \
  47.         -autoPopDown 0 \
  48.             -helpPressed { [%this view] helpOnName newRepository }
  49.  
  50.         interface DlgColumn $this.gui {
  51.             DlgColumn name {
  52.                 Label l { text "Corporate Name" }
  53.                 SingleLineText name {
  54.                     columnCount 30
  55.                 }
  56.             }
  57.             CheckButton setDefault {
  58.                 label "Make this repository the default repository."
  59.             }
  60.             DlgColumn dir {
  61.         Label l {
  62.             text "Directory in which to create repository"
  63.             alignment LEFT
  64.             horStretchFactor 100
  65.         }
  66.                 DlgRow r {
  67.             spaceType NONE
  68.                     DlgColumn d {
  69.             horStretchFactor 100
  70.                         spaceType EVEN
  71.             SingleLineText dir {
  72.                 columnCount 30
  73.                 horStretchFactor 100
  74.             }
  75.                     }
  76.                 DlgColumn b {
  77.             horStretchFactor 0
  78.             spaceType EVEN
  79.             PushButton browse {
  80.                 horStretchFactor 0
  81.                 label "Browse..."
  82.             }
  83.             }
  84.                 }
  85.                 Label l {
  86.                     text "User Environment Root directory\
  87.                           (defaults to repository directory)"
  88.                     alignment LEFT
  89.                     horStretchFactor 100
  90.                 }
  91.                 DlgRow e {
  92.             spaceType NONE
  93.                     DlgColumn d {
  94.             horStretchFactor 100
  95.                         spaceType EVEN
  96.             SingleLineText dir {
  97.                 columnCount 30
  98.                 horStretchFactor 100
  99.             }
  100.                     }
  101.                 DlgColumn b {
  102.             horStretchFactor 0
  103.             spaceType EVEN
  104.             PushButton browse {
  105.                 horStretchFactor 0
  106.                 label "Browse..."
  107.             }
  108.             }
  109.                 }
  110.             }
  111.             NamedGroup db {
  112.                 label "Database"
  113.                 DlgColumn attr { }
  114.             }
  115.         }
  116.  
  117.     $this.gui.dir.r.b.browse activated "$this browseDir"
  118.     $this.gui.dir.e.b.browse activated "$this browseExternalDir"
  119.  
  120.         $this name $this.gui.name.name
  121.         $this dir $this.gui.dir.r.d.dir
  122.         $this externalDir $this.gui.dir.e.d.dir
  123.         if $win95 {
  124.         $this createDbInterface $this.gui.db.attr 35
  125.         } else {
  126.         $this createDbInterface $this.gui.db.attr
  127.         }
  128.         $this setDbFields
  129.  
  130.         [$this name] textModified "if \[$this checkName] { $this checkOk }"
  131.         [$this dir] textModified "$this checkOk"
  132.         [$this dbname] text ""
  133.         [$this dbname] textModified "$this checkOk"
  134.  
  135.         set rep [[$this view] rep]
  136.         set corp [$rep currentCorporate]
  137.         if ![$corp isNil] {
  138.             [$this dir] text [$corp location]
  139.         }
  140.  
  141.     # End constructor user section
  142.     return $this
  143. }
  144.  
  145. method RepNewDialog::destructor {this} {
  146.     # Start destructor user section
  147.     # End destructor user section
  148.     $this RepDbDialog::destructor
  149. }
  150.  
  151. method RepNewDialog::popUp {this} {
  152.     # Enable "Set default..." only if no repositories have been
  153.     # created yet.  Makes starting the browser during installation
  154.     # unnecessary.
  155.     #
  156.     set rep [[$this view] rep]
  157.     set repCount [llength [$rep getAvailableRepositories]]
  158.     if {$repCount == 0} {
  159.     $this.gui.setDefault state 1
  160.     } else {
  161.     $this.gui.setDefault state 0
  162.     }
  163.  
  164.     $this goodName [[$this name] text]
  165.  
  166.     $this checkOk
  167.     $this RepDbDialog::popUp
  168. }
  169.  
  170. method RepNewDialog::checkName {this} {
  171.     set name [[$this name] text]
  172.     set curs [[$this name] cursorIndex]
  173.     incr curs -1
  174.  
  175.     # Prepend with "x" to prevent Tcl from thinking the name is a number.
  176.     if {"x$name" != "x" && ![Repository::goodRepositoryName $name]} {
  177.         [$this name] text [$this goodName]
  178.         [$this name] cursorIndex $curs
  179.         return 0
  180.     }
  181.  
  182.     $this goodName $name
  183.     return 1
  184. }
  185.  
  186. method RepNewDialog::checkOk {this} {
  187.     if {[string length [[$this name] text]] > 0 &&
  188.         [string length [[$this dir] text]] > 0 &&
  189.         [string length [[$this dbname] text]] > 0 &&
  190.         [$this passwordOk] &&
  191.         [$this directoryOk]} {
  192.  
  193.     $this okSensitive 1
  194.     } else {
  195.     $this okSensitive 0
  196.     }
  197. }
  198.  
  199. method RepNewDialog::ok {this} {
  200.     $this busy 1
  201.     set rep [[$this view] rep]
  202.     
  203.     # Some sanity checks.
  204.     #
  205.     if ![$rep checkRepositoryName [[$this name] text]] {
  206.     $this busy 0
  207.         return
  208.     }
  209.  
  210.     if {[string length [[$this name] text]] == 0} {
  211.         [$this view] error "No repository name specified."
  212.     [$this view] message "Repository not created."
  213.     $this busy 0
  214.         return
  215.     }
  216.  
  217.     set repDir [Repository::expandDirName [[$this dir] text]]
  218.     if {[string length $repDir] == 0} {
  219.         [$this view] error "No repository directory specified."
  220.     [$this view] message "Repository not created."
  221.     $this busy 0
  222.         return
  223.     }
  224.     [$this dir] text $repDir
  225.  
  226.     if [file exists $repDir] {
  227.         if ![file isdirectory $repDir] {
  228.             [$this view] error "Directory '$repDir' is not a directory." 
  229.             [$this view] message "Repository not created."
  230.         $this busy 0
  231.             return
  232.         }
  233.         if ![file writable $repDir] {
  234.             [$this view] error "Directory '$repDir' is not writable."
  235.             [$this view] message "Repository not created."
  236.         $this busy 0
  237.             return
  238.         }
  239.         set createDir 0
  240.     } else {
  241.         set createDir 1
  242.     }
  243.  
  244.     if $createDir {
  245.     global classCount
  246.     set createdir [$this view].createdir$classCount
  247.     incr classCount
  248.         set dlg [QuestionDialog new $createdir \
  249.         -title "Create Directory" \
  250.         -message "Repository directory '$repDir' does not exist.\
  251.                       \nCreate it?" \
  252.             -okPressed "$this startCreate1 1" \
  253.             -cancelPressed "$this busy 0; return"]
  254.         $dlg delHelpButton
  255.     $dlg popUp
  256.         return
  257.     }
  258.  
  259.     $this startCreate1 0
  260. }
  261.  
  262. method RepNewDialog::startCreate1 {this makeDir} {
  263.     if ![$this getDbFields cmdInfo] {
  264.     $this busy 0
  265.         return
  266.     }
  267.  
  268.     set repDir [[$this dir] text]
  269.     if $makeDir {
  270.         if [catch {BasicFS::makeDir $repDir} error] {
  271.             [$this view] error $error
  272.         $this busy 0
  273.             return
  274.         }
  275.     }
  276.  
  277.     set extDir [Repository::expandDirName [[$this externalDir] text]]
  278.     [$this externalDir] text $extDir
  279.  
  280.     set corpName [[$this name] text]
  281.     set corpDir [location $repDir $corpName]
  282.     if {$extDir != "" && $extDir != $corpDir && ![file exists $extDir]} {
  283.         set dlg [QuestionDialog new [$this view].createextdir \
  284.         -title "Create Directory" \
  285.         -message "User environment directory '$extDir' does not exist.\
  286.                       \nCreate it?" \
  287.             -okPressed "$this startCreate2 1" \
  288.             -cancelPressed "$this busy 0; return"]
  289.  
  290.         # Might not want to create it now, since this is done on the
  291.         # server, while this directory is meant for clients.  The
  292.         # user environment mechanism will automatically create the
  293.         # path when needed anyway.
  294.         #
  295.         PushButton new $dlg.no \
  296.             -label "No" \
  297.             -activated "$dlg popDown; $this startCreate2 0"
  298.  
  299.         $dlg delHelpButton
  300.     $dlg popUp
  301.         return
  302.     }
  303.  
  304.     $this startCreate2 0
  305. }
  306.  
  307. method RepNewDialog::startCreate2 {this makeExtDir} {
  308.     if ![$this getDbFields cmdInfo] {
  309.     $this busy 0
  310.         return
  311.     }
  312.  
  313.     if $makeExtDir {
  314.         set extDir [[$this externalDir] text]
  315.         if [catch {BasicFS::makeDir $extDir} error] {
  316.             [$this view] error $error
  317.         $this busy 0
  318.             return
  319.         }
  320.     }
  321.  
  322.     $this RepDbDialog::ok "$this startCreate3"
  323. }
  324.  
  325. method RepNewDialog::startCreate3 {this} {
  326.     if ![$this getDbFields cmdInfo] {
  327.     $this busy 0
  328.         return
  329.     }
  330.  
  331.     [[$this view] rep] createRepository "$this createFinished" cmdInfo \
  332.                     [[$this name] text] \
  333.                     [[$this dir] text]
  334.     $this busy 0
  335. }
  336.  
  337. method RepNewDialog::createFinished {this exitCode} {
  338.     $this busy 0
  339.     if {$exitCode == 0} {
  340.         $this popDown
  341.         [$this view] updateRepositories
  342.  
  343.         # Try to select the new repository.
  344.         #
  345.         set repName [[$this name] text]
  346.         set rep [[$this view] rep]
  347.         $rep setCurrent $repName
  348.  
  349.         # Set the fileSystemPath property, if specified.
  350.         #
  351.         set corp [$rep currentCorporate]
  352.         if {![$corp isNil] && [$corp name] == [[$this name] text]} {
  353.         set extDir [[$this externalDir] text]
  354.             if {$extDir != ""} {
  355.         $corp setProperty fileSystemPath $extDir
  356.             }
  357.         }
  358.  
  359.         # Store the new repository name in the m4env.m4env file at
  360.         # corporate level if needed.
  361.         #
  362.         if [$this.gui.setDefault state] {
  363.             [$this view] makeDefault $repName
  364.         }
  365.  
  366.         [$this view] selectRepository [[$this name] text]
  367.         [$this view] message "Repository created successfully."
  368.     } else {
  369.         [$this view] message "Repository not created."
  370.     }
  371. }
  372.  
  373. method RepNewDialog::browseDir {this} {
  374.     if {[$this dirBrowser] == ""} {
  375.     global classCount
  376.     set dirbrowser [$this view].dirbrowser$classCount
  377.     incr classCount
  378.         $this dirBrowser [RepDirBrowser new $dirbrowser 1 0 \
  379.         -title "Select Corporate Directory" \
  380.         -okPressed "%this handleOk ; [$this dir] text \[%this selected]"]
  381.     }
  382.  
  383.     set cur [[$this dir] text]
  384.     if {$cur == ""} {
  385.         set cur [pwd]
  386.     }
  387.     set dir [Repository::expandDirName $cur existingDir]
  388.     [$this dirBrowser] selected $existingDir
  389.     [$this dirBrowser] popUp
  390. }
  391.  
  392. method RepNewDialog::browseExternalDir {this} {
  393.     if {[$this externalDirBrowser] == ""} {
  394.         global classCount
  395.         set extdirbr [$this view].extdirbr$classCount
  396.         incr classCount
  397.         $this externalDirBrowser [RepDirBrowser new $extdirbr 1 0 \
  398.         -title "Select ExternalFileVersion Root Directory" \
  399.         -okPressed \
  400.         "%this handleOk ; [$this externalDir] text \[%this selected]"]
  401.     }
  402.  
  403.     set dir [[$this externalDir] text]
  404.     if {$dir == ""} {
  405.         set dir [location [[$this dir] text] [[$this name] text]]
  406.     }
  407.     [$this externalDirBrowser] selected $dir
  408.     [$this externalDirBrowser] popUp
  409. }
  410.  
  411. # Do not delete this line -- regeneration end marker
  412.  
  413.