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

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