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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)drsdxlcomm.tcl    /main/titanic/7
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)drsdxlcomm.tcl    /main/titanic/7   12 Nov 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14.  
  15. Class DrsDxlCommand : {GCObject} {
  16.     constructor
  17.     method destructor
  18.     method execute
  19.     method newCommand
  20.     method command
  21.     method doorsInitialize
  22.     method doorsObjectTypeCreate
  23.     method doorsObjectAttributeCreate
  24.     method doorsProjConfigure
  25.     method doorsModuleConfigure
  26.     method doorsModuleEdit
  27.     method doorsViewSave
  28.     method doorsObjectFind
  29.     method doorsObjectDelete
  30.     method doorsObjectAttrSetValue
  31.     method doorsObjectAttrAppendValue
  32.     method doorsObjectCreateTopObject
  33.     method doorsObjectCreateChild
  34.     method doorsObjectAttrSave
  35.     method doorsObjectCreateLink
  36.     method doorsObjectDeleteLinks
  37.     method doorsObjectSetCurrent
  38.     method doorsResultSave
  39.     method doorsModuleSave
  40.     method doorsFilterOn
  41.     method doorsFilterOff
  42.     method doorsObjectShow
  43.     method doorsObjectHide
  44.     attribute channel
  45.     attribute firstOut
  46.     attribute varCounter
  47.     attribute mustBeDone
  48.     attribute commandSection
  49.     attribute oleObject
  50. }
  51.  
  52. constructor DrsDxlCommand {class this} {
  53.     set this [GCObject::constructor $class $this]
  54.     # Start constructor user section
  55.         if $win95 {
  56.             $this oleObject [OleAutoObject new "DOORS.Application"]
  57.         }
  58.         $this commandSection [TextSection new]
  59.         $this channel [args_file {} ]
  60.         $this firstOut 0
  61.         $this varCounter 1
  62.         $this mustBeDone 0
  63.     # End constructor user section
  64.     return $this
  65. }
  66.  
  67. method DrsDxlCommand::destructor {this} {
  68.     # Start destructor user section
  69.     set commandSection [$this commandSection]
  70.     unlink [$this channel]
  71.         if $win95 {
  72.             [$this oleObject] delete
  73.         }
  74.     # End destructor user section
  75. }
  76.  
  77. method DrsDxlCommand::execute {this {doorsModule ""}} {
  78.     catch OtkRegister::license
  79.     eval_encrypted .EJMDJMWGVhN2JeKzw.SFhSW18lRjNQW006V1pjU0tWVV9HYHJnWHtaVk1pNVZHSV4.UT1oZlZVUE5SNzI3QTVQOmdmYmRjSVZbXDxOU1NZL09RTk1IOzxXQGxqTklZTVc9R0FKVUhxY3tbUk83UjgyTlxDO1VQUkZgWylBQklPWUdfWz5YYjUqJTA5LEl9OSo2QzV3VGxPW0lgP0dPJj47Pl93Z15IVW5HVlRCJkBRRmU9QV9AVEJORE1AbGJnWUd1Y2M9UVRPTF5LYDdOWihBS0xRRlRQMUJcRmxfOnJeVFZaVV9wP0pPTVo8XmFPU01pPlNdRT5DTUAtZURITl0oUk8vVElN
  80.         if $win95 {
  81.             [$this oleObject] runFile $fileName
  82.         } else {
  83.             exec dxlsend "#include <$fileName>"
  84.         }
  85.         set returnFile [open [$this channel] r]
  86.         set returnValue [read $returnFile]
  87.         close $returnFile
  88.         unlink $fileName
  89.         $this mustBeDone 0
  90.         return $returnValue
  91. }
  92.  
  93. method DrsDxlCommand::newCommand {this} {
  94.         set commandSection [$this commandSection]
  95.         if [llength $commandSection] {
  96.             $commandSection delete
  97.         }
  98.         $this commandSection [TextSection new]
  99. }
  100.  
  101. method DrsDxlCommand::command {this} {
  102.     [$this commandSection] contents
  103. }
  104.  
  105. method DrsDxlCommand::doorsInitialize {this {refresh "true"}} {
  106.     $this commandSection [TextSection new]
  107.     regsub -all {\\} [$this channel] "/" dxlChannel
  108.     expand_text [$this commandSection] {
  109.         Module currentModule
  110.         bool storedFiltering
  111.         Link ln
  112.         int linked = 0
  113.         Object startObject
  114.         Object lastObject
  115.         Object searchObject
  116.         Stream outStream
  117.         int returnValue = 0
  118.         string attrValue
  119.         string projectName = ""
  120.         Project curProj = current
  121.         pragma runLim, 10000000
  122.         if (!null curProj) {
  123.             projectName = name curProj
  124.         } else {
  125.             ack "No DOORS project opened"
  126.             halt
  127.         }
  128.         string otDrsProjName = "~[m4_var get M4_doors_project]" 
  129.         if (projectName != otDrsProjName) {
  130.         if ("~$refresh" == "true") {
  131.             ack "New project selected, first Refresh Project"
  132.             halt
  133.         }
  134.         }
  135.  
  136.         int searchNo
  137.         int found
  138.         outStream = write "~${dxlChannel}"
  139.  
  140.  
  141.  
  142.         Object findObject (int searchNo) {
  143.         Object searchObject
  144.         startObject = current
  145.         searchObject = startObject
  146.         int returnValue
  147.         found = 0
  148.         returnValue = searchObject."Absolute Number"
  149.                 if (returnValue == searchNo) {
  150.                     return searchObject
  151.                 }
  152.                 for searchObject in startObject do {
  153.                     returnValue = searchObject."Absolute Number"
  154.                     if (returnValue == searchNo) {
  155.                         return searchObject
  156.                     }
  157.                 }
  158.  
  159.         while (found == 0 && !(null searchObject)) {
  160.             returnValue = searchObject."Absolute Number"
  161.             if (returnValue == searchNo) {
  162.             return searchObject
  163.             }
  164.             else
  165.             searchObject = parent searchObject
  166.         }
  167.         startObject = currentModule last
  168.         searchObject = startObject
  169.         returnValue = searchObject."Absolute Number"
  170.         if (returnValue == searchNo) {
  171.             return searchObject
  172.         }
  173.         else
  174.             searchObject = previous searchObject
  175.         while (searchObject!=startObject && !(null searchObject)) {
  176.             returnValue = searchObject."Absolute Number"
  177.             if (returnValue == searchNo)  {
  178.             return searchObject
  179.             } else
  180.             searchObject = previous searchObject
  181.         }
  182.         ack "Object with Object Identifier ", searchNo, "not found"
  183.         }
  184.  
  185.     }
  186. }
  187.  
  188. method DrsDxlCommand::doorsObjectTypeCreate {this attrName type} {
  189.     $this mustBeDone 1
  190.     expand_text [$this commandSection] {
  191.         create object type "~$type" attribute "~$attrName"
  192.     }
  193. }
  194.  
  195. method DrsDxlCommand::doorsObjectAttributeCreate {this attrSection attrNames modName} {
  196.     foreach attribute $attrNames {
  197.         expand_text $attrSection {
  198.         if (!exists attribute "~$attribute") {
  199.             create object attribute "~$attribute" type "text"
  200.             ack "In formal module ~$modName the  ~$attribute attribute is created"
  201.         }
  202.         }
  203.     }
  204. }
  205.  
  206. method DrsDxlCommand::doorsProjConfigure {this userAttributes} {
  207.     $this mustBeDone 1
  208.     set functionBody [TextSection new]
  209.     set formModName [m4_var get M4_doors_formal_module]
  210.     $this doorsModuleConfigure $functionBody  $formModName "formalModule" \
  211.                         "ObjectTeam reference"
  212.     set attrs  "SelectedItems ParentOTVersions OTType OTEditorTypes \
  213.                             OTViews $userAttributes"
  214.     $this doorsObjectAttributeCreate $functionBody $attrs $formModName 
  215.     expand_text $functionBody {
  216.         save newMod
  217.     }
  218.     set linkMod [m4_var get M4_doors_trace_link_module]
  219.     $this doorsModuleConfigure $functionBody $linkMod "linkModule" \
  220.             "ObjectTeam Interphase links" $formModName $formModName
  221.     set linkMod [m4_var get M4_doors_connections_link_module]
  222.     $this doorsModuleConfigure $functionBody $linkMod "linkModule"  \
  223.         "ObjectTeam object connections" $formModName $formModName \
  224.                             "manyToMany"
  225.     expand_text [$this commandSection] {
  226.         void createModules () {
  227.                 ~[$functionBody contents]
  228.         }
  229.     }
  230.     expand_text [$this commandSection] {
  231.         Project curProj = current
  232.         if (null curProj) {
  233.                 ack "No DOORS project opend"
  234.         halt
  235.         }  else {
  236.                 createModules
  237.         }
  238.     }
  239. }
  240.  
  241. method DrsDxlCommand::doorsModuleConfigure {this modSection modName modType comment {fromModule ""} {toModule ""} {linkRelation "manyToOne"}} {
  242.     if {$modType == "formalModule" } {
  243.         expand_text $modSection {
  244.         Module newMod = current
  245.         if (exists module "~$modName") {
  246.             ack "Formal module ~$modName not created. It already exists"
  247.             newMod = edit "~$modName"
  248.             current = newMod
  249.         } else {
  250.             newMod = create ("~$modName" , "~$comment", "OT", 1)
  251.             current = newMod
  252.             ack "Formal module ~$modName created."
  253.         }
  254.         }
  255.     } else {
  256.         expand_text $modSection {
  257.         if (exists module "~$modName") {
  258.             ack "Link module ~$modName not created. It already exists"
  259.         } else {
  260.             Module linkMod = create("~$modName", "~$comment",  ~$linkRelation)
  261.             ack "Link module ~$modName created."
  262.             current = linkMod
  263.             Linkset ls = create (linkMod, "~$fromModule", "~$toModule")
  264.             ack "Linkset from ~$fromModule to ~$toModule in link module ~$modName created."
  265.             save linkMod
  266.             load ls
  267.         }
  268.         }
  269.     }
  270. }
  271.  
  272. method DrsDxlCommand::doorsModuleEdit {this moduleName editType displayed} {
  273.     expand_text [$this commandSection] {
  274.         currentModule = ~$editType ("~$moduleName", ~$displayed)
  275.         storedFiltering = filtering currentModule
  276.     }
  277.     expand_text [$this commandSection] {
  278.         level 0
  279.     }
  280.     $this doorsFilterOff
  281.     return currentModule
  282. }
  283.  
  284. method DrsDxlCommand::doorsViewSave {this viewName} {
  285.     [.main messageArea] message "Save DOORS view $viewName"
  286.     set moduleName [m4_var get M4_doors_formal_module]
  287.     $this mustBeDone 1
  288.         set m4_shared [m4_var get M4_doors_edit_shared]
  289.         if ![llength $m4_shared] {
  290.             m4_var set M4_doors_edit_shared "false"
  291.         m4_var saveStatus M4_doors_edit_shared 0
  292.         }
  293.         if {$m4_shared == "true"} {
  294.             set editType "share"
  295.         } else {
  296.             set editType "edit"
  297.     }
  298.  
  299.         set m4_disp [m4_var get M4_doors_edit_displayed]
  300.         if ![llength $m4_disp] {
  301.             m4_var set M4_doors_edit_displayed "true"
  302.         m4_var saveStatus M4_doors_edit_displayed 0
  303.         }
  304.         if {$m4_disp == "true"} {
  305.             set displayed "true"
  306.         }
  307.     $this doorsInitialize
  308.     expand_text [$this commandSection] {
  309.         currentModule = ~$editType ("~$moduleName", ~$displayed)
  310.         storedFiltering = filtering currentModule
  311.         Object viewObject
  312.         viewObject = currentModule first
  313.         while (!null viewObject) {
  314.         viewObject."OTViews"= viewObject."OTViews" " " "OTView_~$viewName"
  315.         viewObject = next viewObject
  316.         }
  317.         Filter f1 = contents ("OTView_~$viewName", true) 
  318.         set f1
  319.         save view "~$viewName"
  320.     }
  321.     $this doorsModuleSave "currentModule"
  322.         
  323. }
  324.  
  325. method DrsDxlCommand::doorsObjectFind {this no} {
  326.     set varName "searchObject[$this varCounter]"
  327.     $this varCounter [expr [$this varCounter] + 1]
  328.     expand_text [$this commandSection] {
  329.         Object ~$varName
  330.         ~$varName = findObject ~$no
  331.     
  332.     }
  333.     return $varName
  334. }
  335.  
  336. method DrsDxlCommand::doorsObjectDelete {this doorsObject} {
  337.     $this mustBeDone 1
  338.     expand_text [$this commandSection] {
  339.         ~$doorsObject delete
  340.         flushDeletions
  341.     }
  342. }
  343.  
  344. method DrsDxlCommand::doorsObjectAttrSetValue {this obj attrName attrValue} {
  345.     $this mustBeDone 1
  346.     regsub -all {\\} $attrValue "" newValue
  347.     regsub -all {\"} $newValue "\\\"" newValue
  348.     expand_text [$this commandSection] {
  349.         if (exists attribute "~$attrName") 
  350.         ~$obj."~$attrName"= "~$newValue"
  351.     }
  352.     return $obj
  353. }
  354.  
  355. method DrsDxlCommand::doorsObjectAttrAppendValue {this attrName toAppValue} {
  356.     $this mustBeDone 1
  357.     expand_text [$this commandSection] {
  358.         attrValue = ~$obj."~$attrName"
  359.         ~$obj."~$attrName"= attrValue "~$toAppValue"
  360.     }
  361.     return $obj
  362. }
  363.  
  364. method DrsDxlCommand::doorsObjectCreateTopObject {this objectName} {
  365.     $this mustBeDone 1
  366.     set newObject newObject[$this varCounter]
  367.         $this varCounter [expr [$this varCounter] + 1]
  368.     expand_text [$this commandSection] {
  369.         lastObject = currentModule first
  370.         Object    ~$newObject
  371.         if (null lastObject) {
  372.             ~$newObject = create currentModule
  373.         } else {
  374.         lastObject = last sibling (currentModule first)
  375.         ~$newObject = create lastObject
  376.         }
  377.     }
  378.     $this doorsObjectShow $newObject
  379.     return [$this doorsObjectAttrSetValue $newObject "Object Heading" $objectName]
  380. }
  381.  
  382. method DrsDxlCommand::doorsObjectCreateChild {this doorsObject objectName {filteredName ""}} {
  383.     $this mustBeDone 1
  384.     set newObject newObject[$this varCounter]
  385.         $this varCounter [expr [$this varCounter] + 1]
  386.     expand_text [$this commandSection] {
  387.         Object    ~$newObject
  388.         ~$newObject = create last below ~$doorsObject
  389.     }
  390.     $this doorsObjectShow $newObject
  391.         set sectionDict [Dictionary new]
  392.     $sectionDict contents [m4_var get M4_doors_section_mapping]
  393.     set specialName [$sectionDict set $objectName]
  394.     if [llength $specialName] {
  395.         set objectName $specialName
  396.     }
  397.     return [$this doorsObjectAttrSetValue $newObject "Object Heading" $objectName]
  398. }
  399.  
  400. method DrsDxlCommand::doorsObjectAttrSave {this toSaveObject toSaveAttr} {
  401.     expand_text [$this commandSection] {
  402.         attrValue = ~$toSaveObject."~$toSaveAttr"
  403.     }
  404.     $this doorsResultSave attrValue
  405. }
  406.  
  407. method DrsDxlCommand::doorsObjectCreateLink {this destObject srcObject linkMod} {
  408.     $this mustBeDone 1
  409.     expand_text [$this commandSection] {
  410.         ~$destObject <- "~$linkMod" <- ~$srcObject
  411.     }
  412.     return $srcObject
  413. }
  414.  
  415. method DrsDxlCommand::doorsObjectDeleteLinks {this doorsObject linkMod} {
  416.     $this mustBeDone 1
  417.     expand_text [$this commandSection] {
  418.         for ln in ~$doorsObject<-"~$linkMod" do {
  419.         delete ln
  420.         }
  421.         for ln in ~$doorsObject->"~$linkMod" do {
  422.         delete ln
  423.         }
  424.         flushDeletions
  425.     }
  426. }
  427.  
  428. method DrsDxlCommand::doorsObjectSetCurrent {this doorsObject} {
  429.     expand_text [$this commandSection] {
  430.         current = ~$doorsObject
  431.     }
  432. }
  433.  
  434. method DrsDxlCommand::doorsResultSave {this doorsResult} {
  435.     if ![$this firstOut] {
  436.         expand_text [$this commandSection] {
  437.         outStream << ~$doorsResult ""
  438.         }
  439.     } else { 
  440.         expand_text [$this commandSection] {
  441.         outStream << " " ~$doorsResult ""
  442.         }
  443.     }
  444.     $this firstOut 1
  445.     return $doorsResult
  446. }
  447.  
  448. method DrsDxlCommand::doorsModuleSave {this toSaveModule} {
  449.     expand_text [$this commandSection] {
  450.             if (storedFiltering == true) {
  451.                 filtering on
  452.             }
  453.         save ~$toSaveModule
  454.     }
  455.     return $toSaveModule
  456. }
  457.  
  458. method DrsDxlCommand::doorsFilterOn {this} {
  459.     expand_text [$this commandSection] {
  460.         filtering on
  461.     }
  462. }
  463.  
  464. method DrsDxlCommand::doorsFilterOff {this} {
  465.     expand_text [$this commandSection] {
  466.         if (storedFiltering == true) {
  467.         filtering off
  468.         }
  469.     }
  470. }
  471.  
  472. method DrsDxlCommand::doorsObjectShow {this doorsObject {minorOperation ""}} {
  473.     $this mustBeDone 1
  474.     if {$minorOperation == "All" } {
  475.         expand_text [$this commandSection] {
  476.         searchObject = currentModule first
  477.         while (!null searchObject) {
  478.             accept searchObject
  479.             searchObject = searchObject next
  480.         }
  481.         }
  482.         return ""
  483.     }
  484.     expand_text [$this commandSection] {
  485.         if (!null ~$doorsObject)
  486.         accept ~$doorsObject 
  487.     }
  488.     return $doorsObject
  489. }
  490.  
  491. method DrsDxlCommand::doorsObjectHide {this doorsObject {minorOperation ""}} {
  492.     $this mustBeDone 1
  493.     if {$minorOperation == "All" } {
  494.         expand_text [$this commandSection] {
  495.         searchObject = currentModule first
  496.         while (!null searchObject) {
  497.             reject searchObject
  498.             searchObject = searchObject next
  499.         }
  500.         }
  501.         return ""
  502.     }
  503.     
  504.     expand_text [$this commandSection] {
  505.         reject ~$doorsObject 
  506.     }
  507.     return $doorsObject
  508. }
  509.  
  510. # Do not delete this line -- regeneration end marker
  511.  
  512.