home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / corpmanvie.tcl < prev    next >
Text File  |  1996-11-28  |  15KB  |  578 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)corpmanvie.tcl    /main/hindenburg/30
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)corpmanvie.tcl    /main/hindenburg/30   28 Nov 1996 Copyright 1996 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require "repdbms.tcl"
  13. require "repinfosec.tcl"
  14. require "repnewdial.tcl"
  15. require "repdeleted.tcl"
  16. require "repchanged.tcl"
  17. require "csentrydia.tcl"
  18. require "repoptimdi.tcl"
  19. require "repbackupd.tcl"
  20. require "represtore.tcl"
  21. # End user added include file section
  22.  
  23. require "reptoolvie.tcl"
  24.  
  25. Class CorpManView : {RepToolView} {
  26.     method destructor
  27.     constructor
  28.     method initialize
  29.     method selectedObjSet
  30.     method selectionChanged
  31.     method update
  32.     method updateRepositories
  33.     method selectRepository
  34.     method setRepository
  35.     method reload
  36.     method setFont
  37.     method getFont
  38.     method fileNew
  39.     method fileDelete
  40.     method fileOpen
  41.     method fileChangeName
  42.     method fileChangeServerEntry
  43.     method fileOptimize
  44.     method fileBackup
  45.     method fileRestore
  46.     method optionsArchiveCmd
  47.     method optionsUnarchiveCmd
  48.     method helpOnContext
  49.     attribute selectError
  50.     attribute repositories
  51.     attribute info
  52.     attribute infoSection
  53.     attribute newDialog
  54.     attribute deleteDialog
  55.     attribute changeDialog
  56.     attribute changeEntryDialog
  57.     attribute optimDialog
  58.     attribute backupDialog
  59.     attribute restoreDialog
  60. }
  61.  
  62. method CorpManView::destructor {this} {
  63.     # Start destructor user section
  64.     # End destructor user section
  65.     $this RepToolView::destructor
  66. }
  67.  
  68. constructor CorpManView {class this name} {
  69.     set this [RepToolView::constructor $class $this $name repcorp]
  70.  
  71.         $this setTitle "Corporate Management" rep_corp_64
  72.         $this infoSection [RepInfoSection new $this]
  73.         $this firstExposed "$this initialize"
  74.  
  75.         # Create main interface part.
  76.         #
  77.         interface DlgColumn $this.gui.col {
  78.             HorSeparator h {
  79.             }
  80.             DlgRow reps {
  81.         spaceType NONE
  82.         verStretchFactor 0
  83.         verShrinkFactor 0
  84.         Label l { text "Repository:" }
  85.         OptionMenu reps {
  86.             horStretchFactor 100
  87.             justification CENTER
  88.             entrySet "<none>"
  89.         }
  90.             }
  91.         MultiLineText info {
  92.         verStretchFactor 100
  93.         verShrinkFactor 100
  94.         editable 0
  95.         columnCount 80
  96.         rowCount 24
  97.         }
  98.     }
  99.  
  100.         $this repositories $this.gui.col.reps.reps
  101.         $this info $this.gui.col.info
  102.         [$this info] font [m4_var get M4_font -context repcorp]
  103.         [$this repositories] selectionChanged "$this selectionChanged"
  104.  
  105.     return $this
  106. }
  107.  
  108. proc CorpManView::repToolClass {} {
  109.     return "CorpManView"
  110. }
  111.  
  112. method CorpManView::initialize {this} {
  113.     busy {
  114.         set selected "<none>"
  115.  
  116.         # No level path should be set at this point.
  117.         #
  118.     catch {set cc [ClientContext::global]}
  119.     catch {set cc [ClientContext::global]}
  120.  
  121.         # Set the client context based on passed levelPath options.
  122.         # Be careful about finding the selected repository name.
  123.         #
  124.     if {[$this levelPathIds] != ""} {
  125.         if [catch {
  126.                 $cc setLevelIds [$this levelPathIds]
  127.         set corp [$cc currentCorporate]
  128.         if ![$corp isNil] {
  129.             set selected [$corp name]
  130.         }
  131.             } error] {
  132.                 $this error $error
  133.             }
  134.     } elseif {[$this levelPath] != ""} {
  135.         if [catch {$cc setLevelPath [$this levelPath]} error] {
  136.                 $this error $error
  137.             }
  138.         regexp {^/([^/]*)} [$this levelPath] dummy selected
  139.     }
  140.  
  141.         # Select the repository.
  142.         #
  143.     [$this repositories] entrySet \
  144.         [concat <none> [[$this rep] getAvailableRepositories]]
  145.     [$this repositories] selected $selected
  146.         $this selectionChanged
  147.     }
  148. }
  149.  
  150. method CorpManView::selectedObjSet {this} {
  151.     set sel [[$this repositories] selected]
  152.     if {$sel == "<none>"} {
  153.         return ""
  154.     }
  155.     return $sel
  156. }
  157.  
  158. method CorpManView::selectionChanged {this} {
  159.     busy {
  160.     $this newDialog ""
  161.     $this deleteDialog ""
  162.     $this changeDialog ""
  163.     $this changeEntryDialog ""
  164.     $this optimDialog ""
  165.     $this backupDialog ""
  166.     $this restoreDialog ""
  167.  
  168.     $this reload
  169.         $this setTitle [[$this repositories] selected]
  170.  
  171.     $this RepToolView::selectionChanged
  172.     }
  173. }
  174.  
  175. method CorpManView::update {this} {
  176.     busy {
  177.     $this updateRepositories
  178.         $this reload
  179.     }
  180. }
  181.  
  182. method CorpManView::updateRepositories {this} {
  183.     set previousName [[$this repositories] selected]
  184.  
  185.     [$this repositories] entrySet \
  186.     [concat <none> [[$this rep] getAvailableRepositories]]
  187.  
  188.     if {$previousName != ""} {
  189.     [$this repositories] selected $previousName
  190.     }
  191. }
  192.  
  193. method CorpManView::selectRepository {this name} {
  194.     if {$name == ""} {
  195.         [$this repositories] selected "<none>"
  196.     } else {
  197.     [$this repositories] selected $name
  198.     }
  199.     $this selectionChanged
  200. }
  201.  
  202. method CorpManView::setRepository {this name} {
  203.     [$this rep] setCurrent ""
  204.     set error ""
  205.     if {$name != "<none>"} {
  206.     if [catch {[$this rep] setCurrent $name} error] {
  207.         $this message "Cannot access repository '$name'."
  208.             $this contextError $error
  209.     } else {
  210.         $this message "Selected repository '$name'."
  211.             $this contextError ""
  212.     }
  213.     [$this menuHandler] levelChanged
  214.     catch {[$this menuHandler] setCurrentContext}
  215.     if {$error != 0} {
  216.             $this error $error
  217.             return 0
  218.     }
  219.  
  220.         return 1
  221.     } else {
  222.     $this message "No repository selected."
  223.     $this contextError ""
  224.     }
  225.     return 0
  226. }
  227.  
  228. method CorpManView::reload {this} {
  229.     set sel [[$this repositories] selected]
  230.     $this setRepository $sel
  231.  
  232.     set name [[$this rep] currentName]
  233.     set corp [[$this rep] currentCorporate]
  234.  
  235.     if [$corp isNil] {
  236.         if {$name == "" || $name == "<none>"} {
  237.         [$this info] text ""
  238.             return
  239.         }
  240.     }
  241.  
  242.     # Setup default values.
  243.     #
  244.     set nameInDb    ""
  245.     set locationInDb    ""
  246.     set location    ""
  247.     set owner        ""
  248.     set objectId    ""
  249.     set release        ""
  250.  
  251.     set dbDir        ""
  252.     set dbName        ""
  253.     set dbUser        ""
  254.     set dbPassword    ""
  255.     set dbHost        ""
  256.     set dbServer    ""
  257.  
  258.     set serverId    ""
  259.     set serverVersion    ""
  260.     set serverPolicy    ""
  261.     set serverProtocol    ""
  262.     set serverExecutable ""
  263.     set serverCmdLine    ""
  264.     set serverHost    ""
  265.  
  266.     # Retrieve all info that can be gotten.
  267.     #
  268.     if [$corp isNil] {
  269.         set gotServer [[$this rep] getServerByName $name serverDef]
  270.         if $gotServer {
  271.         set gotOpts [[$this rep] getInfoFromCmdLine $serverDef(id) \
  272.                                                         $serverDef(cmdline) \
  273.                                                         cmdLine]
  274.     } else {
  275.             set gotOpts 0
  276.         }
  277.  
  278.     # Get uncrypted password from passwordDialog since
  279.     # getInfoFromDatabase needs it.
  280.     #
  281.     if [RepositoryDBMS::hasPassword] {
  282.         set pwDialog [$this passwordDialog]
  283.         if {$pwDialog != ""} {
  284.         set cmdLine(dbpassword) [$pwDialog plainPassword]
  285.         }
  286.     }
  287.  
  288.         if $gotOpts {
  289.         set gotDb [[$this rep] getInfoFromDatabase \
  290.                                         cmdLine $cmdLine(dbname) dbInfo]
  291.         } else {
  292.             set gotDb 0
  293.     }
  294.  
  295.         if $gotDb {
  296.         set nameInDb    $dbInfo(name)
  297.         set locationInDb    [path_name concat $dbInfo(location) $nameInDb]
  298.         set location    $locationInDb
  299.         if [catch {set owner [BasicFS::owner $locationInDb]} error] {
  300.         $this error $error
  301.         }
  302.             if {$owner == "everyone"} {
  303.                 set owner ""
  304.             }
  305.         set objectId    $dbInfo(id)
  306.         set release        $dbInfo(productRelease)
  307.         }
  308.  
  309.         if $gotOpts {
  310.         set dbDir        $cmdLine(dbdir)
  311.         set dbName        $cmdLine(dbname)
  312.         set dbUser        $cmdLine(dbuser)
  313.         set dbPassword    [ORB::cryptPassword $cmdLine(dbpassword)]
  314.         set dbHost        $cmdLine(dbhost)
  315.         set dbServer    $cmdLine(dbserver)
  316.         }
  317.  
  318.         if $gotServer {
  319.         set serverId    $serverDef(id)
  320.         set serverVersion    $serverDef(version)
  321.         set serverPolicy    $serverDef(policy)
  322.         set serverProtocol    $serverDef(protocol)
  323.         set serverExecutable $serverDef(executable)
  324.         set serverCmdLine    $serverDef(cmdline)
  325.         set serverHost    $serverDef(host)
  326.         }
  327.     } else {
  328.         set gotServer [[$this rep] getServerByObject [$corp identity] serverDef]
  329.         set gotOpts 1
  330.         set gotDb 1
  331.  
  332.         set nameInDb        [$corp name]
  333.         set locationInDb    [path_name concat [$corp location] $nameInDb]
  334.         set location        [path_name concat [$corp location] $name]
  335.         set owner        [[$this rep] currentOwner]
  336.         set objectId        [$corp identity]
  337.         set release        [$corp productRelease]
  338.  
  339.         set dbDir        [$corp databaseDirectory]
  340.         set dbName        [$corp databaseName]
  341.         set dbUser        [$corp databaseUser]
  342.         set dbPassword        [$corp databasePassword]
  343.         set dbHost        [$corp databaseHost]
  344.         set dbServer        [$corp databaseServer]
  345.  
  346.         if $gotServer {
  347.         set serverId    $serverDef(id)
  348.         set serverVersion    $serverDef(version)
  349.         set serverPolicy    $serverDef(policy)
  350.         set serverProtocol    $serverDef(protocol)
  351.         set serverExecutable $serverDef(executable)
  352.         set serverCmdLine    $serverDef(cmdline)
  353.         set serverHost    $serverDef(host)
  354.         }
  355.     }
  356.  
  357.     set info [$this infoSection]
  358.     $info clear
  359.  
  360.     # Repository info.
  361.     #
  362.     set locationExists ""
  363.     if {$location != "<unknown>"} {
  364.     if ![file exists $location] {
  365.         set locationExists " (NOT FOUND)"
  366.     }
  367.     }
  368.  
  369.     set locationInDbExists ""
  370.     if {$locationInDb != "<unknown>"} {
  371.     if ![file exists $locationInDb] {
  372.         set locationInDbExists " (NOT FOUND)"
  373.     }
  374.     }
  375.  
  376.     $info addHeader "Repository"
  377.     $info addItem "Name" $name
  378.  
  379.     if {$location != ""} {
  380.     $info addItem "Directory" ${location}${locationExists}
  381.     }
  382.  
  383.     if {$locationInDb != ""} {
  384.     if {$location != $locationInDb} {
  385.         $info addItem "Directory in db" ${locationInDb}${locationInDbExists}
  386.     }
  387.     }
  388.  
  389.     if {$owner != ""} {
  390.     $info addItem "Owned by user" $owner
  391.     }
  392.  
  393.     if {$objectId != ""} {
  394.     $info addItem "Identity" $objectId
  395.     }
  396.  
  397.     if {$release != ""} {
  398.     $info addItem "Version" $release
  399.     }
  400.  
  401.  
  402.     # Database info.
  403.     #
  404.     if $gotDb {
  405.         set dbNotFound ""
  406.     } else {
  407.         if {$dbName == ""} {
  408.         set dbNotFound "(UNKNOWN)"
  409.         } else {
  410.         set dbNotFound " (NOT FOUND)"
  411.         }
  412.     }
  413.  
  414.     $info addHeader "Database"
  415.  
  416.     if {[RepositoryDBMS::shortName] == "ora"} {
  417.         set label "Connect String"
  418.     } else {
  419.     set label "Name"
  420.     }
  421.     $info addItem $label "${dbName}${dbNotFound}"
  422.  
  423.     if [RepositoryDBMS::hasDirectory] {
  424.         if {$dbDir != ""} {
  425.         $info addItem "Directory" $dbDir
  426.         }
  427.     }
  428.     if [RepositoryDBMS::hasUser] {
  429.         if {$dbUser != ""} {
  430.         $info addItem "User" $dbUser
  431.         }
  432.     }
  433.     if [RepositoryDBMS::hasPassword] {
  434.         if {$dbPassword != ""} {
  435.         $info addItem "Password" $dbPassword
  436.         }
  437.     }
  438.     if [RepositoryDBMS::hasHost] {
  439.         if {$dbHost != ""} {
  440.         $info addItem "Host" $dbHost
  441.         }
  442.     }
  443.     if [RepositoryDBMS::hasServer] {
  444.         if {$dbServer != ""} {
  445.         $info addItem "Server" $dbServer
  446.         }
  447.     }
  448.  
  449.     # Server Entry info.
  450.     #
  451.     $info addHeader "Server Definition"
  452.     $info addItem "Implementation Id" ${serverId}.${serverVersion}
  453.     $info addItem "Policy" $serverPolicy
  454.     $info addItem "Protocol" $serverProtocol
  455.     $info addItem "Executable Path" $serverExecutable
  456.     $info addItem "Command Line" $serverCmdLine
  457.     $info addItem "Host" $serverHost
  458.  
  459.     $info format
  460.  
  461.     [$this info] text [$info contents]
  462. }
  463.  
  464. method CorpManView::setFont {this font} {
  465.     [$this info] font $font
  466.  
  467.     $this RepToolView::setFont $font
  468. }
  469.  
  470. method CorpManView::getFont {this} {
  471.     return [[$this info] font]
  472. }
  473.  
  474. method CorpManView::fileNew {this} {
  475.     if {[$this newDialog] == ""} {
  476.         $this newDialog [RepNewDialog new $this.repnewdlg $this]
  477.     }
  478.     [$this newDialog] popUp
  479. }
  480.  
  481. method CorpManView::fileDelete {this} {
  482.     if {[$this deleteDialog] == ""} {
  483.         $this deleteDialog [RepDeleteDialog new $this.repdeldlg $this]
  484.     }
  485.     [$this deleteDialog] popUp
  486. }
  487.  
  488. method CorpManView::fileOpen {this} {
  489.     $this message "Starting browser..."
  490.     SystemUtilities::fork otk desk -c [get_comm_name]
  491. }
  492.  
  493. method CorpManView::fileChangeName {this} {
  494.     if {[$this changeDialog] == ""} {
  495.         $this changeDialog [RepChangeDialog new $this.repchangedlg $this]
  496.     }
  497.     [$this changeDialog] popUp
  498. }
  499.  
  500. method CorpManView::fileChangeServerEntry {this} {
  501.     if {[$this changeEntryDialog] == ""} {
  502.         set rep [$this rep]
  503.  
  504.         set corp [$rep currentCorporate]
  505.         if [$corp isNil] {
  506.             if [$rep getServerByName [$rep currentName] serverDef] {
  507.                 set fullId $serverDef(fullId)
  508.             } else {
  509.                 $this error "Could not find server definition for\
  510.                              '[$rep currentName]'."
  511.                 return
  512.             }
  513.         } else {
  514.         set list [ORB::decodeObjectId [$corp identity]]
  515.         set fullId [ORB::makeImplemId [lindex $list 1] [lindex $list 2]]
  516.     }
  517.  
  518.     set name entrydlg-[[$this rep] currentName]
  519.         $this changeEntryDialog [CSEntryDialog new \
  520.                 $this.$name $this $fullId "" \
  521.                 -helpPressed "$this helpOnName changeRepositoryEntry"]
  522.  
  523.         [$this changeEntryDialog] okPressed {
  524.         %this ok
  525.             [%this view] selectionChanged
  526.         }
  527.     }
  528.     [$this changeEntryDialog] popUp
  529. }
  530.  
  531. method CorpManView::fileOptimize {this} {
  532.     if {[$this optimDialog] == ""} {
  533.         $this optimDialog [RepOptimDialog new $this.repoptimdlg $this]
  534.     }
  535.     [$this optimDialog] popUp
  536. }
  537.  
  538. method CorpManView::fileBackup {this} {
  539.     if {[$this backupDialog] == ""} {
  540.         $this backupDialog [RepBackupDialog new $this.repbackupdlg $this]
  541.     }
  542.     [$this backupDialog] popUp
  543. }
  544.  
  545. method CorpManView::fileRestore {this} {
  546.     if {[$this restoreDialog] == ""} {
  547.         $this restoreDialog [RepRestoreDialog new $this.represtoredlg $this]
  548.     }
  549.     [$this restoreDialog] popUp
  550. }
  551.  
  552. method CorpManView::optionsArchiveCmd {this} {
  553.     set dlg [EntryDialog new $this.optarchcmd \
  554.         -title "Archive Command" \
  555.         -message "Command to archive a repository directory:" \
  556.         -entry [m4_var get M4_archive_cmd] \
  557.         -okPressed { m4_var set M4_archive_cmd [%this entry] } \
  558.     -helpPressed "$this helpOnName archiveCommand"]
  559.     $dlg popUp
  560. }
  561.  
  562. method CorpManView::optionsUnarchiveCmd {this} {
  563.     set dlg [EntryDialog new $this.optunarchcmd \
  564.         -title "Unarchive Command" \
  565.         -message "Command to unarchive a repository directory:" \
  566.         -entry [m4_var get M4_unarchive_cmd] \
  567.         -okPressed { m4_var set M4_unarchive_cmd [%this entry] } \
  568.     -helpPressed "$this helpOnName unarchiveCommand"]
  569.     $dlg popUp
  570. }
  571.  
  572. method CorpManView::helpOnContext {this} {
  573.     $this helpOnName repToolCorpManView
  574. }
  575.  
  576. # Do not delete this line -- regeneration end marker
  577.  
  578.