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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)importer.tcl    /main/titanic/5
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)importer.tcl    /main/titanic/5   4 Aug 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12.  
  13. require wmt_util.tcl
  14. require fstorage.tcl
  15. require cgen_msg.tcl
  16.  
  17. global booleanOptions
  18. set booleanOptions    {    {-trace tracing 0} \
  19.                 {-debug debug 0} \
  20.                 {-time timing 0} \
  21.                 {-all importAll 0} \
  22.                 {-new importNew 0} \
  23.                 {-selected importSelected 0} }
  24.  
  25. # End user added include file section
  26.  
  27.  
  28. Class Importer : {GCObject} {
  29.     constructor
  30.     method destructor
  31.     method generateOopl
  32.     method generateSql
  33.     method getClassNames
  34.     method getFileNamesNotToGenerateFor
  35.     method getOoplFileTypesToGenerateFor
  36.     method getSqlFileTypesToGenerateFor
  37.     method import
  38.     method importAll
  39.     method importNew
  40.     method importSelected
  41.     method parseOptions
  42.     method supportsPersistentCodeGen
  43.     attribute sourceObjects
  44.     attribute targetObjects
  45.     attribute ooplFileTypes
  46.     attribute sqlFileTypes
  47.     attribute ooModel
  48.     attribute ooplModel
  49. }
  50.  
  51. constructor Importer {class this} {
  52.     set this [GCObject::constructor $class $this]
  53.     # Start constructor user section
  54.  
  55.     $this sourceObjects [CommandLineInterface::getSourceObjects]
  56.     $this targetObjects [CommandLineInterface::getTargetObjects]
  57.     $this ooplFileTypes [$this getOoplFileTypesToGenerateFor]
  58.     $this sqlFileTypes [$this getSqlFileTypesToGenerateFor]
  59.  
  60.     # End constructor user section
  61.     return $this
  62. }
  63.  
  64. method Importer::destructor {this} {
  65.     # Start destructor user section
  66.     # End destructor user section
  67. }
  68.  
  69. method Importer::generateOopl {this classes} {
  70.     # !! Implement this function !!
  71. }
  72.  
  73. method Importer::generateSql {this files} {
  74.     # !! Implement this function !!
  75. }
  76.  
  77. method Importer::getClassNames {this fileList} {
  78.     set result ""
  79.     set excludeNames [$this getFileNamesNotToGenerateFor]
  80.  
  81.     foreach file $fileList {
  82.         set fName [nt_get_name $file]
  83.         set fType [nt_get_type $file]
  84.  
  85.         if {[lsearch $excludeNames $fName] != -1} {
  86.         continue
  87.         }
  88.  
  89.         if {[lsearch [$this ooplFileTypes] $fType] != -1} {
  90.         if [catch {set names [fstorage::get_imp_from $file]} reason] {
  91.             puts stderr $reason
  92.             set names ""
  93.         }
  94.  
  95.         if {$names == ""} {
  96.             m4_warning $W_IMPFROM_NOT_SET $file $fName
  97.             set names $fName
  98.         }
  99.  
  100.         foreach nm $names {
  101.             if {[lsearch $result $nm] == -1} {
  102.             lappend result $nm
  103.             }
  104.         }
  105.         }
  106.     }
  107.  
  108.     return $result
  109. }
  110.  
  111. method Importer::getFileNamesNotToGenerateFor {this} {
  112.     return ""
  113. }
  114.  
  115. method Importer::getOoplFileTypesToGenerateFor {this} {
  116.     # !! Implement this function !!
  117. }
  118.  
  119. method Importer::getSqlFileTypesToGenerateFor {this} {
  120.     return ""
  121. }
  122.  
  123. method Importer::import {this} {
  124.     $this parseOptions
  125.     set cc [ClientContext::global]
  126.  
  127.     # customization stuff
  128.     require_all_module_files m_import.tcl
  129.     if [$cc customFileExists u_import tcl tcl 1] {
  130.         require_with_reload u_import.tcl
  131.     }
  132.  
  133.     set systemNameType [$cc levelNameAt System]
  134.     set phaseNameType [$cc levelNameAt Phase]
  135.     set prevPhaseV [[$cc currentPhase] previous [$cc currentConfig]]
  136.  
  137.     if [$prevPhaseV isNil] {
  138.         m4_error $E_NO_PREV_PHASE $phaseNameType
  139.         return
  140.     }
  141.  
  142.     set prevPhase [$prevPhaseV phase]
  143.     set prevPhaseNameType [$prevPhase name].[$prevPhase type]
  144.  
  145.     if {[$prevPhase type] != "ObjectDesign"} {
  146.         m4_error $E_WRONG_PREV_PHASE $prevPhaseNameType
  147.         return
  148.     }
  149.  
  150.     if {[catch {fstorage::goto_system $systemNameType $prevPhaseNameType} reason]} {
  151.         puts stderr $reason
  152.         return
  153.     }
  154.  
  155.     $this ooModel [OOModel::createModel]
  156.     $this ooplModel [[$this ooModel] ooplModel]
  157.  
  158.     fstorage::goto_system $systemNameType $phaseNameType
  159.  
  160.     if {[[$this ooModel] error] > 0} {
  161.         ##m4_error $E_LOAD_MODEL
  162.         puts stdout "Loading OOPL model failed due to previous errors"
  163.         [$this ooModel] delete
  164.         $this ooModel ""
  165.         return
  166.     }
  167.  
  168.     global importAll importNew
  169.  
  170.     if {$importAll} {
  171.         return [$this importAll]
  172.     }
  173.  
  174.     if {$importNew || [lempty [$this targetObjects]]} {
  175.         return [$this importNew]
  176.     }
  177.  
  178.     return [$this importSelected]
  179. }
  180.  
  181. method Importer::importAll {this} {
  182.     $this generateOopl [[$this ooplModel] ooplClassSet]
  183. }
  184.  
  185. method Importer::importNew {this} {
  186.     set ooplClasses ""
  187.     set existingFiles [fstorage::dir [$this ooplFileTypes]]
  188.     set excludeNames [$this getClassNames $existingFiles]
  189.  
  190.     foreach className [[$this ooplModel] getClassNames] {
  191.         if {[lsearch $excludeNames $className] == -1} {
  192.         set ooplClass [[$this ooplModel] classByName $className]
  193.  
  194.         if {$ooplClass == ""} {
  195.             m4_warning $W_UNABLE_TO_LOAD_CLASS $className
  196.         } else {
  197.             lappend ooplClasses $ooplClass
  198.         }
  199.         }
  200.     }
  201.  
  202.     if {[$this supportsPersistentCodeGen] &&
  203.         ([lempty [$this sourceObjects]] ||
  204.          [lsearch [$this sourceObjects] "sql"] != -1)} {
  205.         $this generateSql ""
  206.     }
  207.  
  208.     if {[lempty [$this sourceObjects]] ||
  209.         [lsearch [$this sourceObjects] "oopl"] != -1} {
  210.         $this generateOopl $ooplClasses
  211.     }
  212. }
  213.  
  214. method Importer::importSelected {this} {
  215.     set ooplFiles ""
  216.     set sqlFiles ""
  217.  
  218.     foreach file [$this targetObjects] {
  219.         set fType [nt_get_type $file]
  220.  
  221.         if {[lsearch [$this ooplFileTypes] $fType] != -1} {
  222.         lappend ooplFiles $file
  223.         continue
  224.         }
  225.  
  226.         if [$this supportsPersistentCodeGen] {
  227.         if {[lsearch [$this sqlFileTypes] $fType] != -1} {
  228.             lappend sqlFiles $file
  229.             continue
  230.         }
  231.         }
  232.  
  233.         m4_warning $W_UNKNOWN_FILE $file
  234.     }
  235.  
  236.     if {![lempty $sqlFiles]} {
  237.         $this generateSql $sqlFiles
  238.     }
  239.  
  240.     if {![lempty $ooplFiles]} {
  241.         set classList ""
  242.  
  243.         foreach className [$this getClassNames $ooplFiles] {
  244.         set ooplClass [[$this ooplModel] classByName $className]
  245.  
  246.         if {$ooplClass == ""} {
  247.             m4_warning $W_UNABLE_TO_LOAD_CLASS $className
  248.         } else {
  249.             lappend classList $ooplClass
  250.         }
  251.         }
  252.  
  253.         $this generateOopl $classList
  254.     }
  255. }
  256.  
  257. method Importer::parseOptions {this} {
  258.     global booleanOptions argv
  259.  
  260.     foreach opt $booleanOptions {
  261.         set i [lsearch $argv [lindex $opt 0]]
  262.         set optvar [lindex $opt 1]
  263.         eval "global $optvar"
  264.  
  265.         if {$i == -1} {
  266.         set optdef [lindex $opt 2]
  267.         eval "set $optvar $optdef"
  268.         } else {
  269.         set argv [lreplace $argv $i $i]
  270.         eval "set $optvar 1"
  271.         }
  272.     }
  273. }
  274.  
  275. method Importer::supportsPersistentCodeGen {this} {
  276.     return 0
  277. }
  278.  
  279. # Do not delete this line -- regeneration end marker
  280.  
  281.