home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / plugins / apache / dumper.tcl < prev    next >
Text File  |  2000-11-02  |  3KB  |  101 lines

  1.  
  2. # apacheDumper --
  3. #   Dumps the XML configuration to httpd.conf
  4. # TO-DO:  This is done in a crude manner.Reuse the existing httpd.conf
  5. # to preserve user comments when possible
  6.  
  7.  
  8. class apacheDumper {
  9.     variable specialCaseMapping
  10.     constructor {} {
  11.     array set specialCaseMapping  {}
  12.     }
  13.     method setSpecialCase { procedure args }
  14.     method isSpecialCase { dirName }
  15.     method processContainer { xmlConf container }
  16.     method dump { xmlConf }
  17.     method dumpContainer { xmlConf container }
  18. }
  19.  
  20. body apacheDumper::isSpecialCase { dirName } {
  21.     return [info exists specialCaseMapping($dirName)]
  22.  
  23. body apacheDumper::dump { xmlConfDoc } {
  24.    set result [ dumpContainer $xmlConfDoc \
  25.        [set rootC [$xmlConfDoc getRootContainer]]]
  26.    foreach container [$xmlConfDoc getContainers $rootC] {
  27.     append result [ processContainer $xmlConfDoc $container]
  28.    }
  29.    return $result
  30. }
  31.  
  32. body apacheDumper::processContainer { xmlConfDoc container } {
  33.     set result {}
  34.     append result "<[$container getClasses] [$container getName]>\n"
  35.     append result [ dumpContainer $xmlConfDoc $container ]
  36.     foreach childContainer [$xmlConfDoc getContainers $container] {
  37.     append result [ processContainer $xmlConfDoc $childContainer]
  38.     }
  39.     append result "</[$container getClasses]>\n"
  40.     return $result
  41. }
  42.  
  43.  
  44. body apacheDumper::dumpContainer { xmlConfDoc container } {
  45.     set result {}
  46.     foreach directive [$xmlConfDoc getDirectives $container] {
  47.     set dirName [string tolower [$directive getName]]
  48.     if [isSpecialCase $dirName] {
  49.         append result "[$specialCaseMapping($dirName) $directive]\n"
  50.     } else {
  51.         if [$directive doYouBelongTo unknownDirective] {
  52.             append result "[$directive getValue]\n"
  53.         } else {
  54.         switch [$directive getXuiClass] {
  55.         string - number  {
  56.             set value [$directive getValue] 
  57.             if [string compare $value [$directive getDefault]] {
  58.                     set value [$directive getText]
  59.                 if {[$directive doYouBelongTo file] || \
  60.                         [$directive doYouBelongTo directory] } {
  61.                     if [regexp {\ } $value] {
  62.                         set value "\"$value\""
  63.                     }
  64.                 }        
  65.                 append result "$dirName $value\n"
  66.             } 
  67.         } boolean {
  68.             set value [$directive getValue] 
  69.             if [string compare $value [$directive getDefault]] {
  70.                 switch $value {
  71.                 0 {
  72.                     append result "$dirName off\n"
  73.                 } 1 {
  74.                     append result "$dirName on\n"
  75.                 }
  76.             }
  77.             }
  78.         } choice {
  79.             append result \
  80.                    "$dirName [$directive getSelected]\n"
  81.         } default {
  82.            error "No special case and not recognized in dumping\
  83.                    [$directive getXuiClass] [$directive getName]"
  84.         }
  85.         }
  86.        } 
  87.     }
  88.     }
  89.     return $result
  90. }
  91.  
  92. body apacheDumper::setSpecialCase { procedure args } {
  93.     foreach directive $args {
  94.     set specialCaseMapping([string tolower $directive]) \
  95.         $procedure
  96.     }
  97. }    
  98.  
  99.  
  100.