home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / csentrydia.tcl < prev    next >
Text File  |  1997-06-04  |  8KB  |  285 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)csentrydia.tcl    /main/hindenburg/18
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)csentrydia.tcl    /main/hindenburg/18   4 Jun 1997 Copyright 1996 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require "repdbms.tcl"
  13. require "reppasswor.tcl"
  14. require "m4optdlgel.tcl"
  15. # End user added include file section
  16.  
  17. require "repdbdialo.tcl"
  18.  
  19. Class CSEntryDialog : {RepDbDialog} {
  20.     constructor
  21.     method destructor
  22.     method setFields
  23.     method getFields
  24.     method popUp
  25.     method shutdownServers
  26.     method checkOk
  27.     method ok
  28.     attribute id
  29.     attribute name
  30.     attribute policy
  31.     attribute protocol
  32.     attribute path
  33.     attribute host
  34.     attribute exename
  35.     attribute options
  36.     attribute node
  37. }
  38.  
  39. constructor CSEntryDialog {class this name view i_id node} {
  40.     set this [RepDbDialog::constructor $class $this $name $view]
  41.     $this id $i_id
  42.     $this node $node
  43.     # Start constructor user section
  44.  
  45.         $this config \
  46.             -title "Change Server Definition" \
  47.             -modal 1 \
  48.             -okPressed { %this ok } \
  49.             -cancelPressed { %this setFields } \
  50.         -helpPressed { [%this view] helpOnName changeServerEntry }
  51.  
  52.         interface NamedGroup $this.gui {
  53.         verStretchFactor 100
  54.             DlgColumn c {
  55.                 DlgColumn c {
  56.                     spaceType NONE
  57.             verStretchFactor 0
  58.             DlgRow path {
  59.             verStretchFactor 0
  60.             Label l { text "Executable Path" }
  61.             SingleLineText path { }
  62.             }
  63.             DlgRow host {
  64.             verStretchFactor 0
  65.             Label l { text "Host" }
  66.             SingleLineText host { }
  67.             }
  68.                 }
  69.         NamedGroup g {
  70.             verStretchFactor 100
  71.             label "Command Line"
  72.             DlgColumn cmdline {
  73.             verStretchFactor 100
  74.             DlgRow exename {
  75.                 verStretchFactor 0
  76.                 Label l { text "Executable Name" }
  77.                 SingleLineText exename { }
  78.             }
  79.             }
  80.         }
  81.             }
  82.         }
  83.  
  84.         
  85.         set cmdline $this.gui.c.g.cmdline
  86.  
  87.         ORB::splitImplemId [$this id] id version
  88.     if {$id > 100 && $id < 1000} {
  89.         interface NamedGroup $cmdline.db {
  90.         label "Database"
  91.         verStretchFactor 0
  92.         DlgColumn col { }
  93.         }
  94.         }
  95.  
  96.         interface NamedGroup $cmdline.options {
  97.         label "M4 Options"
  98.         M4OptDlgElem options { }
  99.         }
  100.  
  101.         PushButton new $this.shutdown \
  102.             -label "Shutdown" \
  103.             -activated "busy { $this shutdownServers }"
  104.  
  105.         set params $this.gui.c.c
  106.         $this protocol $params.protocol.protocol
  107.         $this path $params.path.path
  108.         $this host $params.host.host
  109.  
  110.     $this exename $cmdline.exename.exename
  111.     $this options $cmdline.options.options
  112.  
  113.     if {$id > 100 && $id < 1000} {
  114.         $this createDbInterface $cmdline.db.col
  115.         }
  116.  
  117.         [$this path] textModified "$this checkOk"
  118.         [$this exename] textModified "$this checkOk"
  119.  
  120.         $this setFields
  121.  
  122.     # End constructor user section
  123.     return $this
  124. }
  125.  
  126. method CSEntryDialog::destructor {this} {
  127.     # Start destructor user section
  128.     # End destructor user section
  129.     $this RepDbDialog::destructor
  130. }
  131.  
  132. method CSEntryDialog::setFields {this} {
  133.     set rep [[$this view] rep]
  134.     $rep getServerById [$this id] serverDef
  135.  
  136.     set fullId $serverDef(id).$serverDef(version)
  137.     $this.gui label "Server Definition '$serverDef(name)' ($fullId)"
  138.  
  139.     $this name $serverDef(name)
  140.     $this policy         $serverDef(policy)
  141.     $this protocol        $serverDef(protocol)
  142.     [$this path] text        $serverDef(executable)
  143.     [$this exename] text    [lindex $serverDef(cmdline) 0]
  144.     [$this host] text        $serverDef(host)
  145.  
  146.     if ![$rep getInfoFromCmdLine $serverDef(id) $serverDef(cmdline) cmdLine] {
  147.     return
  148.     }
  149.  
  150.     [$this options] options $cmdLine(m4options)
  151.  
  152.     if {$serverDef(id) <= 100 || $serverDef(id) >= 1000} {
  153.         # Not a dbserver definition.
  154.         return
  155.     }
  156.     [$this dbname] text $cmdLine(dbname)
  157.  
  158.     if [RepositoryDBMS::hasUser] {
  159.     [$this dbuser] text $cmdLine(dbuser)
  160.     }
  161.     if [RepositoryDBMS::hasPassword] {
  162.         if [string length $cmdLine(dbpassword)] {
  163.         $this plainPassword $cmdLine(dbpassword)
  164.         $this cryptedPassword $cmdLine(dbcryptedpassword)
  165.  
  166.         regsub -all {.} $cmdLine(dbpassword) {*} hiddenPassword
  167.         [$this dbpassword] text $hiddenPassword
  168.         } elseif [string length $cmdLine(dbcryptedpassword)] {
  169.             $this plainPassword ""
  170.         $this cryptedPassword $cmdLine(dbcryptedpassword)
  171.  
  172.         [$this dbpassword] text [$this cryptedPassword]
  173.         } else {
  174.             set hiddenPassword ""
  175.             if {[$this plainPassword] != ""} {
  176.                 if {[$this cryptedPassword] == ""} {
  177.                     $this cryptedPassword [ORB::cryptPassword \
  178.                                                         [$this plainPassword]]
  179.                 }
  180.         regsub -all {.} [$this plainPassword] {*} hiddenPassword
  181.             } elseif {[$this cryptedPassword] != ""} {
  182.                 set hiddenPassword [$this cryptedPassword]
  183.             }
  184.             [$this dbpassword] text $hiddenPassword
  185.         }
  186.     }
  187.     if [RepositoryDBMS::hasDirectory] {
  188.     [$this dbdirectory] text $cmdLine(dbdir)
  189.     }
  190.     if [RepositoryDBMS::hasServer] {
  191.     [$this dbserver] text $cmdLine(dbserver)
  192.     }
  193.     if [RepositoryDBMS::hasHost] {
  194.     [$this dbhost] text $cmdLine(dbhost)
  195.     }
  196. }
  197.  
  198. method CSEntryDialog::getFields {this serverDefRef} {
  199.     upvar $serverDefRef serverDef
  200.     set rep [[$this view] rep]
  201.  
  202.     ORB::splitImplemId [$this id] id version
  203.     if {$id > 100 && $id < 1000} {
  204.     if ![$this getDbFields cmdInfo 0] {
  205.         return 0
  206.     }
  207.     }
  208.  
  209.     set cmdInfo(m4options) [[$this options] options]
  210.  
  211.     set exeName [quoteIf [[$this exename] text]]
  212.     if [catch {set cmdLine [$rep makeCmdLine $exeName cmdInfo]} error] {
  213.         [$this view] error $error
  214.         return 0
  215.     }
  216.  
  217.     set serverDef(id)        $id
  218.     set serverDef(version)    $version
  219.     set serverDef(name)        [$this name]
  220.     set serverDef(policy)    [$this policy]
  221.     set serverDef(protocol)    [$this protocol]
  222.     set serverDef(executable)    [[$this path] text]
  223.     set serverDef(cmdline)    $cmdLine
  224.     set serverDef(host)        [[$this host] text]
  225.  
  226.     return 1
  227. }
  228.  
  229. method CSEntryDialog::popUp {this} {
  230.     # Don't call passwordChanged!
  231.     $this checkOk
  232.     $this RepToolDialog::popUp
  233. }
  234.  
  235. method CSEntryDialog::shutdownServers {this} {
  236.     set rep [[$this view] rep]
  237.     set name [$this name]
  238.  
  239.     $rep shutdownDbServers $name
  240. }
  241.  
  242. method CSEntryDialog::checkOk {this} {
  243.     set ok 1
  244.  
  245.     if {[$this policy] == "shared" &&
  246.         ([string length [[$this path] text]] == 0 ||
  247.          [string length [[$this exename] text]] == 0)} {
  248.         set ok 0
  249.     } elseif {[$this policy] == "unshared"} {
  250.         [$this path] sensitive 0
  251.         [$this exename] sensitive 0
  252.         [$this options].gui.r.t.text sensitive 0
  253.     }
  254.  
  255.     $this okSensitive $ok
  256. }
  257.  
  258. method CSEntryDialog::ok {this} {
  259.     if ![$this getFields serverDef] {
  260.         return
  261.     }
  262.  
  263.     [[$this view] rep] changeServerDefinition \
  264.     $serverDef(id) \
  265.     $serverDef(version) \
  266.     $serverDef(name) \
  267.     $serverDef(policy) \
  268.     $serverDef(protocol) \
  269.     $serverDef(executable) \
  270.     $serverDef(cmdline) \
  271.     $serverDef(host)
  272.  
  273.     if {[$this node] != ""} {
  274.     [$this node] update
  275.     [$this node] display
  276.     } else {
  277.         [$this view] update
  278.     }
  279.  
  280.     [$this view] message "Changed server entry successfully."
  281. }
  282.  
  283. # Do not delete this line -- regeneration end marker
  284.  
  285.