1.1 --- a/examples/Common/Configurator/__init__.py Thu Jul 14 16:03:24 2005 +0000
1.2 +++ b/examples/Common/Configurator/__init__.py Thu Jul 14 16:04:05 2005 +0000
1.3 @@ -6,39 +6,36 @@
1.4 import XSLForms.Fields
1.5 import XSLForms.Output
1.6 import XSLForms.Prepare
1.7 +import XSLForms.Utils
1.8 import XSLOutput
1.9 import libxml2dom
1.10 import os
1.11
1.12 -# NOTE: Move these functions into a common utility library.
1.13 -
1.14 -def add_elements(positions, element_name, element_parent_name=None):
1.15 - if not positions:
1.16 - return
1.17 - for position in positions:
1.18 - if element_parent_name:
1.19 - parent_elements = position.xpath(element_parent_name)
1.20 - if not parent_elements:
1.21 - parent_element = position.ownerDocument.createElementNS(None, element_parent_name)
1.22 - position.appendChild(parent_element)
1.23 - else:
1.24 - parent_element = parent_elements[0]
1.25 - else:
1.26 - parent_element = position
1.27 - parent_element.appendChild(position.ownerDocument.createElementNS(None, element_name))
1.28 -
1.29 -def remove_elements(positions):
1.30 - if not positions:
1.31 - return
1.32 - for position in positions:
1.33 - position.parentNode.removeChild(position)
1.34 -
1.35 class ConfiguratorResource:
1.36
1.37 "A resource providing a system configurator."
1.38
1.39 resource_dir = os.path.join(os.path.split(__file__)[0], "Resources")
1.40 encoding = "utf-8"
1.41 + in_page_resources = {
1.42 + "/cpu" : ("config_output_cpu.xsl", "cpu-node"),
1.43 + "/memory" : ("config_output_memory.xsl", "memory-node"),
1.44 + "/hard-disks" : ("config_output_harddisks.xsl", "hard-disks-node")
1.45 + }
1.46 +
1.47 + def get_fields_from_body(self, trans, encoding):
1.48 + text = trans.get_request_stream().read()
1.49 + parameters = {}
1.50 + for text_line in text.split("\r\n"):
1.51 + text_parts = text_line.split("=")
1.52 + text_name, text_value = text_parts[0], "=".join(text_parts[1:])
1.53 + if not parameters.has_key(text_name):
1.54 + parameters[text_name] = []
1.55 + # NOTE: Workaround from posted text.
1.56 + if text_value[-1] == "\x00":
1.57 + text_value = text_value[:-1]
1.58 + parameters[text_name].append(text_value)
1.59 + return parameters
1.60
1.61 def respond(self, trans):
1.62
1.63 @@ -58,15 +55,8 @@
1.64
1.65 # Handle requests for fragments.
1.66
1.67 - if path_info in ("/cpu", "/memory", "/hard-disks"):
1.68 - text = trans.get_request_stream().read()
1.69 - parameters = {}
1.70 - for text_line in text.split("\r\n"):
1.71 - text_parts = text_line.split("=")
1.72 - text_name, text_value = text_parts[0], "=".join(text_parts[1:])
1.73 - if not parameters.has_key(text_name):
1.74 - parameters[text_name] = []
1.75 - parameters[text_name].append(text_value)
1.76 + if path_info in self.in_page_resources.keys():
1.77 + parameters = self.get_fields_from_body(trans, self.encoding)
1.78 else:
1.79 parameters = trans.get_fields_from_body(self.encoding)
1.80
1.81 @@ -88,12 +78,12 @@
1.82 # Add and remove elements according to the selectors found.
1.83
1.84 selectors = fields.get_selectors(parameters.items(), documents)
1.85 - add_elements(selectors.get("add-memory-unit"), "memory-unit")
1.86 - remove_elements(selectors.get("remove-memory-unit"))
1.87 - add_elements(selectors.get("add-storage-unit"), "storage-unit")
1.88 - remove_elements(selectors.get("remove-storage-unit"))
1.89 - add_elements(selectors.get("add-hard-disk"), "hard-disk")
1.90 - remove_elements(selectors.get("remove-hard-disk"))
1.91 + XSLForms.Utils.add_elements(selectors.get("add-memory-unit"), "memory-unit")
1.92 + XSLForms.Utils.remove_elements(selectors.get("remove-memory-unit"))
1.93 + XSLForms.Utils.add_elements(selectors.get("add-storage-unit"), "storage-unit")
1.94 + XSLForms.Utils.remove_elements(selectors.get("remove-storage-unit"))
1.95 + XSLForms.Utils.add_elements(selectors.get("add-hard-disk"), "hard-disk")
1.96 + XSLForms.Utils.remove_elements(selectors.get("remove-hard-disk"))
1.97
1.98 # Send a response according to certain parameters.
1.99 # When exported, an XML version of the data is returned.
1.100 @@ -124,24 +114,18 @@
1.101
1.102 # Ensure that an output stylesheet exists.
1.103
1.104 - trans_xsl = os.path.join(self.resource_dir, "config_output.xsl")
1.105 - template_xml = os.path.join(self.resource_dir, "config_template.xhtml")
1.106 - XSLForms.Prepare.ensure_stylesheet(template_xml, trans_xsl)
1.107 -
1.108 - if path_info in ("/cpu", "/memory", "/hard-disks"):
1.109 + if path_info in self.in_page_resources.keys():
1.110 + trans_xsl_filename, trans_xsl_region = self.in_page_resources[path_info]
1.111 template_xml = os.path.join(self.resource_dir, "config_output.xsl")
1.112 - if path_info == "/cpu":
1.113 - trans_xsl = os.path.join(self.resource_dir, "config_output_cpu.xsl")
1.114 - XSLForms.Prepare.ensure_stylesheet_fragment(template_xml, trans_xsl, "cpu-node")
1.115 - elif path_info == "/memory":
1.116 - trans_xsl = os.path.join(self.resource_dir, "config_output_memory.xsl")
1.117 - XSLForms.Prepare.ensure_stylesheet_fragment(template_xml, trans_xsl, "memory-node")
1.118 - elif path_info == "/hard-disks":
1.119 - trans_xsl = os.path.join(self.resource_dir, "config_output_harddisks.xsl")
1.120 - XSLForms.Prepare.ensure_stylesheet_fragment(template_xml, trans_xsl, "hard-disks-node")
1.121 + trans_xsl = os.path.join(self.resource_dir, trans_xsl_filename)
1.122 + XSLForms.Prepare.ensure_stylesheet_fragment(template_xml, trans_xsl, trans_xsl_region)
1.123 element_path = parameters.get("element-path", [""])[0]
1.124 stylesheet_parameters["element-path"] = element_path
1.125 - #print "*", stylesheet_parameters["element-path"]
1.126 + #print "*", repr(stylesheet_parameters["element-path"])
1.127 + else:
1.128 + trans_xsl = os.path.join(self.resource_dir, "config_output.xsl")
1.129 + template_xml = os.path.join(self.resource_dir, "config_template.xhtml")
1.130 + XSLForms.Prepare.ensure_stylesheet(template_xml, trans_xsl)
1.131
1.132 stylesheet_parameters["application-url"] = \
1.133 "http://%s:%s%s" % (trans.get_server_name(), trans.get_server_port(), trans.get_path_without_query())
1.134 @@ -152,8 +136,8 @@
1.135 proc.send_output(trans.get_response_stream(), trans.get_response_stream_encoding(),
1.136 configuration)
1.137
1.138 - import sys
1.139 - proc = XSLOutput.Processor([trans_xsl], parameters=stylesheet_parameters)
1.140 - proc.send_output(sys.stderr, "iso-8859-1", configuration)
1.141 + #import sys
1.142 + #proc = XSLOutput.Processor([trans_xsl], parameters=stylesheet_parameters)
1.143 + #proc.send_output(sys.stderr, "iso-8859-1", configuration)
1.144
1.145 # vim: tabstop=4 expandtab shiftwidth=4