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

  1. #---------------------------------------------------------------------------
  2. #
  3. #    (c) Cadre Technologies Inc. 1995
  4. #
  5. #    File:        @(#)reportbase.tcl    /main/titanic/5
  6. #    Author:        Harm Leijendeckers
  7. #    Description:    Base of all report classes
  8. #
  9. #---------------------------------------------------------------------------
  10. # SccsId = @(#)reportbase.tcl    /main/titanic/5    27 Aug 1997    Copyright 1995 Cadre Technologies Inc.
  11.  
  12.  
  13. Class ReportBase : {GCObject} {
  14.     method destructor
  15.     constructor
  16.  
  17.     method setHeader
  18.     method setFooter
  19.     method propertyHeader
  20.     method showProperties
  21.     method corporateReport
  22.     method projectReport
  23.     method configReport
  24.     method phaseReport
  25.     method systemReport
  26.     method fileReport
  27.     method levelError
  28.     method execute
  29.  
  30.     method getLongName
  31.     method initProperties
  32.  
  33.     attribute corporate
  34.     attribute project
  35.     attribute configV
  36.     attribute phaseV
  37.     attribute systemV
  38.     attribute fileV
  39.  
  40.     attribute report
  41.     attribute reportName
  42.     attribute logo1
  43.     attribute logo2
  44.     attribute logo3
  45.     attribute logo4
  46.  
  47.     attribute propDefs
  48. }
  49.  
  50.  
  51. constructor ReportBase {class this} {
  52.     set this [GCObject::constructor $class $this]
  53.     $this report [Report new]
  54.     $this reportName unknown
  55.     $this logo1 ""
  56.     $this logo2 "ObjectTeam"
  57.     $this logo3 [versionInfo majorVersion].[versionInfo minorVersion].[versionInfo maintVersion]
  58.     $this logo4 ""
  59.  
  60.     set moduleHdlr [ModuleHandler new]
  61.     $moduleHdlr setCurrentContext
  62.     PropKnowledgeDB new .propDefsPath $moduleHdlr
  63.     $this propDefs .propDefsPath
  64.  
  65.     return $this
  66. }
  67.  
  68.  
  69. method ReportBase::destructor {this} {
  70.     [$this report] delete
  71. }
  72.  
  73. method ReportBase::initProperties {this} {
  74.     lappend ids [[$this corporate] identity]
  75.     if ![[$this project] isNil] { lappend ids [[$this project] identity] }
  76.     if ![[$this configV] isNil] { lappend ids [[$this configV] identity] }
  77.     if ![[$this phaseV ] isNil] { lappend ids [[$this phaseV ] identity] }
  78.     if ![[$this systemV] isNil] { lappend ids [[$this systemV] identity] }
  79.     if ![[$this fileV  ] isNil] { lappend ids [[$this fileV  ] identity] }
  80.     set pathIds [join [concat {""} $ids] /]
  81.     [$this propDefs] context $pathIds
  82. }
  83.  
  84.  
  85. method ReportBase::setHeader {this} {
  86.     # set a file-version header if on context level file
  87.     if ![[$this fileV] isNil] {
  88.     [$this report] header {
  89.         set report [$this report]
  90.         $report print - 131 fill line
  91.         $report print [$this logo1] 13 center break
  92.         $report print "|  "
  93.         $report print "Report       : [$this reportName]" 57
  94.         $report print "Date          : [$report date]" line
  95.         $report print [$this logo2] 13 center break
  96.         $report print "|  "
  97.         $report space 57
  98.         $report print "Creator       :\
  99.         [[[$this corporate] currentUser] name]" line
  100.         $report print [$this logo3] 13 center break
  101.         $report print "|  "
  102.         $report print "Project      : [[$this project] name]" 57
  103.         $report print "System Version:\
  104.         [[[$this systemV] system] name].[[$this systemV] versionName]"
  105.         $report line
  106.         $report print [$this logo4] 13 center break
  107.         $report print "|  "
  108.         $report print "Phase Version:\
  109.         [[[$this phaseV] phase] name].[[$this phaseV] versionName]" 57
  110.         $report print "File Version  :\
  111.         [[[$this fileV] file] qualifiedName].[[[$this fileV] file] \
  112.             type].[[$this fileV] versionName]"
  113.         $report line
  114.         $report print - 131 fill line
  115.         $report line
  116.     }
  117.  
  118.     return
  119.     }
  120.  
  121.     # header for levels project, configuration, phase and system
  122.     [$this report] header {
  123.     set report [$this report]
  124.     $report print - 131 fill line
  125.     $report print [$this logo1] 13 center break
  126.     $report print "|  "
  127.     $report print "Report               : [$this reportName]" 57
  128.     $report print "Date          : [$report date]" line
  129.     $report print [$this logo2] 13 center break
  130.     $report print "|  "
  131.     $report space 57
  132.     $report print "Creator       :\
  133.         [[[$this corporate] currentUser] name]" line
  134.     $report print [$this logo3] 13 center break
  135.     $report print "|  "
  136.     if ![[$this project] isNil] {
  137.         $report print "Project              :\
  138.         [[$this project] name]" 57
  139.         if ![[$this phaseV] isNil] {
  140.         $report print "Phase Version :\
  141.         [[[$this phaseV] phase] name].[[$this phaseV] versionName]"
  142.         }
  143.     }
  144.     $report line
  145.     $report print [$this logo4] 13 center break
  146.     $report print "|  "
  147.     if ![[$this configV] isNil] {
  148.         $report print "Configuration Version:\
  149.         [[[$this configV] config] name].[[$this configV] versionName]" 57
  150.         if ![[$this systemV] isNil] {
  151.         $report print "System Version:\
  152.         [[[$this systemV] system] name].[[$this systemV] versionName]"
  153.         }
  154.     }
  155.     $report line
  156.     $report print - 131 fill line
  157.     $report line
  158.     }
  159. }
  160.  
  161.  
  162. method ReportBase::setFooter {this} {
  163.     [$this report] footer {
  164.     [$this report] line
  165.     [$this report] print "- [[$this report] pageno] -" 131 center line
  166.     }
  167. }
  168.  
  169. method ReportBase::getLongName {this shortName} {
  170.     set propdef [[$this propDefs] definition $shortName]
  171.     if [lempty $propdef] {
  172.     return $shortName
  173.     }
  174.     return [$propdef longName]
  175. }
  176.  
  177. method ReportBase::propertyHeader {this} {
  178.     [$this report] space 6
  179.     [$this report] print " - Property Name : Property Value" line
  180.     [$this report] print - [[$this report] linelen] fill line
  181.     [$this report] line
  182. }
  183.  
  184. method ReportBase::showProperties {this object {selection {}} } {
  185.     if [lempty [$object properties]] {
  186.         return
  187.     }
  188.     set max 0
  189.     set newline 0
  190.  
  191.     if [lempty $selection] {
  192.     foreach prop [$object properties] {
  193.             set len [string length [$this getLongName [$prop name]]]
  194.             if { $len > $max } { set max $len }
  195.         }
  196.     foreach prop [osort name [$object properties]] {
  197.         [$this report] space 6
  198.         [$this report] print "- "
  199.         [$this report] print "[$this getLongName [$prop name]]" $max
  200.         [$this report] print " : "
  201.         [$this report] print [$prop value] keepnl [expr 110 - $max] line
  202.     }
  203.         # Prints always one or more properties
  204.         set newline 1
  205.     } else {
  206.     foreach propName "$selection" {
  207.             set len [string length [$this getLongName $propName]]
  208.             if { $len > $max } { set max $len }
  209.         }
  210.     foreach propName "$selection" {
  211.             set value [$object getPropertyValue $propName]
  212.             if [lempty $value] continue
  213.  
  214.             set newline 1
  215.         [$this report] space 6
  216.         [$this report] print "- "
  217.         [$this report] print "[$this getLongName $propName]" $max
  218.         [$this report] print " : "
  219.         [$this report] print "$value" keepnl [expr 110 - $max] line
  220.     }
  221.     }
  222.     if $newline { [$this report] line }
  223. }
  224.  
  225. method ReportBase::corporateReport {this} {
  226.     foreach project [osort name [[$this corporate] projects]] {
  227.     $this project $project
  228.     if { [$this projectReport] == -1 } {
  229.         return -1
  230.     }
  231.     }
  232.     return 0
  233. }
  234.  
  235.  
  236. method ReportBase::projectReport {this} {
  237.     foreach configV [osort config.name versionNumber -versnum \
  238.     [[$this project] configVersions]] {
  239.         $this configV $configV
  240.         if { [$this configReport] == -1 } {
  241.         return -1
  242.         }
  243.     }
  244.     return 0
  245. }
  246.  
  247.  
  248. method ReportBase::configReport {this} {
  249.     foreach phaseV [[$this configV] phaseVersions] {
  250.     $this phaseV $phaseV
  251.     if { [$this phaseReport] == -1 } {
  252.         return -1
  253.     }
  254.     }
  255.     return 0
  256. }
  257.  
  258.  
  259. method ReportBase::phaseReport {this} {
  260.     foreach systemV [osort system.name versionNumber -versnum \
  261.     [query "system.type == system" [[$this phaseV] systemVersions]]] {
  262.         $this systemV $systemV
  263.         if { [$this systemReport] == -1 } {
  264.         return -1
  265.         }
  266.     }
  267.     return 0
  268. }
  269.  
  270.  
  271. method ReportBase::systemReport {this} {
  272.     foreach fileV [osort file.type file.name versionNumber -versnum \
  273.     [[$this systemV] localFileVersions]] {
  274.         $this fileV $fileV
  275.         if { [$this fileReport] == -1 } {
  276.         return -1
  277.         }
  278.     }
  279.     return 0
  280. }
  281.  
  282.  
  283. method ReportBase::fileReport {this} {
  284.     $this levelError
  285.     return -1
  286. }
  287.  
  288.  
  289. method ReportBase::levelError {this} {
  290.     [$this report] print "This report cannot be executed on context "
  291.     [$this report] print "level [[ClientContext::global] currentLevel]"
  292.     [$this report] line
  293. }
  294.  
  295.  
  296. method ReportBase::execute {this} {
  297.     set cc [ClientContext::global]
  298.     $this corporate [$cc currentCorporate]
  299.     $this project   [$cc currentProject]
  300.     $this configV   [$cc currentConfig]
  301.     $this phaseV    [$cc currentPhase]
  302.     $this systemV   [$cc currentSystem]
  303.     $this fileV     [$cc currentFile]
  304.  
  305.     $this initProperties
  306.     $this setHeader
  307.     $this setFooter
  308.  
  309.     case [$cc currentLevel] in {
  310.     Corporate    { $this corporateReport }
  311.     Project        { $this projectReport }
  312.     Config        { $this configReport }
  313.     Phase        { $this phaseReport }
  314.     System        { $this systemReport }
  315.     File        { $this fileReport }
  316.     default        { $this levelError }
  317.     }
  318. }
  319.