home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / document.tcl < prev    next >
Text File  |  1997-11-17  |  6KB  |  273 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)document.tcl    /main/titanic/9
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)document.tcl    /main/titanic/9   17 Nov 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. require_module_file "dsysvdbobj.tcl" docwriter
  15.  
  16. Class Document : {DSysVDbObj} {
  17.     method destructor
  18.     constructor
  19.     method promoter
  20.     method initialize
  21.     method initializeInfo
  22.     method title
  23.     method subject
  24.     method documentedSystem
  25.     method type
  26.     method reference
  27.     method keywords
  28.     method date
  29.     method authors
  30.     method docStatus
  31.     method docEditor
  32.     method setGetProp
  33.     method directory
  34.     attribute editor
  35.     attribute docSys
  36.     attribute initialized
  37.     attribute configVersion
  38. }
  39.  
  40. method Document::destructor {this} {
  41.     # Start destructor user section
  42.     # End destructor user section
  43.     $this DSysVDbObj::destructor
  44. }
  45.  
  46. constructor Document {class this name} {
  47.     set this [DSysVDbObj::constructor $class $this $name]
  48.     return $this
  49. }
  50.  
  51. method Document::promoter {this} {
  52.     if {"[$this initialized]" == ""} {
  53.         $this initialized 0
  54.     }
  55. }
  56.  
  57. method Document::initialize {this configVersion} {
  58.  
  59.     if {[$this initialized] || "$configVersion" == ""} {
  60.         return
  61.     }
  62.  
  63.     # create an instance of the documented system
  64.     $this configVersion $configVersion
  65.     set docSys [$this setGetProp doc_sys]
  66.     set phase [$this phase]
  67.     set phaseV [$configVersion findPhaseVersion \
  68.         "[$phase name]" "[$phase type]"]
  69.     if {"$docSys" == ""} {
  70.         wmtkerror "Documented system not specified\
  71.             for document '[$this getInfo Name]'"
  72.         return
  73.     }
  74.     $this docSys [$phaseV findSystemVersion $docSys system]
  75.  
  76.  
  77.     # create the docEditor
  78.     if {"[$this editor]" == ""} {
  79.         set docEditor [$this docEditor]
  80.         if {$docEditor == ""} {
  81.         wmtkerror "Document editor not specified\
  82.                 for document '[$this getInfo Name]'"
  83.         return
  84.         } else {
  85.         global docwriterEditors
  86.         if {![info exist docwriterEditors($docEditor)] ||
  87.             $docwriterEditors($docEditor) == ""} {
  88.             wmtkerror "Invalid docwriter module '$docEditor' \
  89.                 specified for document '[$this getInfo Name]'"
  90.             return
  91.         }
  92.         }
  93.  
  94.         # make the specific editor class
  95.         if [catch {$this editor [${docEditor}DocEditor new \
  96.         $this.docEditor]} msg] {
  97.         wmtkerror "Initializing document failed : $msg"
  98.         return
  99.         }
  100.     }
  101.  
  102.     # check the current level
  103.     case "[[ClientContext::global] currentLevel]" in {
  104.         {None Corporate Project Config} {
  105.         return
  106.         }
  107.     }
  108.     if {[[ClientContext::global] currentConfig] != $configVersion} {
  109.         return
  110.     }
  111.  
  112.     if {[[$this editor] dirExtension] != "" } {
  113.         # check if directory name is valid
  114.         set dir [$this getPropertyValue fileSystemPath]
  115.         if {![regexp ".[[$this editor] dirExtension]" $dir]} {
  116.         # invalid name set valid one
  117.         # strip "."
  118.         set name [[$this system] name]
  119.         regsub -all {\.}  $name {_} name
  120.         $this setProperty fileSystemPath \
  121.             $name.[[$this editor] dirExtension]
  122.         }
  123.     }
  124.  
  125.     set error [[$this editor] configDirectory [$this directory]]
  126.  
  127.     if {$error != ""} {
  128.         wmtkerror "$error\nChange property 'File System Path Part' to a valid value before using the document."
  129.         return
  130.     }
  131.  
  132.     $this initialized 1
  133. }
  134.  
  135. method Document::initializeInfo {this configVersion} {
  136.  
  137.     $this initialize $configVersion
  138.     $this SysVDbObj::initializeInfo dummy
  139. }
  140.  
  141. method Document::title {this args} {
  142.  
  143.     return [$this setGetProp title $args]
  144. }
  145.  
  146. method Document::subject {this args} {
  147.  
  148.     return [$this setGetProp subject $args]
  149. }
  150.  
  151. method Document::documentedSystem {this} {
  152.  
  153.     return [$this docSys]
  154. }
  155.  
  156. method Document::type {this args} {
  157.  
  158.     return [$this setGetProp type $args]
  159. }
  160.  
  161. method Document::reference {this args} {
  162.  
  163.     return [$this setGetProp ref $args]
  164. }
  165.  
  166. method Document::keywords {this args} {
  167.  
  168.     return [$this setGetProp keywords $args]
  169. }
  170.  
  171. method Document::date {this args} {
  172.  
  173.     return [$this setGetProp date $args]
  174. }
  175.  
  176. method Document::authors {this args} {
  177.  
  178.     return [$this setGetProp authors $args]
  179. }
  180.  
  181. method Document::docStatus {this args} {
  182.  
  183.     return [$this setGetProp status $args]
  184. }
  185.  
  186. method Document::docEditor {this} {
  187.  
  188.     return [$this setGetProp editor]
  189. }
  190.  
  191. method Document::setGetProp {this args} {
  192.  
  193.     set prop [lindex $args 0]
  194.     set value [lindex [lindex $args 1] 0]
  195.  
  196.     if [lempty $value] {
  197.         return [$this getPropertyValue $prop]
  198.     } else {
  199.         $this setProperty $prop $value
  200.     }
  201. }
  202.  
  203. method Document::directory {this} {
  204.  
  205.     return [$this path]
  206. }
  207.  
  208. proc Document::getClass {editor version type} {
  209.  
  210.     set firstChar [string toupper [string range $type 0 0]]
  211.     set lastPart [string tolower [string range $type 1 end]]
  212.  
  213.     set type ${firstChar}${lastPart}
  214.  
  215.     set class ${editor}${version}${type}Section
  216.     if {! [isCommand $class]} {
  217.         # try without version
  218.         set class ${editor}${type}Section
  219.         if {! [isCommand $class]} {
  220.             # try without editor name
  221.             set class ${type}Section
  222.             if {! [isCommand $class]} {
  223.                 return ""
  224.             }
  225.         }
  226.     }
  227.  
  228.     return $class
  229. }
  230.  
  231. proc Document::getFileClass {editor version type} {
  232.  
  233.     set class [Document::getClass $editor $version $type]
  234.     if {$class == ""} {
  235.         # unknown class
  236.         return externalBinary
  237.     }
  238.  
  239.     if [isCommand $class::isAscii] {
  240.         if [$class::isAscii] {
  241.             return externalText
  242.         } else {
  243.             return externalBinary
  244.         }
  245.     } else {
  246.         foreach class [Document::getSuperClasses $class] {
  247.             if [isCommand $class::isAscii] {
  248.                 if [$class::isAscii] {
  249.                     return externalText
  250.                 } else {
  251.                     return externalBinary
  252.                 }
  253.             }
  254.         }
  255.     }
  256.     # no super with isAscii proc found
  257.     return externalBinary
  258. }
  259.  
  260. proc Document::getSuperClasses {class} {
  261.  
  262.     set supers [$class info supers]
  263.  
  264.     foreach i $supers {
  265.         set supers "$supers [Document::getSuperClasses $i]"
  266.     }
  267.  
  268.     return $supers
  269. }
  270.  
  271. # Do not delete this line -- regeneration end marker
  272.  
  273.