home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / prep_funcs.tcl < prev    next >
Text File  |  1996-06-05  |  12KB  |  388 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. # Copyright (c) 1993-1995 by Cadre Technologies Inc.
  4. #
  5. # This software is furnished under a license and may be used only in
  6. # accordance with the terms of such license and with the inclusion of
  7. # the above copyright notice. This software or any other copies thereof
  8. # may not be provided or otherwise made available to any other person.
  9. # No title to and ownership of the software is hereby transferred.
  10. #
  11. # The information in this software is subject to change without notice
  12. # and should not be construed as a commitment by Cadre Technologies Inc.
  13. #
  14. #---------------------------------------------------------------------------
  15. #
  16. #       File            : @(#)prep_funcs.tcl    2.1
  17. #       Author          : edri
  18. #       Original date   : 11-10-94
  19. #       Description     : Prepare functions for "check"
  20. #
  21. #---------------------------------------------------------------------------
  22. #
  23.  
  24. proc oopl_model::prepare {model forwhat} {
  25.     add_predefined_methods $model
  26.  
  27.     foreach class [getSelectedOoplClasses $model] {
  28.         if {[$class isSynthetic] != "1"} {
  29.         prepare $class $model $forwhat
  30.         }
  31.     }
  32.     foreach subject [$model subjectSet] {
  33.         prepare $subject $model $forwhat
  34.     }
  35.  
  36.     foreach class [getSelectedOoplClasses $model] {
  37.         #
  38.     # add these attributes for more efficient operation of some of the
  39.         # checks; these are only needed if there are any received_events
  40.         # can only be done after all classes have been prepared, due to
  41.         # extra operations/super classes added via addOperation or
  42.         # add_super_class
  43.         #
  44.     if {[$class receivedEventSet] != {}} {
  45.         $class addRunTimeProperty methods [find_methods $class 0]
  46.         $class addRunTimeProperty flat_methods [find_methods $class 1]
  47.     }
  48.     }
  49. }
  50.  
  51. proc class::prepare {class model forwhat} {
  52.     foreach feature [$class featureSet] {
  53.         if {[$feature isSynthetic] != "1"} {
  54.         prepare $feature $class $model $forwhat
  55.         }
  56.     }
  57. }
  58.  
  59. proc link_class::prepare {class model forwhat} {
  60.     class::prepare $class $model $forwhat
  61. }
  62.  
  63. proc class_enum::prepare {class model forwhat} {
  64. }
  65.  
  66. proc class_typedef::prepare {class model forwhat} {
  67. }
  68.  
  69. proc class_generic_typedef::prepare {class model forwhat} {
  70. }
  71.  
  72. proc data_attrib::prepare {attrib class model forwhat} {
  73.     set mdf [$attrib getPropertyValue modifier]
  74.     if {$mdf != "" && $mdf != "Default"} {
  75.         # when a modifier is specified
  76.         # do not generate access funcs
  77.         return
  78.     }
  79.  
  80.     set name [cap [$attrib getName]]
  81.     set type [[$attrib ooplType] getName]
  82.  
  83.     set op [$class addOperation get$name $type]
  84.     copy_access_mode $attrib $op 1 r
  85.  
  86.     set op [$class addOperation set$name ""]
  87.     $op addParameter new$name $type
  88.  
  89.     copy_access_mode $attrib $op 1 w
  90. }
  91.  
  92. # Common prepare dispatch function for associations, works also for
  93. # database associations.
  94. # Only prepare for method-generating parts
  95. #
  96. proc prepare_for_assoc {attrib class model forwhat} {
  97.     set prefix "[$attrib get_obj_type]::[$attrib getMultiplicity]"
  98.     ${prefix}_get_prepare $attrib $class $model $forwhat
  99.     ${prefix}_set_prepare $attrib $class $model $forwhat
  100.     ${prefix}_remove_prepare $attrib $class $model $forwhat
  101. }
  102.  
  103. # Common generate dispatch function for links
  104. #
  105. proc prepare_for_link {attrib class model forwhat} {
  106.     set prefix "[$attrib get_obj_type]::[$attrib getMultiplicity]"
  107.     ${prefix}_get_prepare $attrib $class $model $forwhat
  108. }
  109.  
  110. #
  111. # assoc_attrib prepare functions
  112. #
  113. proc assoc_attrib::prepare {attrib class model forwhat} {
  114.     prepare_for_assoc $attrib $class $model $forwhat
  115. }
  116.  
  117. proc assoc_attrib::one_get_prepare {attrib class model forwhat} {
  118.     set type [[$attrib ooplType] getName]
  119.     set name [cap [$attrib getName]]
  120.  
  121.     set op [$class addOperation get$name $type]
  122.     copy_access_mode $attrib $op 0 r
  123. }
  124.  
  125. proc assoc_attrib::one_set_prepare {attrib class model forwhat} {
  126.     set type [[$attrib ooplType] getName]
  127.     set name [cap [$attrib getName]]
  128.  
  129.     set op [$class addOperation set$name ""]
  130.     $op addParameter new$name $type
  131.  
  132.     copy_access_mode $attrib $op 0 w
  133. }
  134.  
  135. proc assoc_attrib::one_remove_prepare {attrib class model forwhat} {
  136.     set name [cap [$attrib getName]]
  137.  
  138.     set op [$class addOperation remove$name ""]
  139.     copy_access_mode $attrib $op 0 w
  140. }
  141.  
  142. proc assoc_attrib::many_get_prepare {attrib class model forwhat} {
  143.     set ordered [$attrib isOrdered]
  144.     set settype [set_type_name [$attrib ooplType] $ordered]
  145.     set setname [cap [set_name [$attrib getName] $ordered]]
  146.  
  147.     catch {$model addClass $settype}
  148.     set op [$class addOperation get$setname $settype]
  149.     copy_access_mode $attrib $op 0 r
  150. }
  151.  
  152. proc assoc_attrib::many_set_prepare {attrib class model forwhat} {
  153.     set type [[$attrib ooplType] getName]
  154.     set name [cap [$attrib getName]]
  155.  
  156.     set op [$class addOperation add$name ""]
  157.     $op addParameter new$name $type
  158.  
  159.     copy_access_mode $attrib $op 0 w
  160. }
  161.  
  162. proc assoc_attrib::many_remove_prepare {attrib class model forwhat} {
  163.     if [$attrib isMandatory] {
  164.     return
  165.     }
  166.  
  167.     set type [[$attrib ooplType] getName]
  168.     set name [cap [$attrib getName]]
  169.  
  170.     set op [$class addOperation remove$name ""]
  171.     $op addParameter old$name $type
  172.  
  173.     copy_access_mode $attrib $op 0 w
  174. }
  175.  
  176. #
  177. # qual_assoc_attrib prepare functions
  178. #
  179. proc qual_assoc_attrib::prepare {attrib class model forwhat} {
  180.     prepare_for_assoc $attrib $class $model $forwhat
  181. }
  182.  
  183. proc qual_assoc_attrib::one_get_prepare {attrib class model forwhat} {
  184.     set type [[$attrib ooplType] getName]
  185.     set name [cap [$attrib getName]]
  186.     set keyname [[$attrib qualifier] getName]
  187.     set keytype [[[$attrib qualifier] ooplType] getName]
  188.  
  189.     set op [$class addOperation get$name $type]
  190.     $op addParameter $keyname $keytype
  191.  
  192.     copy_access_mode $attrib $op 0 r
  193. }
  194.  
  195. proc qual_assoc_attrib::one_set_prepare {attrib class model forwhat} {
  196.     set type [[$attrib ooplType] getName]
  197.     set name [cap [$attrib getName]]
  198.     set keyname [[$attrib qualifier] getName]
  199.     set keytype [[[$attrib qualifier] ooplType] getName]
  200.  
  201.     set op [$class addOperation set$name ""]
  202.     $op addParameter $keyname $keytype
  203.     $op addParameter new$name $type
  204.  
  205.     copy_access_mode $attrib $op 0 w
  206. }
  207.  
  208. proc qual_assoc_attrib::one_remove_prepare {attrib class model forwhat} {
  209.     set name [cap [$attrib getName]]
  210.     set keyname [[$attrib qualifier] getName]
  211.     set keytype [[[$attrib qualifier] ooplType] getName]
  212.  
  213.     set op [$class addOperation remove$name ""]
  214.     $op addParameter $keyname $keytype
  215.  
  216.     copy_access_mode $attrib $op 0 w
  217. }
  218.  
  219. proc qual_assoc_attrib::many_get_prepare {attrib class model forwhat} {
  220.     set settype [set_type_name [$attrib ooplType] [$attrib isOrdered]]
  221.     set setname [cap [$attrib getName]]
  222.     set keyname [[$attrib qualifier] getName]
  223.     set keytype [[[$attrib qualifier] ooplType] getName]
  224.  
  225.     catch {$model addClass $settype}
  226.  
  227.     set op [$class addOperation get$setname $settype]
  228.     $op addParameter $keyname $keytype
  229.  
  230.     copy_access_mode $attrib $op 0 r
  231. }
  232.  
  233. proc qual_assoc_attrib::many_set_prepare {attrib class model forwhat} {
  234.     set type [[$attrib ooplType] getName]
  235.     set name [cap [$attrib getName]]
  236.     set keyname [[$attrib qualifier] getName]
  237.     set keytype [[[$attrib qualifier] ooplType] getName]
  238.  
  239.     set op [$class addOperation add$name ""]
  240.     $op addParameter $keyname $keytype
  241.     $op addParameter new$name $type
  242.  
  243.     copy_access_mode $attrib $op 0 w
  244. }
  245.  
  246. proc qual_assoc_attrib::many_remove_prepare {attrib class model forwhat} {
  247.     set type [[$attrib ooplType] getName]
  248.     set name [cap [$attrib getName]]
  249.     set keyname [[$attrib qualifier] getName]
  250.     set keytype [[[$attrib qualifier] ooplType] getName]
  251.  
  252.     set op [$class addOperation remove$name ""]
  253.     $op addParameter $keyname $keytype
  254.     $op addParameter old$name $type
  255.  
  256.     copy_access_mode $attrib $op 0 w
  257. }
  258.  
  259. #
  260. # link_attrib prepare functions
  261. #
  262. proc link_attrib::prepare {attrib class model forwhat} {
  263.     prepare_for_link $attrib $class $model $forwhat
  264. }
  265.  
  266. proc link_attrib::one_get_prepare {attrib class model forwhat} {
  267.     set type [[$attrib ooplType] getName]
  268.     set name [cap "${type}Of[cap [$attrib getName]]"]
  269.  
  270.     set op [$class addOperation get$name $type]
  271.     copy_access_mode $attrib $op 0 r
  272. }
  273.  
  274. proc link_attrib::many_get_prepare {attrib class model forwhat} {
  275.     set ordered [$attrib isOrdered]
  276.     set settype [set_type_name [$attrib ooplType] $ordered]
  277.     set setname [cap [set_name \
  278.             "[[$attrib ooplType] getName]Of[cap [$attrib getName]]" $ordered]]
  279.  
  280.     catch {$model addClass $settype}
  281.     set op [$class addOperation get$setname $settype]
  282.     copy_access_mode $attrib $op 0 r
  283. }
  284.  
  285. #
  286. # rv_link_attrib prepare functions
  287. #
  288. proc rv_link_attrib::prepare {attrib class model forwhat} {
  289.     prepare_for_link $attrib $class $model $forwhat
  290. }
  291.  
  292. proc rv_link_attrib::one_get_prepare {attrib class model forwhat} {
  293.     set type [[$attrib ooplType] getName]
  294.     set name [cap [$attrib getName]]
  295.  
  296.     set op [$class addOperation get$name $type]
  297.     copy_access_mode $attrib $op 0 r
  298. }
  299.  
  300. proc rv_link_attrib::many_get_prepare {attrib class model forwhat} {
  301.     # does not occur
  302. }
  303.  
  304. #
  305. # qual_link_attrib prepare functions
  306. #
  307. proc qual_link_attrib::prepare {attrib class model forwhat} {
  308.     prepare_for_link $attrib $class $model $forwhat
  309. }
  310.  
  311. proc qual_link_attrib::one_get_prepare {attrib class model forwhat} {
  312.     set type [[$attrib ooplType] getName]
  313.     set name [cap [[$attrib ooplType] getName]Of[cap [$attrib getName]]]
  314.     set keyname [[$attrib qualifier] getName]
  315.     set keytype [[[$attrib qualifier] ooplType] getName]
  316.  
  317.     set op [$class addOperation get$name $type]
  318.     $op addParameter $keyname $keytype
  319.  
  320.     copy_access_mode $attrib $op 0 r
  321. }
  322.  
  323. proc qual_link_attrib::many_get_prepare {attrib class model forwhat} {
  324.     set settype [set_type_name [$attrib ooplType] [$attrib isOrdered]]
  325.     set setname [cap [[$attrib ooplType] getName]Of[cap [$attrib getName]]]
  326.     set keyname [ [$attrib qualifier] getName]
  327.     set keytype [[[$attrib qualifier] ooplType] getName]
  328.  
  329.     catch {$model addClass $settype}
  330.     set op [$class addOperation get$setname $settype]
  331.     $op addParameter $keyname $keytype
  332.  
  333.     copy_access_mode $attrib $op 0 r
  334. }
  335.  
  336. #
  337. # operation prepare functions
  338. #
  339. proc operation::prepare {oper class model forwhat} {
  340.  
  341.     foreach param [get_parameters $oper] {
  342.         prepare $param $class $model $forwhat
  343.     }
  344. }
  345.  
  346. proc parameter::prepare {param class model forwhat} {
  347. }
  348.  
  349. proc base_type::prepare {class model forwhat} {
  350. }
  351.  
  352. proc class_type::prepare {class model forwhat} {
  353. }
  354.  
  355. proc typedef_type::prepare {class model forwhat} {
  356. }
  357.  
  358. proc enum_type::prepare {class model forwhat} {
  359. }
  360.  
  361. proc generic_typedef_type::prepare {class model forwhat} {
  362. }
  363.  
  364. proc constructor::prepare {ctor class model forwhat} {
  365.  
  366.     foreach param [$class creationParamSet] {
  367.         prepare $param $class $model $forwhat
  368.     }
  369. }
  370.  
  371. proc ctor_param::prepare {param class model forwhat} {
  372. }
  373.  
  374. proc subject::prepare {subject model forwhat} {
  375. }
  376.  
  377. proc cad_subject::prepare {subject model forwhat} {
  378. }
  379.  
  380. proc ccd_subject::prepare {subject model forwhat} {
  381. }
  382.  
  383. proc cad_ccd_subject::prepare {subject model forwhat} {
  384. }
  385.  
  386. proc system_subject::prepare {subject model forwhat} {
  387. }
  388.