Sylvain Wallez wrote:
> Guido Casper wrote:
>
>> Did anyone else also feel the need to have something like
>> processPipelineTo but getting a DOM or just an InputStream instead
>> of just streaming it directly to another OutputStream?
>>
>>
>
> Rather than extending the FOM, what we need is a helper JS library
> that
> is a simple wrapper around the SourceResolver and the
> SourceUtil.toDOM() method. I have this on my projects in a
> "flow-utils.js" file.

Yes but passing parameters to the pipeline that way is a hassle and
misses the elegance of JXTemplate.

Guido

>
> I'll add it in the CVS (needs a little polishing). In the meantime,
> here are the DOM-related functions:
>
> ========================================================
>
> // Create a new document, given the name of its root element
> function newDocument(root) {
>     var result =
>
Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocum
entBuilder().newDocument();
>     result.appendChild(result.createElement("News"));
>     return result;
> }
>
> // Load a document from an URI, absolute or relative to the current
> sitemap function loadDocument(uri) {
>     var resolver =
> cocoon.getComponent("org.apache.excalibur.source.SourceResolver");
>     var source = resolver.resolveURI(uri);
>     try {
>         var document =
> Packages.org.apache.cocoon.components.source.SourceUtil.toDOM(source);
>     } finally {
>         resolver.release(source);
>         cocoon.releaseComponent(resolver);
>     }
>     return document;
> }
>
> // Save a document to an URI (which should be writeable)
> function saveDocument(document, uri) {
>     var resolver =
>
cocoon.getComponent(Packages.org.apache.cocoon.environment.SourceResolve
r.ROLE);
>     var source = resolver.resolveURI(uri);
>     var output = null;
>
>     try {
>         output = source.getOutputStream();
>
>         var transformer =
>
Packages.javax.xml.transform.TransformerFactory.newInstance().newTransfo
rmer();
>
>
>
transformer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.IN
DENT,
> "true");
>
>
transformer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.ME
THOD,
> "xml");
>
>
transformer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.EN
CODING,
> "ISO-8859-1");
>         transformer.transform(
>             new Packages.javax.xml.transform.dom.DOMSource(document),
>             new
>         Packages.javax.xml.transform.stream.StreamResult(output) );
>
>     } finally {
>         if (output != null) output.close();
>         resolver.release(source);
>         cocoon.releaseComponent(resolver);
>     }
> }
>
> ========================================================
>
> Note that processPipelineTo is nothing more than copying the result
> of a "cocoon:/" uri to an outputstream after having called
> FlowHelper.setContextObject(objectModel, viewdata);
>
> Sylvain

Reply via email to