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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)corpmanvie.tcl    /main/titanic/20
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)corpmanvie.tcl    /main/titanic/20   19 Nov 1997 Copyright 1997 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. require "repprojbro.tcl"
  22. require "repmodelbr.tcl"
  23. # End user added include file section
  24.  
  25. require "reptoolvie.tcl"
  26.  
  27. Class CorpManView : {RepToolView} {
  28.     method destructor
  29.     constructor
  30.     method initialize
  31.     method selectedObjSet
  32.     method selectionChanged
  33.     method update
  34.     method updateRepositories
  35.     method selectRepository
  36.     method setRepository
  37.     method reload
  38.         method makeDefault
  39.     method setFont
  40.     method getFont
  41.     method validCorporate
  42.     method fileNew
  43.     method fileDelete
  44.     method fileOpen
  45.     method fileChangeName
  46.     method fileChangeServerEntry
  47.     method fileChangeProjectStatus
  48.     method fileChangeModelReservation
  49.     method fileMakeDefault
  50.     method fileOptimize
  51.     method fileBackup
  52.     method fileRestore
  53.     method optionsArchiveCmd
  54.     method optionsUnarchiveCmd
  55.     method helpOnContext
  56.     attribute selectError
  57.     attribute repositories
  58.     attribute info
  59.     attribute infoSection
  60.     attribute newDialog
  61.     attribute deleteDialog
  62.     attribute changeDialog
  63.     attribute changeEntryDialog
  64.     attribute optimDialog
  65.     attribute restoreModelDialog
  66.     attribute restoreProjectDialog
  67.     attribute restoreCorporateDialog
  68.     attribute backupModelDialog
  69.     attribute backupProjectDialog
  70.     attribute backupCorporateDialog
  71.     attribute archive_cmdContexts
  72.     attribute unarchive_cmdContexts
  73. }
  74.  
  75. method CorpManView::destructor {this} {
  76.     # Start destructor user section
  77.     # End destructor user section
  78.     $this RepToolView::destructor
  79. }
  80.  
  81. constructor CorpManView {class this name} {
  82.     set this [RepToolView::constructor $class $this $name repcorp]
  83.  
  84.         $this setTitle "Corporate Management" rep_corp_64
  85.         $this infoSection [RepInfoSection new $this]
  86.         $this firstExposed "$this initialize"
  87.  
  88.         # Create main interface part.
  89.         #
  90.         interface DlgColumn $this.gui.col {
  91.             HorSeparator h {
  92.             }
  93.             DlgRow reps {
  94.         spaceType NONE
  95.         verStretchFactor 0
  96.         verShrinkFactor 0
  97.         Label l { text "Repository:" }
  98.         OptionMenu reps {
  99.             horStretchFactor 100
  100.             justification CENTER
  101.             entrySet "<none>"
  102.         }
  103.             }
  104.         MultiLineText info {
  105.         verStretchFactor 100
  106.         verShrinkFactor 100
  107.         editable 0
  108.         columnCount 80
  109.         rowCount 24
  110.         }
  111.     }
  112.  
  113.         $this repositories $this.gui.col.reps.reps
  114.         $this info $this.gui.col.info
  115.         [$this info] font [$this getFont]
  116.         [$this repositories] selectionChanged "$this selectionChanged"
  117.  
  118.     return $this
  119. }
  120.  
  121. proc CorpManView::repToolClass {} {
  122.     return "CorpManView"
  123. }
  124.  
  125. method CorpManView::initialize {this} {
  126.     busy {
  127.         set selected "<none>"
  128.  
  129.         # No level path should be set at this point.
  130.         #
  131.     catch {set cc [ClientContext::global]}
  132.     catch {set cc [ClientContext::global]}
  133.  
  134.         # Set the client context based on passed levelPath options.
  135.         # Be careful about finding the selected repository name.
  136.         #
  137.     if {[$this levelPathIds] != ""} {
  138.         if [catch {
  139.                 $cc setLevelIds [$this levelPathIds]
  140.         set corp [$cc currentCorporate]
  141.         if ![$corp isNil] {
  142.             set selected [$corp name]
  143.         }
  144.             } error] {
  145.                 $this warning $error
  146.             }
  147.     } elseif {[$this levelPath] != ""} {
  148.         if [catch {$cc setLevelPath [$this levelPath]} error] {
  149.                 $this warning $error
  150.             }
  151.         regexp {^/([^/]*)} [$this levelPath] dummy selected
  152.     }
  153.  
  154.         # Select the repository.
  155.         #
  156.     [$this repositories] entrySet \
  157.         [concat <none> [[$this rep] getAvailableRepositories]]
  158.     [$this repositories] selected $selected
  159.         $this selectionChanged
  160.     }
  161. }
  162.  
  163. method CorpManView::selectedObjSet {this} {
  164.     set sel [[$this repositories] selected]
  165.     if {$sel == "<none>"} {
  166.         return ""
  167.     }
  168.     return $sel
  169. }
  170.  
  171. method CorpManView::selectionChanged {this} {
  172.     busy {
  173.     $this newDialog ""
  174.     $this deleteDialog ""
  175.     $this changeDialog ""
  176.     $this changeEntryDialog ""
  177.     $this optimDialog ""
  178.     $this backupCorporateDialog ""
  179.     $this backupProjectDialog ""
  180.     $this backupModelDialog ""
  181.     $this restoreCorporateDialog ""
  182.     $this restoreProjectDialog ""
  183.     $this restoreModelDialog ""
  184.  
  185.     $this reload
  186.         $this setTitle [[$this repositories] selected]
  187.  
  188.         # Can only call module stuff after m4path has been set.
  189.         #
  190.         set archiveContexts {"" corporate}
  191.         if [$this projectsEnabled] {
  192.             lappend archiveContexts project
  193.         }
  194.         if [$this modelsEnabled] {
  195.             lappend archiveContexts model
  196.         }
  197.     $this setContexts archive_cmd $archiveContexts
  198.     $this setContexts unarchive_cmd $archiveContexts
  199.  
  200.     $this RepToolView::selectionChanged
  201.     }
  202. }
  203.  
  204. method CorpManView::update {this} {
  205.     busy {
  206.     $this updateRepositories
  207.         $this reload
  208.     }
  209. }
  210.  
  211. method CorpManView::updateRepositories {this} {
  212.     set previousName [[$this repositories] selected]
  213.  
  214.     [$this repositories] entrySet \
  215.     [concat <none> [[$this rep] getAvailableRepositories]]
  216.  
  217.     if {$previousName != ""} {
  218.     [$this repositories] selected $previousName
  219.     }
  220. }
  221.  
  222. method CorpManView::selectRepository {this name} {
  223.     if {$name == ""} {
  224.         [$this repositories] selected "<none>"
  225.     } else {
  226.     [$this repositories] selected $name
  227.     }
  228.     $this selectionChanged
  229. }
  230.  
  231. method CorpManView::setRepository {this name} {
  232.     [$this rep] setCurrent ""
  233.     set error ""
  234.     if {$name != "<none>"} {
  235.     if [catch {[$this rep] setCurrent $name} error] {
  236.         $this message "Cannot access repository '$name'."
  237.             $this contextError $error
  238.     } else {
  239.         $this message "Selected repository '$name'."
  240.             $this contextError ""
  241.     }
  242.     if {$error != 1} {
  243.             $this error $error
  244.             return 0
  245.     }
  246.  
  247.     catch {[$this menuHandler] levelChanged}
  248.     catch {[$this menuHandler] setCurrentContext}
  249.  
  250.         return 1
  251.     } else {
  252.     $this message "No repository selected."
  253.     $this contextError ""
  254.     }
  255.     return 0
  256. }
  257.  
  258. method CorpManView::reload {this} {
  259.     set sel [[$this repositories] selected]
  260.     $this setRepository $sel
  261.  
  262.     set name [[$this rep] currentName]
  263.     set corp [[$this rep] currentCorporate]
  264.  
  265.     if [$corp isNil] {
  266.         if {$name == "" || $name == "<none>"} {
  267.         [$this info] text ""
  268.             return
  269.         }
  270.     }
  271.  
  272.     # Setup default values.
  273.     #
  274.     set nameInDb    ""
  275.     set locationInDb    ""
  276.     set location    ""
  277.     set fsPath        "UNKNOWN"
  278.     set owner        ""
  279.     set objectId    ""
  280.     set release        ""
  281.  
  282.     set dbVendor    ""
  283.     set dbDir        ""
  284.     set dbName        ""
  285.     set dbUser        ""
  286.     set dbPassword    ""
  287.     set dbHost        ""
  288.     set dbServer    ""
  289.  
  290.     set serverId    ""
  291.     set serverVersion    ""
  292.     set serverPolicy    ""
  293.     set serverProtocol    ""
  294.     set serverExecutable ""
  295.     set serverCmdLine    ""
  296.     set serverHost    ""
  297.  
  298.     # Retrieve all info that can be gotten.
  299.     #
  300.     if [$corp isNil] {
  301.         set gotServer [[$this rep] getServerByName $name serverDef]
  302.         if $gotServer {
  303.         set gotOpts [[$this rep] getInfoFromCmdLine $serverDef(id) \
  304.                                                         $serverDef(cmdline) \
  305.                                                         cmdLine]
  306.     } else {
  307.             set gotOpts 0
  308.         }
  309.  
  310.     # Get uncrypted password from passwordDialog since
  311.     # getInfoFromDatabase needs it.
  312.     #
  313.     if [RepositoryDBMS::hasPassword] {
  314.         set pwDialog [$this passwordDialog]
  315.         if {$pwDialog != ""} {
  316.         set cmdLine(dbpassword) [$pwDialog plainPassword]
  317.         }
  318.     }
  319.  
  320.         if $gotOpts {
  321.         set gotDb [[$this rep] getInfoFromDatabase \
  322.                                         cmdLine $cmdLine(dbname) dbInfo]
  323.         } else {
  324.             set gotDb 0
  325.     }
  326.  
  327.         if $gotDb {
  328.         set nameInDb    $dbInfo(name)
  329.         set locationInDb    [path_name concat $dbInfo(location) $nameInDb]
  330.         set location    $locationInDb
  331.         set owner        [BasicFS::owner $locationInDb]
  332.             if {$owner == "everyone"} {
  333.                 set owner ""
  334.             }
  335.         set objectId    $dbInfo(id)
  336.         set release        $dbInfo(productRelease)
  337.         }
  338.  
  339.         if $gotOpts {
  340.         set dbDir        $cmdLine(dbdir)
  341.         set dbName        $cmdLine(dbname)
  342.         set dbUser        $cmdLine(dbuser)
  343.         set dbPassword    [ORB::cryptPassword $cmdLine(dbpassword)]
  344.         set dbHost        $cmdLine(dbhost)
  345.         set dbServer    $cmdLine(dbserver)
  346.         }
  347.  
  348.         if $gotServer {
  349.         set serverId    $serverDef(id)
  350.         set serverVersion    $serverDef(version)
  351.         set serverPolicy    $serverDef(policy)
  352.         set serverProtocol    $serverDef(protocol)
  353.         set serverExecutable $serverDef(executable)
  354.         set serverCmdLine    $serverDef(cmdline)
  355.         set serverHost    $serverDef(host)
  356.         }
  357.     } else {
  358.         set gotServer [[$this rep] getServerByObject [$corp identity] serverDef]
  359.         set gotOpts 1
  360.         set gotDb 1
  361.  
  362.         set nameInDb        [$corp name]
  363.         set locationInDb    [path_name concat [$corp location] $nameInDb]
  364.         set location        [path_name concat [$corp location] $name]
  365.         set fsPath        [$corp getPropertyValue fileSystemPath]
  366.         set owner        [[$this rep] currentOwner]
  367.         set objectId        [$corp identity]
  368.         set release        [$corp productRelease]
  369.  
  370.         switch -- [$corp databaseVendor] {
  371.             informix    { set dbVendor "Informix" }
  372.             oracle    { set dbVendor "Oracle" }
  373.             sqlany    { set dbVendor "Sybase SQL Anywhere" }
  374.         }
  375.  
  376.         set dbDir        [$corp databaseDirectory]
  377.         set dbName        [$corp databaseName]
  378.         set dbUser        [$corp databaseUser]
  379.         set dbPassword        [$corp databasePassword]
  380.         set dbHost        [$corp databaseHost]
  381.         set dbServer        [$corp databaseServer]
  382.  
  383.         if $gotServer {
  384.         set serverId    $serverDef(id)
  385.         set serverVersion    $serverDef(version)
  386.         set serverPolicy    $serverDef(policy)
  387.         set serverProtocol    $serverDef(protocol)
  388.         set serverExecutable $serverDef(executable)
  389.         set serverCmdLine    $serverDef(cmdline)
  390.         set serverHost    $serverDef(host)
  391.         }
  392.     }
  393.  
  394.     set info [$this infoSection]
  395.     $info clear
  396.  
  397.     # Repository info.
  398.     #
  399.     set locationExists ""
  400.     if {$location != "<unknown>"} {
  401.     if ![file exists $location] {
  402.         set locationExists " (NOT FOUND)"
  403.     }
  404.     }
  405.  
  406.     set locationInDbExists ""
  407.     if {$locationInDb != "<unknown>"} {
  408.     if ![file exists $locationInDb] {
  409.         set locationInDbExists " (NOT FOUND)"
  410.     }
  411.     }
  412.  
  413.     $info addHeader "Repository"
  414.     $info addItem "Name" $name
  415.  
  416.     if {$location != ""} {
  417.     $info addItem "Directory" ${location}${locationExists}
  418.     }
  419.  
  420.     if {$locationInDb != ""} {
  421.     if {$location != $locationInDb} {
  422.         $info addItem "Directory In DB" ${locationInDb}${locationInDbExists}
  423.     }
  424.     }
  425.  
  426.     if {$owner != ""} {
  427.     $info addItem "Owned By User" $owner
  428.     }
  429.  
  430.     if {$objectId != ""} {
  431.     $info addItem "Identity" $objectId
  432.     }
  433.  
  434.     if {$fsPath != "UNKNOWN"} {
  435.     $info addItem "User Environment Root" $fsPath
  436.     }
  437.  
  438.     if {$release != ""} {
  439.     $info addItem "Version" $release
  440.     }
  441.  
  442.  
  443.     # Database info.
  444.     #
  445.     if $gotDb {
  446.         set dbNotFound ""
  447.     } else {
  448.         if {$dbName == ""} {
  449.         set dbNotFound "(UNKNOWN)"
  450.         } else {
  451.         set dbNotFound " (NOT FOUND)"
  452.         }
  453.     }
  454.  
  455.     $info addHeader "Database"
  456.  
  457.     if {$dbVendor != ""} {
  458.         $info addItem "Vendor" $dbVendor
  459.     }
  460.  
  461.     if {[RepositoryDBMS::shortName] == "ora"} {
  462.         set label "Connect String"
  463.     } else {
  464.     set label "Name"
  465.     }
  466.     $info addItem $label "${dbName}${dbNotFound}"
  467.  
  468.     if [RepositoryDBMS::hasDirectory] {
  469.         if {$dbDir != ""} {
  470.         $info addItem "Directory" $dbDir
  471.         }
  472.     }
  473.     if [RepositoryDBMS::hasUser] {
  474.         if {$dbUser != ""} {
  475.         $info addItem "User" $dbUser
  476.         }
  477.     }
  478.     if [RepositoryDBMS::hasPassword] {
  479.         if {$dbPassword != ""} {
  480.         $info addItem "Password" $dbPassword
  481.         }
  482.     }
  483.     if [RepositoryDBMS::hasHost] {
  484.         if {$dbHost != ""} {
  485.         $info addItem "Host" $dbHost
  486.         }
  487.     }
  488.     if [RepositoryDBMS::hasServer] {
  489.         if {$dbServer != ""} {
  490.         $info addItem "Server" $dbServer
  491.         }
  492.     }
  493.  
  494.     # Server Entry info.
  495.     #
  496.     $info addHeader "Server Definition"
  497.     $info addItem "Implementation Id" ${serverId}.${serverVersion}
  498.     $info addItem "Policy" $serverPolicy
  499.     $info addItem "Protocol" $serverProtocol
  500.     $info addItem "Executable Path" $serverExecutable
  501.     $info addItem "Command Line" $serverCmdLine
  502.     $info addItem "Host" $serverHost
  503.  
  504.     $info format
  505.  
  506.     [$this info] text [$info contents]
  507. }
  508.  
  509. method CorpManView::setFont {this font} {
  510.     [$this info] font $font
  511.  
  512.     $this RepToolView::setFont $font
  513. }
  514.  
  515. method CorpManView::getFont {this} {
  516.     return [m4_var get M4_font -context repcorp]
  517. }
  518.  
  519. method CorpManView::makeDefault {this repName} {
  520.     set m4env [path_name concat \
  521.     [location [m4_var get M4_home] etc] m4env m4env]
  522.  
  523.     set m4add "M4_levelpath=/$repName;RW\n"
  524.  
  525.     if [file exists $m4env] {
  526.     set m4old [BasicFS::readFile $m4env]
  527.  
  528.     if ![regsub {M4_levelpath=[^;]*;} $m4old \
  529.            "M4_levelpath=/$repName;" m4new] {
  530.  
  531.             # Not present yet, it must be added.
  532.             #
  533.             set m4new $m4add$m4new
  534.         }
  535.  
  536.     # Remove any existing levelpath with ids, since it does
  537.     # no longer correspond with the new corporate object.
  538.     #
  539.     regsub "M4_levelpath_ids=\[^;]*;\[RP]\[WO]\[\n]" $m4new "" m4new
  540.     } else {
  541.     set m4new $m4add
  542.     }
  543.  
  544.     BasicFS::writeFile $m4env $m4new
  545. }
  546.  
  547. method CorpManView::validCorporate {this} {
  548.     set corp [[$this rep] currentCorporate]
  549.     if [$corp isNil] {
  550.         return 0
  551.     }
  552.     return 1
  553. }
  554.  
  555. method CorpManView::fileNew {this} {
  556.     if {[$this newDialog] == ""} {
  557.         $this newDialog [RepNewDialog new $this.repnewdlg $this]
  558.     }
  559.     [$this newDialog] popUp
  560. }
  561.  
  562. method CorpManView::fileDelete {this} {
  563.     if {[$this deleteDialog] == ""} {
  564.         $this deleteDialog [RepDeleteDialog new $this.repdeldlg $this]
  565.     }
  566.     [$this deleteDialog] popUp
  567. }
  568.  
  569. method CorpManView::fileOpen {this} {
  570.     $this message "Starting browser..."
  571.     SystemUtilities::fork otk desk -c [get_comm_name]
  572. }
  573.  
  574. method CorpManView::fileChangeName {this} {
  575.     if {[$this changeDialog] == ""} {
  576.         $this changeDialog [RepChangeDialog new $this.repchangedlg $this]
  577.     }
  578.     [$this changeDialog] popUp
  579. }
  580.  
  581. method CorpManView::fileChangeServerEntry {this} {
  582.     if {[$this changeEntryDialog] == ""} {
  583.         set rep [$this rep]
  584.  
  585.         set corp [$rep currentCorporate]
  586.         if [$corp isNil] {
  587.             if [$rep getServerByName [$rep currentName] serverDef] {
  588.                 set fullId $serverDef(fullId)
  589.             } else {
  590.                 $this error "Could not find server definition for\
  591.                              '[$rep currentName]'."
  592.                 return
  593.             }
  594.         } else {
  595.         set list [ORB::decodeObjectId [$corp identity]]
  596.         set fullId [ORB::makeImplemId [lindex $list 1] [lindex $list 2]]
  597.     }
  598.  
  599.     set name entrydlg-[[$this rep] currentName]
  600.         $this changeEntryDialog [CSEntryDialog new \
  601.                 $this.$name $this $fullId "" \
  602.                 -helpPressed "$this helpOnName changeRepositoryEntry"]
  603.  
  604.         [$this changeEntryDialog] okPressed {
  605.         %this ok
  606.             [%this view] selectionChanged
  607.         }
  608.     }
  609.     [$this changeEntryDialog] popUp
  610. }
  611.  
  612. method CorpManView::fileChangeProjectStatus {this} {
  613.     set dlg $this.projectbrowser
  614.     if ![isCommand $dlg] {
  615.         RepProjBrowser new $dlg $this
  616.         $dlg delCancelButton
  617.     }
  618.     $dlg popUp
  619. }
  620.  
  621. method CorpManView::fileChangeModelReservation {this} {
  622.     set dlg $this.modelbrowser
  623.     if ![isCommand $dlg] {
  624.         RepModelBrowser new $dlg $this
  625.         $dlg delCancelButton
  626.     }
  627.     $dlg popUp
  628. }
  629.  
  630. method CorpManView::fileMakeDefault {this} {
  631.     set repName [[$this rep] currentName]
  632.  
  633.     global classCount
  634.     set makeDefault $this.makedefault$classCount
  635.     incr classCount
  636.     set dlg [QuestionDialog new $makeDefault \
  637.     -title "Set Default Repository" \
  638.     -message "Should the selected repository '$repName' be made the default\
  639.                   repository?\nThis will write the line\
  640.                   'M4_levelpath=/$repName;RW' to the m4env.m4env file on\
  641.                   corporate level." \
  642.     -okPressed "$this makeDefault $repName"]
  643.  
  644.     $dlg delHelpButton
  645.     $dlg popUp
  646. }
  647.  
  648. method CorpManView::fileOptimize {this} {
  649.     if {[$this optimDialog] == ""} {
  650.         $this optimDialog [RepOptimDialog new $this.repoptimdlg $this]
  651.     }
  652.     [$this optimDialog] popUp
  653. }
  654.  
  655. method CorpManView::fileBackup {this object} {
  656.     set cap [string toupper [string index $object 0]][string \
  657.                                                 range $object 1 end]
  658.     set dlg backup${cap}Dialog
  659.  
  660.     if {[$this $dlg] == ""} {
  661.         $this $dlg [RepBackupDialog new $this.$dlg $this $object]
  662.     }
  663.     [$this $dlg] popUp
  664. }
  665.  
  666. method CorpManView::fileRestore {this object} {
  667.     set cap [string toupper [string index $object 0]][string \
  668.                                                 range $object 1 end]
  669.     set dlg restore${cap}Dialog
  670.  
  671.     if {[$this $dlg] == ""} {
  672.         $this $dlg [RepRestoreDialog new $this.$dlg $this $object]
  673.     }
  674.     [$this $dlg] popUp
  675. }
  676.  
  677. method CorpManView::optionsArchiveCmd {this} {
  678.     $this createBox archive_cmd 0
  679. }
  680.  
  681. method CorpManView::optionsUnarchiveCmd {this} {
  682.     $this createBox unarchive_cmd 0
  683. }
  684.  
  685. method CorpManView::helpOnContext {this} {
  686.     $this helpOnName repToolCorpManView
  687. }
  688.  
  689. # Do not delete this line -- regeneration end marker
  690.  
  691.