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

  1. source [m4_path_name tcl cginit.tcl]
  2.  
  3. set msHome [m4_var get M4_home]
  4. set msHome [path_name concat $msHome contrib]
  5. set msHome [path_name concat $msHome ObjectTeamMsRepUml]
  6.  
  7. source $msHome/tcl/msumlsumma.tcl
  8. source $msHome/tcl/msumlnamed.tcl
  9. source $msHome/tcl/msumleleme.tcl
  10. source $msHome/tcl/msumlassoc.tcl
  11. source $msHome/tcl/msumltypee.tcl
  12. source $msHome/tcl/msumlassro.tcl
  13. source $msHome/tcl/msumlmembe.tcl
  14. source $msHome/tcl/msumlattri.tcl
  15. source $msHome/tcl/msumlopera.tcl
  16. source $msHome/tcl/msumlparam.tcl
  17. source $msHome/tcl/msumlgenel.tcl
  18. source $msHome/tcl/msumltype.tcl
  19. source $msHome/tcl/msumlclass.tcl
  20. source $msHome/tcl/msumlgener.tcl
  21. source $msHome/tcl/msumlmodel.tcl
  22. source $msHome/tcl/msumlpacka.tcl
  23.  
  24. set rep [OleAutoObject new ObjectTeamMsRepUml.MSRepository]
  25. set repFound 1
  26. if [catch {set root [$rep openDB [lindex $argv 0]]}]  {
  27.         set repFound 0
  28. }
  29. if !$repFound {
  30.     puts "Repository is closed"
  31.     return
  32. }
  33. set cc [ClientContext::global]
  34. set cv [$cc currentConfig]
  35. set sv [$cc currentSystem]
  36. OTShRegister::semanticModel
  37.  
  38. set systemIds [lrange $argv 2 end]
  39. set modelName [lindex $argv 1]
  40. set svs ""
  41. if [llength $systemIds] {
  42.     foreach systemId $systemIds {
  43.     lappend svs [SystemVersion new $systemId] 
  44.     }
  45. } elseif ![$sv isNil] {
  46.     set svs $sv
  47. }
  48.     
  49.  
  50. puts "Starting to export model '$modelName'" 
  51.  
  52. global trans
  53. set trans [[$rep property msObject] property transaction]
  54. set msUMLModel [MSUMLModel new UMLModel $trans] 
  55. set umlModel [$msUMLModel ot2ms $root $modelName]
  56. set smModelDict [Dictionary new]
  57. foreach sv $svs {
  58.     $smModelDict set $sv [SMSystemModel new $cv $sv]
  59. }
  60. $msUMLModel dictOfSMModels $smModelDict
  61. set externals ""
  62. set doneClasses ""
  63.  
  64. $trans begin
  65. $smModelDict foreach sv smModel {
  66.     set s [$sv system]
  67.     puts "Package '[$s name]'"
  68.     set umlPackage${sv} [$umlModel createPackage [$s name]]
  69. }
  70. $trans commit
  71.  
  72. set smClassType [SMTypeDB::find "Class"]
  73. $smModelDict foreach sv smModel {
  74.     set smClassObjects [$smModel getSMObjects $smClassType]
  75.     set classToMS [$msUMLModel otclass2ms $smClassObjects $smModel [set umlPackage${sv}] $sv]
  76.     set doneClasses  "$doneClasses [lindex $classToMS 0]"
  77.     set externals  "$externals [lindex $classToMS 1]"
  78.  
  79. }
  80.  
  81. if [llength $externals] {
  82.     puts "Exporting package 'Stubs (Externals)'" 
  83.     set dictOfClasses [$msUMLModel dictOfClasses]
  84.     set umlPackage ""
  85.     foreach extSMClass $externals {
  86.     set definingSysV [$extSMClass getDefiningSystemVersion]
  87.     set smModel [$smModelDict set $definingSysV]
  88.     if [llength $smModel] {
  89.         #available in one of the other packages
  90.         set item [$extSMClass getItem]
  91.         set defSMClass [$smModel getNamedSMObjects $smClassType $item]
  92.         $dictOfClasses set $extSMClass  [$dictOfClasses set $defSMClass]
  93.     } else {
  94.         # not in one of the selected system versions defined
  95.         set msumlClass [MSUMLClass new UMLClass $extSMClass ]
  96.         $dictOfClasses set $extSMClass  $msumlClass
  97.         if ![llength $umlPackage] {
  98.         $trans begin
  99.         set umlPackage [$umlModel createPackage Stubs]
  100.         $trans commit
  101.         }
  102.         $msumlClass ot2ms $umlPackage
  103.     }
  104.     }
  105. }
  106. set smGenNodeType [SMTypeDB::find "CAD CB Generalization"]
  107. set smAssocType [SMTypeDB::find "CAD CB Association"]
  108. puts "Exporting generalizations and associations"
  109. $smModelDict foreach sv smModel {
  110.     set smGenNodes [$smModel getSMObjects $smGenNodeType]
  111.     $msUMLModel otgen2ms $smGenNodes [set umlPackage${sv}]
  112.  
  113.     set smAssocs [$smModel getSMObjects $smAssocType]
  114.     $msUMLModel otass2ms $smAssocs [set umlPackage${sv}]
  115. }
  116.  
  117. puts "Exporting model to '$modelName' finished"
  118.  
  119. $smModelDict foreach sv model {
  120.     $model delete
  121. }
  122.