home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / msumlexport.tcl < prev    next >
Text File  |  1997-10-03  |  3KB  |  119 lines

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