home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / ot2varru.tcl < prev    next >
Text File  |  1997-08-04  |  8KB  |  264 lines

  1. # Copyright (c) 1997 by Cayenne Software Inc.
  2. #
  3. # This software is furnished under a license and may be used only in
  4. # accordance with the terms of such license and with the inclusion of
  5. # the above copyright notice. This software or any other copies thereof
  6. # may not be provided or otherwise made available to any other person.
  7. # No title to and ownership of the software is hereby transferred.
  8. #
  9. # The information in this software is subject to change without notice
  10. # and should not be construed as a commitment by Cayenne Software Inc
  11. #
  12. #---------------------------------------------------------------------------
  13. #
  14. #       File            : @(#)ot2varru.tcl    /main/titanic/6 31 Jul 1997
  15. #       Author          : H. Broeze
  16. #       Original date   : 17 June 1997
  17. #       Description     : ObjectTeam VAR conversion
  18. #
  19. #---------------------------------------------------------------------------
  20. #
  21. require ot2varto.tcl
  22.  
  23. global global ucgargv
  24.  
  25. global idCount
  26. set idCount 6
  27.  
  28.  
  29. global entity_sect
  30. global anltext_sect
  31. global diagProp_sect
  32. global diagObjProp_sect
  33.  
  34. set diagProp1 [newDiagProp]
  35. set diagProp2 [newDiagProp]
  36. set enterprise [newEnterpriseModel b]
  37. set datamodel [newDataModel dm $enterprise $diagProp1 $diagProp2]
  38.  
  39. global enterprise_sect
  40. set enterprise_sect [set ${enterprise}.header]
  41. global data_mod_sect
  42. set data_mod_sect [set ${datamodel}.header]
  43. set diagProp_sect \n[set ${diagProp1}.header]\n[set ${diagProp2}.header]
  44.  
  45. set entity_sect ""
  46. set anltext_sect ""
  47. set attribute_sect ""
  48. set partnershipset_sect ""
  49. set partnership_sect ""
  50. set diagObjProp_sect ""
  51.  
  52. global doneTables
  53. set doneTables ""
  54. proc modelToVar {sqlModel} {
  55.     global doneTables
  56.     foreach table [get_tables $sqlModel] {
  57.     if {[get_source $table] != "table"} {
  58.         continue
  59.     }
  60.     if {[lsearch $doneTables $table] != -1} {
  61.         continue
  62.     }
  63.     entityToVar $table
  64.     }
  65.     set doneRels ""
  66.     foreach table [get_tables $sqlModel] {
  67.     if {[get_source $table] != "table"} {
  68.         continue
  69.     }
  70.     foreach export [get_exports $table] {
  71.         lappend doneRels [linkToVar $table $export $doneRels]
  72.     }
  73.     }
  74. }
  75.  
  76. proc get_ftext {object} {
  77.     return [$object getPropertyValue freeText]
  78. }
  79.  
  80. proc freeTextToVar {sqlObject} {
  81.     global anltext_sect
  82.     set freeText [get_ftext $sqlObject]
  83.     set anlText 0
  84.     if [llength $freeText] {
  85.     set anlText [newANLText $freeText]
  86.     set anltext_sect $anltext_sect\n[set ${anlText}.header]
  87.     }
  88.     return $anlText
  89. }
  90.  
  91. proc entityToVar {table} {
  92.     global entity_sect
  93.     global diagObjProp_sect
  94.     global ent_diag_obj_sect
  95.  
  96.     set anlText [freeTextToVar $table]
  97.     set entity [newEntity $table [get_name $table] $anlText]
  98.     global  ${table}.no
  99.     set ${table}.no $entity
  100.     set entity_sect $entity_sect\n[set ${entity}.header]
  101.     
  102.     set diagObjProp [newDiagObjProp]
  103.     set diagObjProp_sect $diagObjProp_sect\n[set ${diagObjProp}.header]
  104.     set ent_diag_obj_sect $ent_diag_obj_sect\n$entity,$diagObjProp
  105.     foreach column [get_columns $table] {
  106.     if {[get_name $column] != "class_type" && [get_obj_type $column] != "imp_column"} {
  107.         attributeToVar $entity $column 
  108.     }
  109.     }
  110.     return $entity
  111. }
  112.  
  113. proc keyToVar {entNo attrNo attrName} {
  114.  
  115. }
  116.  
  117. proc attributeToVar {entity attr} {
  118.     global attribute_sect
  119.     global diagObjProp_sect
  120.     global ent_attr_sect
  121.     set anlText [freeTextToVar $attr]
  122.     set stdType [get_type_std $attr]
  123.     set domain [newDomain $stdType]
  124.     set nullable "Y"
  125.     if [string match *no* [$attr getPropertyValue nullable]] {
  126.     set nullable "N"
  127.     }
  128.     set attrName [get_name $attr]
  129.     set attribute [newAttribute $entity $attrName 1 $nullable "" M $domain S $anlText]
  130.  
  131.     set attribute_sect $attribute_sect\n[set ${attribute}.header]
  132.     set diagObjProp [newDiagObjProp]
  133.     set diagObjProp_sect $diagObjProp_sect\n[set ${diagObjProp}.header]
  134.     set ent_attr_sect $ent_attr_sect\n$entity,$attribute
  135.     if {[get_column_type $attr] == "key"} {
  136.     global ent_key_sect
  137.     set entKey [newEnt_Key $entity $attrName]
  138.     set ent_key_sect $ent_key_sect\n[set ${entKey}.header]
  139.     global attr_ent_key_sect
  140.     set attr_ent_key_sect $attr_ent_key_sect\n$attribute,$entKey
  141.     }
  142. }
  143. proc linkToVar {entity link doneRels} {
  144.     global partset_sect
  145.     global combset_sect
  146.     #global part_diag_obj_sect
  147.     global partset_diag_obj_sect
  148.     global combset_diag_obj_sect
  149.   
  150.     set relation [get_relation $link]
  151.     if {[lsearch $doneRels $relation] != -1} {
  152.     return
  153.     }
  154.     set relName [get_name $relation]
  155.  
  156.     set masterTable [get_master $link]
  157.     set detailTable [get_detail $link]
  158.     set friendLnk [get_friend $link]
  159.     if {[get_source $detailTable] != "table"} {
  160.     set relTable $detailTable
  161.     set masters [get_masters $relTable]
  162.     set table1 [lindex $masters 0]
  163.     set table2 [lindex $masters 1]
  164.     if {$table1 == $masterTable} {
  165.         set detailTable $table2
  166.     } else {
  167.         set detailTable $table1
  168.     }
  169.     }
  170.     set masterName [get_name $masterTable]
  171.     set detailName [get_name $detailTable]
  172.  
  173.     set tab1Key [set ${detailTable}.no]
  174.     set tab2Key [set ${masterTable}.no]
  175.     if {[get_relation_type $relation] != "supersubtype"} {
  176.     set diag_obj_sect $partset_diag_obj_sect
  177.     set set_sect $partset_sect
  178.     set anlText1 [freeTextToVar $link]
  179.     set anlText2 [freeTextToVar $friendLnk]
  180.         set link1Name [$friendLnk getRoleName]
  181.         if ![llength $link1Name] {
  182.             set link1Name ${relName}$masterName
  183.         }
  184.         set link2Name [$link getRoleName]
  185.         if ![llength $link2Name] {
  186.          set link2Name ${relName}$detailName
  187.         }
  188.  
  189.     set link1 [newPartnershipSet $link $relation $tab1Key $link1Name I $anlText1]
  190.     set link2 [newPartnershipSet $friendLnk $relation $tab2Key $link2Name I $anlText2]
  191.  
  192.     set minVol1 [getMinVol $link $relation]
  193.         set maxVol1 [getMaxVol $link]
  194.     set minVol2 [getMinVol $friendLnk $relation]
  195.         set maxVol2 [getMaxVol $friendLnk]
  196.  
  197.     relationToVar $link1 $link2 $minVol1 $minVol1 $maxVol1 $minVol2 $minVol2 $maxVol2
  198.     } else {
  199.     set link1 [newCombshipSet $link $relation $tab1Key]
  200.     set link2 [newCombshipSet $friendLnk $relation $tab2Key]
  201.     generToVar $link1 $link2 
  202.     set diag_obj_sect $combset_diag_obj_sect
  203.     set set_sect $combset_sect
  204.     }
  205.     set set_sect $set_sect\n[set ${link1}.header]
  206.     set set_sect $set_sect\n[set ${link2}.header]
  207.     set diagObjProp [newDiagObjProp]
  208.     set diagObjProp_sect $diagObjProp_sect\n[set ${diagObjProp}.header]
  209.     set diag_obj_sect $diag_obj_sect\n$link1,$diagObjProp
  210.     set diagObjProp [newDiagObjProp]
  211.     set diagObjProp_sect $diagObjProp_sect\n[set ${diagObjProp}.header]
  212.     set diag_obj_sect $diag_obj_sect\n$link2,$diagObjProp
  213.     if {[get_relation_type $relation] != "supersubtype"} {
  214.     set partset_diag_obj_sect $diag_obj_sect 
  215.     set partset_sect $set_sect 
  216.     } else {
  217.     set combset_sect $set_sect 
  218.     set combset_diag_obj_sect $diag_obj_sect 
  219.     }
  220.  
  221.     return $relation
  222. }
  223.  
  224. proc generToVar {link1 link2 } {
  225.     global comb_sect
  226.     global comb_diag_obj_sect
  227.     set rel [newCombship $link1 $link2]
  228.     set comb_sect $comb_sect\n[set ${rel}.header]
  229.  
  230.     set diagObjProp [newDiagObjProp]
  231.     set diagObjProp_sect $diagObjProp_sect\n[set ${diagObjProp}.header]
  232.     set comb_diag_obj_sect $comb_diag_obj_sect\n$rel,$diagObjProp
  233.  
  234.     set diagObjProp [newDiagObjProp]
  235.     set diagObjProp_sect $diagObjProp_sect\n[set ${diagObjProp}.header]
  236.     set comb_diag_obj_sect $comb_diag_obj_sect\n$link1,$diagObjProp
  237. }
  238.  
  239. proc relationToVar {link1 link2 minVolSrc expVolSrc maxVolSrc minVolDest expVolDest maxVolDest} {
  240.     global part_sect
  241.     global part_diag_obj_set
  242.     set rel [newPartnership $link1 $link2 $minVolSrc $expVolSrc $maxVolSrc $minVolDest $expVolDest $maxVolDest]
  243.     set part_sect $part_sect\n[set ${rel}.header]
  244.  
  245.     set diagObjProp [newDiagObjProp]
  246.     set diagObjProp_sect $diagObjProp_sect\n[set ${diagObjProp}.header]
  247.     set part_diag_obj_sect $part_diag_obj_sect\n$rel,$diagObjProp
  248.     
  249.  
  250.     set diagObjProp [newDiagObjProp]
  251.     set diagObjProp_sect $diagObjProp_sect\n[set ${diagObjProp}.header]
  252.     set part_diag_obj_sect $part_diag_obj_sect\n$link1,$diagObjProp
  253.     
  254. }
  255.  
  256. set sqlModel [load_sql_model]
  257. if {[get_tables $sqlModel] == ""} {
  258.     puts "No tables in SQLModel"
  259. } else { 
  260.     modelToVar $sqlModel
  261.     dumpToFile $ucgargv
  262.     puts "SQL Model converted to VAR into $ucgargv"
  263. }
  264.