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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)repdbdialo.tcl    /main/titanic/10
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)repdbdialo.tcl    /main/titanic/10   5 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 "reppasswor.tcl"
  15. # End user added include file section
  16.  
  17. require "reptooldia.tcl"
  18.  
  19. Class RepDbDialog : {RepToolDialog} {
  20.     constructor
  21.     method destructor
  22.     method createDbInterface
  23.     method setupForPassword
  24.     method popUp
  25.     method ok
  26.     method passwordOk
  27.     method directoryOk
  28.     method getDbFields
  29.     method setDbFields
  30.     method browseDbDirectory
  31.     method setDbDirectory
  32.     method changePassword
  33.     method passwordChanged
  34.     attribute dbname
  35.     attribute dbuser
  36.     attribute dbpassword
  37.     attribute dbdirectory
  38.     attribute dbdirbrowse
  39.     attribute dbserver
  40.     attribute dbhost
  41.     attribute plainPassword
  42.     attribute cryptedPassword
  43.     attribute passwordButton
  44. }
  45.  
  46. constructor RepDbDialog {class this name view} {
  47.     set this [RepToolDialog::constructor $class $this $name $view]
  48.     # Start constructor user section
  49.     # End constructor user section
  50.     return $this
  51. }
  52.  
  53. method RepDbDialog::destructor {this} {
  54.     # Start destructor user section
  55.     # End destructor user section
  56.     $this RepToolDialog::destructor
  57. }
  58.  
  59. method RepDbDialog::createDbInterface {this parent {fieldWidth 25}} {
  60.     interface DlgRow $parent.name {
  61.     verStretchFactor 0
  62.     Label l { text "Name" }
  63.     SingleLineText name {
  64.             text ""
  65.             verStretchFactor 0
  66.         }
  67.     }
  68.     if {[RepositoryDBMS::shortName] == "ora"} {
  69.         $parent.name.l text "Connect String"
  70.     }
  71.     $this dbname $parent.name.name
  72.     [$this dbname] columnCount $fieldWidth
  73.  
  74.     if [RepositoryDBMS::hasDirectory] {
  75.     interface DlgRow $parent.dir {
  76.         verStretchFactor 0
  77.         Label l {
  78.                 text "Directory"
  79.                 justification CENTER
  80.             }
  81.             DlgRow r {
  82.         verStretchFactor 0
  83.         spaceType NONE
  84.         horStretchFactor 0
  85.         PushButton browse { label "Browse..." }
  86.         SingleLineText dir {
  87.                     text ""
  88.             justification CENTER
  89.             horStretchFactor 100
  90.         }
  91.             }
  92.     }
  93.     $this dbdirectory $parent.dir.r.dir
  94.         $this dbdirbrowse $parent.dir.r.browse
  95.         [$this dbdirectory] columnCount $fieldWidth
  96.         [$this dbdirectory] textModified "$this checkOk"
  97.     [$this dbdirbrowse] activated "$this browseDbDirectory"
  98.     }
  99.  
  100.     if [RepositoryDBMS::hasUser] {
  101.     interface DlgRow $parent.user {
  102.         verStretchFactor 0
  103.         Label l { text "User" }
  104.         SingleLineText user {
  105.                 text "" 
  106.                 verStretchFactor 0
  107.             }
  108.     }
  109.     $this dbuser $parent.user.user
  110.         [$this dbuser] columnCount $fieldWidth
  111.     }
  112.  
  113.     if [RepositoryDBMS::hasPassword] {
  114.     interface DlgRow $parent.password {
  115.         verStretchFactor 0
  116.         Label l {
  117.                 text "Password"
  118.                 justification CENTER
  119.             }
  120.             DlgRow row {
  121.         verStretchFactor 0
  122.         spaceType NONE
  123.         horStretchFactor 0
  124.         PushButton b { label "Enter..." }
  125.         SingleLineText password {
  126.             editable 0
  127.                     text ""
  128.             justification CENTER
  129.             verStretchFactor 0
  130.         }
  131.             }
  132.     }
  133.  
  134.     $this dbpassword $parent.password.row.password
  135.         [$this dbpassword] columnCount $fieldWidth
  136.  
  137.         $this passwordButton $parent.password.row.b
  138.     [$this passwordButton] activated "$this changePassword"
  139.  
  140.     $this passwordChanged
  141.     }
  142.  
  143.     if [RepositoryDBMS::hasHost] {
  144.     interface DlgRow $parent.host {
  145.         verStretchFactor 0
  146.         Label l { text "Host" }
  147.         SingleLineText host {
  148.                 text ""
  149.                 verStretchFactor 0
  150.             }
  151.     }
  152.     $this dbhost $parent.host.host
  153.         [$this dbhost] columnCount $fieldWidth
  154.     }
  155.  
  156.     if [RepositoryDBMS::hasServer] {
  157.     interface DlgRow $parent.server {
  158.         verStretchFactor 0
  159.         Label l { text "Server" }
  160.         SingleLineText server {
  161.                 text ""
  162.                 verStretchFactor 0
  163.             }
  164.     }
  165.     $this dbserver $parent.server.server
  166.         [$this dbserver] columnCount $fieldWidth
  167.     }
  168. }
  169.  
  170. method RepDbDialog::setupForPassword {this} {
  171.     [$this dbname] editable 0
  172.  
  173.     if [RepositoryDBMS::hasDirectory] {
  174.     [$this dbdirectory] editable 0
  175.     [$this dbdirbrowse] sensitive 0
  176.     }
  177.  
  178.     if [RepositoryDBMS::hasUser] {
  179.     [$this dbuser] editable 0
  180.     }
  181.  
  182.     if [RepositoryDBMS::hasHost] {
  183.     [$this dbhost] editable 0
  184.     }
  185.  
  186.     if [RepositoryDBMS::hasServer] {
  187.     [$this dbserver] editable 0
  188.     }
  189. }
  190.  
  191. method RepDbDialog::popUp {this} {
  192.     $this passwordChanged
  193.     $this RepToolDialog::popUp
  194. }
  195.  
  196. method RepDbDialog::passwordOk {this} {
  197.     if [RepositoryDBMS::hasPassword] {
  198.         if {[$this plainPassword] == ""} {
  199.             return 0
  200.         }
  201.     }
  202.     return 1
  203. }
  204.  
  205. method RepDbDialog::directoryOk {this} {
  206.     if [RepositoryDBMS::hasDirectory] {
  207.         if {[[$this dbdirectory] text] == ""} {
  208.             return 0
  209.         }
  210.     }
  211.     return 1
  212. }
  213.  
  214. method RepDbDialog::ok {this continueScript {createDir 0}} {
  215.     if [RepositoryDBMS::hasDirectory] {
  216.     if ![$this getDbFields cmdInfo] {
  217.         $this busy 0
  218.         return 0
  219.     }
  220.  
  221.         set dbDir $cmdInfo(dbdir)
  222.         if $createDir {
  223.         if [catch {BasicFS::makeDir $dbDir} error] {
  224.         $this busy 0
  225.         error $error
  226.         return
  227.         }
  228.             eval $continueScript
  229.         } elseif ![file exists $dbDir] {
  230.         global classCount
  231.         set createdir [$this view].createdir$classCount
  232.         incr classCount
  233.         set dlg [QuestionDialog new $createdir \
  234.         -title "Create Directory" \
  235.         -message "Database directory '$dbDir' does not exist.\
  236.                           \nCreate it?" \
  237.         -okPressed "$this RepDbDialog::ok \"$continueScript\" 1" \
  238.         -cancelPressed "$this busy 0; return"]
  239.         $dlg delHelpButton
  240.         $dlg popUp
  241.     } else {
  242.         eval $continueScript
  243.         }
  244.     } else {
  245.     eval $continueScript
  246.     }
  247. }
  248.  
  249. method RepDbDialog::getDbFields {this cmdInfoRef {requirePassword 1}} {
  250.     upvar $cmdInfoRef cmdInfo
  251.  
  252.     set cmdInfo(dbname) [[$this dbname] text]
  253.     if {[string length $cmdInfo(dbname)] == 0} {
  254.         [$this view] error "No database name specified."
  255.         return 0
  256.     }
  257.  
  258.     if [RepositoryDBMS::hasUser] {
  259.         set cmdInfo(dbuser) [[$this dbuser] text]
  260.     }
  261.     if [RepositoryDBMS::hasPassword] {
  262.     set cmdInfo(dbpassword) ""
  263.         if {[$this plainPassword] != ""} {
  264.         set cmdInfo(dbpassword) [$this plainPassword]
  265.         }
  266.  
  267.     set cmdInfo(dbcryptedpassword) ""
  268.         if {[$this cryptedPassword] != ""} {
  269.         set cmdInfo(dbcryptedpassword) [$this cryptedPassword]
  270.         }
  271.  
  272.         if {$requirePassword && $cmdInfo(dbpassword) == ""} {
  273.             [$this view] error "No password specified."
  274.             return 0
  275.         }
  276.     }
  277.     if [RepositoryDBMS::hasDirectory] {
  278.     set cmdInfo(dbdir) [Repository::expandDirName \
  279.                                 [[$this dbdirectory] text]]
  280.     }
  281.     if [RepositoryDBMS::hasServer] {
  282.     set cmdInfo(dbserver) [[$this dbserver] text]
  283.     }
  284.     if [RepositoryDBMS::hasHost] {
  285.     set cmdInfo(dbhost) [[$this dbhost] text]
  286.     }
  287.  
  288.     # Allow empty values for fields other than name. Assume
  289.     # dbtool knows proper default.
  290.     #
  291.     return 1
  292. }
  293.  
  294. method RepDbDialog::setDbFields {this} {
  295.     set rep [[$this view] rep]
  296.     set name [$rep currentName]
  297.     set corp [$rep currentCorporate]
  298.  
  299.     if ![$corp isNil] {
  300.     [$this dbname] text [$corp databaseName]
  301.  
  302.     if [RepositoryDBMS::hasDirectory] {
  303.         [$this dbdirectory] text [$corp databaseDirectory]
  304.     }
  305.  
  306.     if [RepositoryDBMS::hasUser] {
  307.         [$this dbuser] text [$corp databaseUser]
  308.     }
  309.  
  310.     if [RepositoryDBMS::hasPassword] {
  311.             if {[$this plainPassword] == ""} {
  312.         $this cryptedPassword [$corp databasePassword]
  313.         regsub -all {.} [$this cryptedPassword] {*} hiddenPassword
  314.             } else {
  315.                 $this cryptedPassword [ORB::cryptPassword [$this plainPassword]]
  316.         regsub -all {.} [$this plainPassword] {*} hiddenPassword
  317.             }
  318.         [$this dbpassword] text $hiddenPassword
  319.     }
  320.  
  321.     if [RepositoryDBMS::hasHost] {
  322.         [$this dbhost] text [$corp databaseHost]
  323.     }
  324.  
  325.     if [RepositoryDBMS::hasServer] {
  326.         [$this dbserver] text [$corp databaseServer]
  327.     }
  328.     } elseif {$name != ""} {
  329.         if [$rep getServerByName $name serverDef] {
  330.             set cmdLine $serverDef(cmdline)
  331.         if [$rep getInfoFromCmdLine $serverDef(id) $cmdLine cmdInfo] {
  332.         [$this dbname] text $cmdInfo(dbname)
  333.  
  334.         if [RepositoryDBMS::hasDirectory] {
  335.             [$this dbdirectory] text $cmdInfo(dbdir)
  336.         }
  337.  
  338.         if [RepositoryDBMS::hasUser] {
  339.             [$this dbuser] text $cmdInfo(dbuser)
  340.         }
  341.  
  342.         if [RepositoryDBMS::hasPassword] {
  343.                     if {[$this plainPassword] == ""} {
  344.             if [string length $cmdInfo(dbpassword)] {
  345.                 $this plainPassword $cmdInfo(dbpassword)
  346.                 $this cryptedPassword [ORB::cryptPassword \
  347.                             [$this plainPassword]]
  348.                 regsub -all {.} [$this plainPassword] {*} \
  349.                                                                 hiddenPassword
  350.             } elseif [string length $cmdInfo(dbcryptedpassword)] {
  351.                 $this plainPassword ""
  352.                 $this cryptedPassword $cmdInfo(dbcryptedpassword)
  353.                 regsub -all {.} [$this cryptedPassword] {*} \
  354.                                                                 hiddenPassword
  355.             }
  356.                     } else {
  357.                         $this cryptedPassword [ORB::cryptPassword \
  358.                             [$this plainPassword]]
  359.             regsub -all {.} [$this plainPassword] {*} \
  360.                                                                 hiddenPassword
  361.                     }
  362.             [$this dbpassword] text $hiddenPassword
  363.         }
  364.  
  365.         if [RepositoryDBMS::hasHost] {
  366.             [$this dbhost] text $cmdInfo(dbhost)
  367.         }
  368.  
  369.         if [RepositoryDBMS::hasServer] {
  370.             [$this dbserver] text $cmdInfo(dbserver)
  371.         }
  372.         } else {
  373.         [$this dbname] text <unknown>
  374.         if [RepositoryDBMS::hasDirectory] {
  375.             [$this dbdirectory] text <unknown>
  376.         }
  377.         if [RepositoryDBMS::hasUser] {
  378.             [$this dbuser] text <unknown>
  379.         }
  380.         if [RepositoryDBMS::hasPassword] {
  381.             [$this dbpassword] text <unknown>
  382.         }
  383.         if [RepositoryDBMS::hasHost] {
  384.             [$this dbhost] text <unknown>
  385.         }
  386.         if [RepositoryDBMS::hasServer] {
  387.             [$this dbserver] text <unknown>
  388.         }
  389.             }
  390.         }
  391.     }
  392. }
  393.  
  394. method RepDbDialog::browseDbDirectory {this} {
  395.     set dlg [$this view].dbdirbrowser
  396.     if ![isCommand $dlg] {
  397.         RepDirBrowser new $dlg 1 0 \
  398.             -title "Select Database Directory" \
  399.             -okPressed "%this handleOk ; $this setDbDirectory \[%this selected]"
  400.     }
  401.  
  402.     $dlg selected [[$this dbdirectory] text]
  403.     $dlg popUp
  404. }
  405.  
  406. method RepDbDialog::setDbDirectory {this dir} {
  407.     [$this dbdirectory] text $dir
  408.     $this checkOk
  409. }
  410.  
  411. method RepDbDialog::changePassword {this} {
  412.     [$this view] changePassword "$this passwordChanged"
  413. }
  414.  
  415. method RepDbDialog::passwordChanged {this} {
  416.     if ![RepositoryDBMS::hasPassword] {
  417.         return
  418.     }
  419.  
  420.     set dlg [[$this view] passwordDialog]
  421.     if {$dlg != ""} {
  422.     $this plainPassword [$dlg plainPassword]
  423.     $this cryptedPassword [$dlg cryptedPassword]
  424.  
  425.     regsub -all {.} [$this plainPassword] {*} hiddenPassword
  426.     [$this dbpassword] text $hiddenPassword
  427.     } else {
  428.     [$this dbpassword] text ""
  429.     }
  430.     $this checkOk
  431. }
  432.  
  433. # Do not delete this line -- regeneration end marker
  434.  
  435.