| cocoon.load("resource://org/apache/cocoon/woody/flow/javascript/woody2.js"); |
| |
| // CVS $Id: form_model_gui.js,v 1.1 2003/12/29 06:14:49 tim Exp $ |
| // Author: Timothy Larson |
| |
| function form_model_gui(form) { |
| |
| var locale = determineLocale(); |
| var model = form.getModel(); |
| form.locale = locale; |
| |
| // get the documentURI parameter from the sitemap which |
| // contains the location of the file to be edited |
| var documentURI = cocoon.parameters["documentURI"]; |
| |
| // parse the document to a DOM-tree |
| var document = loadDocument(documentURI); |
| |
| // bind the document data to the form |
| form.load(document); |
| |
| // show the form |
| form.showForm("form_model_gui-display-pipeline"); |
| print("submitId = " + form.submitId); |
| if (form.isValid) { |
| print("Form is valid"); |
| } else { |
| print("Form is not valid"); |
| } |
| |
| // bind the form's data back to the document |
| form.save(document); |
| |
| // save the DOM-tree back to an XML file, the makeTargetURI |
| // function makes a modified filename so that the |
| // original document is not overwritten |
| saveDocument(document, makeTargetURI(documentURI)); |
| |
| // also store the form as a request attribute as the XSP isn't flow-aware |
| cocoon.request.setAttribute("form_model_gui", form.getWidget()); |
| cocoon.sendPage("form_model_gui-success-pipeline.xsp"); |
| } |
| |
| function determineLocale() { |
| var localeParam = cocoon.request.get("locale"); |
| if (localeParam != null && localeParam.length > 0) { |
| return Packages.org.apache.cocoon.i18n.I18nUtils.parseLocale(localeParam); |
| } |
| return null; |
| } |
| |
| /** |
| * Translate source path into target path so we keep a clean source XML. |
| */ |
| function makeTargetURI(path) { |
| var sfx = ".xml"; |
| var newSfx = "-result.xml"; |
| var newPath = path; |
| if (path.match(/^.*\.xml$/)) { |
| newPath = path.substring(0, path.length - ".xml".length); |
| } |
| return newPath + newSfx; |
| } |
| |
| function loadDocument(uri) { |
| var parser = null; |
| var source = null; |
| var resolver = null; |
| try { |
| parser = cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE); |
| resolver = cocoon.getComponent(Packages.org.apache.cocoon.environment.SourceResolver.ROLE); |
| source = resolver.resolveURI(uri); |
| var is = new Packages.org.xml.sax.InputSource(source.getInputStream()); |
| is.setSystemId(source.getURI()); |
| return parser.parseDocument(is); |
| } finally { |
| if (source != null) |
| resolver.release(source); |
| cocoon.releaseComponent(parser); |
| cocoon.releaseComponent(resolver); |
| } |
| } |
| |
| function saveDocument(document, uri) { |
| var source = null; |
| var resolver = null; |
| var outputStream = null; |
| try { |
| resolver = cocoon.getComponent(Packages.org.apache.cocoon.environment.SourceResolver.ROLE); |
| source = resolver.resolveURI(uri); |
| |
| var tf = Packages.javax.xml.transform.TransformerFactory.newInstance(); |
| |
| if (source instanceof Packages.org.apache.excalibur.source.ModifiableSource |
| && tf.getFeature(Packages.javax.xml.transform.sax.SAXTransformerFactory.FEATURE)) { |
| |
| outputStream = source.getOutputStream(); |
| var transformerHandler = tf.newTransformerHandler(); |
| var transformer = transformerHandler.getTransformer(); |
| transformer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.INDENT, "true"); |
| transformer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.METHOD, "xml"); |
| transformerHandler.setResult(new Packages.javax.xml.transform.stream.StreamResult(outputStream)); |
| |
| var streamer = new Packages.org.apache.cocoon.xml.dom.DOMStreamer(transformerHandler); |
| streamer.stream(document); |
| } else { |
| throw new Packages.org.apache.cocoon.ProcessingException("Cannot write to source " + uri); |
| } |
| } finally { |
| if (source != null) |
| resolver.release(source); |
| cocoon.releaseComponent(resolver); |
| if (outputStream != null) { |
| try { |
| outputStream.flush(); |
| outputStream.close(); |
| } catch (error) { |
| cocoon.log.error("Could not flush/close outputstream: " + error); |
| } |
| } |
| } |
| } |