paulb@235 | 1 | #!/usr/bin/env python |
paulb@235 | 2 | |
paulb@235 | 3 | "A job candidate editing application." |
paulb@235 | 4 | |
paulb@235 | 5 | import WebStack.Generic |
paulb@235 | 6 | import XSLForms.Resources |
paulb@235 | 7 | import XSLForms.Utils |
paulb@235 | 8 | import os |
paulb@235 | 9 | |
paulb@235 | 10 | # Site map imports. |
paulb@235 | 11 | |
paulb@235 | 12 | from WebStack.Resources.ResourceMap import MapResource |
paulb@235 | 13 | from WebStack.Resources.Static import DirectoryResource |
paulb@235 | 14 | |
paulb@235 | 15 | # Resource classes. |
paulb@235 | 16 | |
paulb@235 | 17 | class CandidateResource(XSLForms.Resources.XSLFormsResource): |
paulb@235 | 18 | |
paulb@235 | 19 | "A resource providing editing facilities for a job candidate profile." |
paulb@235 | 20 | |
paulb@235 | 21 | resource_dir = os.path.join(os.path.split(__file__)[0], "Resources") |
paulb@235 | 22 | encoding = "utf-8" |
paulb@235 | 23 | template_resources = { |
paulb@249 | 24 | "candidate" : ("candidate_template.xhtml", "candidate_output.xsl") |
paulb@235 | 25 | } |
paulb@249 | 26 | init_resources = { |
paulb@249 | 27 | "candidate" : ("candidate_template.xhtml", "candidate_input.xsl") |
paulb@235 | 28 | } |
paulb@235 | 29 | document_resources = { |
paulb@235 | 30 | "status" : "candidate_status.xml" |
paulb@235 | 31 | } |
paulb@235 | 32 | in_page_resources = { |
paulb@235 | 33 | } |
paulb@235 | 34 | |
paulb@235 | 35 | def respond_to_form(self, trans, form): |
paulb@235 | 36 | |
paulb@235 | 37 | """ |
paulb@235 | 38 | Respond to a request having the given transaction 'trans' and the given |
paulb@235 | 39 | 'form' information. |
paulb@235 | 40 | """ |
paulb@235 | 41 | |
paulb@235 | 42 | in_page_resource = self.get_in_page_resource(trans) |
paulb@235 | 43 | parameters = form.get_parameters() |
paulb@235 | 44 | documents = form.get_documents() |
paulb@235 | 45 | |
paulb@235 | 46 | # Ensure the presence of a document. |
paulb@235 | 47 | |
paulb@235 | 48 | if documents.has_key("candidate"): |
paulb@235 | 49 | candidate = documents["candidate"] |
paulb@235 | 50 | else: |
paulb@235 | 51 | candidate = form.new_instance("candidate") |
paulb@235 | 52 | |
paulb@235 | 53 | # Add and remove elements according to the selectors found. |
paulb@235 | 54 | |
paulb@235 | 55 | selectors = form.get_selectors() |
paulb@235 | 56 | XSLForms.Utils.remove_elements(selectors.get("remove")) |
paulb@235 | 57 | XSLForms.Utils.add_elements(selectors.get("add-skill"), "skill", "skills") |
paulb@235 | 58 | XSLForms.Utils.add_elements(selectors.get("add-qualification"), "qualification", "qualifications") |
paulb@235 | 59 | XSLForms.Utils.add_elements(selectors.get("add-employment"), "employment", "experience") |
paulb@235 | 60 | |
paulb@235 | 61 | # Transform, adding enumerations/ranges. |
paulb@235 | 62 | |
paulb@249 | 63 | init_xsl = self.prepare_initialiser("candidate") |
paulb@235 | 64 | status_xml = self.prepare_document("status") |
paulb@249 | 65 | candidate = self.get_result([init_xsl], candidate, references={"status" : status_xml}) |
paulb@235 | 66 | |
paulb@235 | 67 | # Start the response. |
paulb@235 | 68 | |
paulb@235 | 69 | trans.set_content_type(WebStack.Generic.ContentType("application/xhtml+xml", self.encoding)) |
paulb@235 | 70 | |
paulb@235 | 71 | # Ensure that an output stylesheet exists. |
paulb@235 | 72 | |
paulb@235 | 73 | if in_page_resource in self.in_page_resources.keys(): |
paulb@235 | 74 | trans_xsl = self.prepare_fragment("candidate", in_page_resource) |
paulb@294 | 75 | stylesheet_parameters = self.prepare_parameters(parameters) |
paulb@235 | 76 | else: |
paulb@235 | 77 | trans_xsl = self.prepare_output("candidate") |
paulb@294 | 78 | stylesheet_parameters = {} |
paulb@235 | 79 | |
paulb@235 | 80 | # Complete the response. |
paulb@235 | 81 | |
paulb@235 | 82 | self.send_output(trans, [trans_xsl], candidate, stylesheet_parameters) |
paulb@235 | 83 | |
paulb@235 | 84 | # Site map initialisation. |
paulb@235 | 85 | |
paulb@235 | 86 | def get_site(): |
paulb@235 | 87 | |
paulb@235 | 88 | "Return a simple Web site resource." |
paulb@235 | 89 | |
paulb@235 | 90 | # Get the main resource and the directory used by the application. |
paulb@235 | 91 | |
paulb@235 | 92 | candidate_resource = CandidateResource() |
paulb@235 | 93 | directory = candidate_resource.resource_dir |
paulb@235 | 94 | |
paulb@235 | 95 | # Make a simple Web site. |
paulb@235 | 96 | |
paulb@235 | 97 | resource = MapResource({ |
paulb@235 | 98 | # Static resources: |
paulb@235 | 99 | #"scripts" : DirectoryResource(os.path.join(directory, "scripts"), {"js" : "text/javascript"}), |
paulb@235 | 100 | # Main page and in-page resources: |
paulb@235 | 101 | None : candidate_resource |
paulb@235 | 102 | }) |
paulb@235 | 103 | |
paulb@235 | 104 | return resource |
paulb@235 | 105 | |
paulb@235 | 106 | # vim: tabstop=4 expandtab shiftwidth=4 |