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