Author: upayavira
Date: Tue Feb 22 05:00:13 2005
New Revision: 154840
URL: http://svn.apache.org/viewcvs?view=rev&rev=154840
Log:
Adding ability for CocoonBean to process a URL to a content handler
with cocoonBean.process(uri, contentHandler), rather than to an
OutputStream (of course skipping the serializer).
Modified:
cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java
cocoon/trunk/src/java/org/apache/cocoon/environment/commandline/AbstractCommandLineEnvironment.java
cocoon/trunk/status.xml
Modified: cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java
URL:
http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java?view=diff&r1=154839&r2=154840
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java Tue Feb 22
05:00:13 2005
@@ -397,6 +397,36 @@
}
}
+ /**
+ * Process single URI into given content handler, skipping final
+ * serializer
+ *
+ * @param uri to process
+ * @param handler to write generated contents into
+ */
+ public void processURI(String uri, ContentHandler handler)
+ throws Exception {
+
+ if (!initialized) {
+ initialize();
+ }
+ log.info("Processing URI: " + uri);
+
+ // Get parameters, deparameterized URI and path from URI
+ final TreeMap parameters = new TreeMap();
+ final String deparameterizedURI =
+ NetUtils.deparameterize(uri, parameters);
+ parameters.put("user-agent", userAgent);
+ parameters.put("accept", accept);
+
+ int status =
+ getPage(deparameterizedURI, 0L, parameters, null, null, handler);
+
+ if (status >= 400) {
+ throw new ProcessingException("Resource not found: " + status);
+ }
+ }
+
public void dispose() {
if (this.initialized) {
this.initialized = false;
@@ -458,6 +488,47 @@
// Here Cocoon can throw an exception if there are errors in
processing the page
cocoon.process(env);
+
+ // if we get here, the page was created :-)
+ int status = env.getStatus();
+ if (!env.isModified()) {
+ status = -1;
+ }
+ return status;
+ }
+
+ /**
+ * Processes an URI for its content.
+ *
+ * @param deparameterizedURI a <code>String</code> value of an URI to
start sampling from
+ * @param parameters a <code>Map</code> value containing request parameters
+ * @param links a <code>Map</code> value
+ * @param stream an <code>OutputStream</code> to write the content to
+ * @return a <code>String</code> value for the content
+ * @exception Exception if an error occurs
+ */
+ protected int getPage(String deparameterizedURI,
+ long lastModified,
+ Map parameters,
+ Map links,
+ List gatheredLinks,
+ ContentHandler handler)
+ throws Exception {
+
+ parameters.put("user-agent", userAgent);
+ parameters.put("accept", accept);
+
+ FileSavingEnvironment env =
+ new FileSavingEnvironment(deparameterizedURI, lastModified,
context,
+ attributes, parameters, links,
+ gatheredLinks, cliContext, null, log);
+
+ XMLConsumer consumer = new ContentHandlerWrapper(handler);
+ ProcessingPipeline pipeline = cocoon.buildPipeline(env);
+ CocoonComponentManager.enterEnvironment(env,
cocoon.getComponentManager(), cocoon);
+ pipeline.prepareInternal(env);
+ CocoonComponentManager.leaveEnvironment();
+ pipeline.process(env, consumer);
// if we get here, the page was created :-)
int status = env.getStatus();
Modified:
cocoon/trunk/src/java/org/apache/cocoon/environment/commandline/AbstractCommandLineEnvironment.java
URL:
http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/environment/commandline/AbstractCommandLineEnvironment.java?view=diff&r1=154839&r2=154840
==============================================================================
---
cocoon/trunk/src/java/org/apache/cocoon/environment/commandline/AbstractCommandLineEnvironment.java
(original)
+++
cocoon/trunk/src/java/org/apache/cocoon/environment/commandline/AbstractCommandLineEnvironment.java
Tue Feb 22 05:00:13 2005
@@ -39,7 +39,7 @@
* This environment is used to save the requested file to disk.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Id: AbstractCommandLineEnvironment.java,v 1.7 2004/05/25
07:28:24 cziegeler Exp $
+ * @version CVS $Id$
*/
public abstract class AbstractCommandLineEnvironment
@@ -173,6 +173,19 @@
*/
public boolean isExternal() {
return true;
+ }
+
+ /**
+ * Return an OutputStream, but allow it to be null for when
+ * the pipeline is being streamed to the provided SAX
+ * content handler (using CocoonBean)
+ */
+ public OutputStream getOutputStream(int bufferSize) throws IOException {
+ if (this.outputStream == null) {
+ return null;
+ } else {
+ return super.getOutputStream(bufferSize);
+ }
}
}
Modified: cocoon/trunk/status.xml
URL:
http://svn.apache.org/viewcvs/cocoon/trunk/status.xml?view=diff&r1=154839&r2=154840
==============================================================================
--- cocoon/trunk/status.xml (original)
+++ cocoon/trunk/status.xml Tue Feb 22 05:00:13 2005
@@ -202,6 +202,9 @@
<changes>
<release version="@version@" date="@date@">
+ <action dev="UV" type="add">
+ CocoonBean can now process a URL to a SAX ContentHandler (skipping the
serialiser), via cocoon.process(uri, handler).
+ </action>
<action dev="CZ" type="update">
Create proxies for pooled components. Pooled components can now be used in
the same
way as thread safe components, the client code does not need to know if
they are pooled anymore.