Author: rgardler
Date: Sun Dec 3 17:46:24 2006
New Revision: 482010
URL: http://svn.apache.org/viewvc?view=rev&rev=482010
Log:
Add a .forrestPipeline URL extension that returns a representation
of the pipeline used to process a request. Note that this is a
horrible hack, but it gives an idea of what should be done. I'll
create an issue to refactor this implementation.
Modified:
forrest/trunk/whiteboard/forrest2/core/src/core/org/apache/forrest/core/Controller.java
forrest/trunk/whiteboard/forrest2/core/src/core/org/apache/forrest/core/IController.java
forrest/trunk/whiteboard/forrest2/core/src/test/org/apache/forrest/test/core/TestController.java
Modified:
forrest/trunk/whiteboard/forrest2/core/src/core/org/apache/forrest/core/Controller.java
URL:
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/forrest2/core/src/core/org/apache/forrest/core/Controller.java?view=diff&rev=482010&r1=482009&r2=482010
==============================================================================
---
forrest/trunk/whiteboard/forrest2/core/src/core/org/apache/forrest/core/Controller.java
(original)
+++
forrest/trunk/whiteboard/forrest2/core/src/core/org/apache/forrest/core/Controller.java
Sun Dec 3 17:46:24 2006
@@ -79,6 +79,12 @@
private AbstractXmlApplicationContext context;
+ private String outputPluginClass;
+
+ private String inputPluginClass;
+
+ private String readerClass;
+
/**
* Create a controller that uses the locationmap definition file at the
* provided location.
@@ -152,8 +158,8 @@
final List<AbstractSourceDocument> sourceDocs = this
.loadAllSourceDocuments(requestURI, sourceLocs);
- final InternalDocument internalDoc = this
- .processInputPlugins(requestURI, sourceDocs);
+ final InternalDocument internalDoc = this.processInputPlugins(
+ requestURI, sourceDocs);
this.internalDocsCache.put(requestURI, internalDoc);
final AbstractOutputDocument output = this
@@ -165,18 +171,20 @@
/**
* Process each of the documents supplied with the appropriate input
plugins
* to get a document in our internal format.
- * @param requestURI
+ *
+ * @param requestURI
*
* @param sourceDocuments
* @throws IOException
* @throws ProcessingException
*/
- private InternalDocument processInputPlugins(
- URI requestURI, final List<AbstractSourceDocument>
sourceDocuments)
+ private InternalDocument processInputPlugins(URI requestURI,
+ final List<AbstractSourceDocument> sourceDocuments)
throws IOException, ProcessingException {
InternalDocument result = null;
if (sourceDocuments.size() == 0) {
- result = new InternalErrorDocument(requestURI, "Unable
to load source document");
+ result = new InternalErrorDocument(requestURI,
+ "Unable to load source document");
} else {
for (int i = 0; i < sourceDocuments.size(); i++) {
final AbstractSourceDocument doc =
sourceDocuments.get(i);
@@ -203,6 +211,7 @@
} catch (final NoSuchBeanDefinitionException e) {
plugin = new PassThroughInputPlugin();
}
+ inputPluginClass = plugin.getClass().toString();
return plugin;
}
@@ -242,6 +251,7 @@
if (plugin == null) {
plugin = new BaseOutputPlugin();
}
+ outputPluginClass = plugin.getClass().toString();
return plugin;
}
@@ -315,6 +325,7 @@
throw new ProcessingException(
"Unable to get a reader for : " + uri,
e);
}
+ readerClass = reader.getClass().toString();
return reader;
}
@@ -457,6 +468,8 @@
return getSourceDocumentAsOutput(requestURI);
} else if
(requestURI.getPath().endsWith(this.internalURLExtension)) {
return getInternalDocumentAsOutput(requestURI);
+ } else if
(requestURI.getPath().endsWith(this.pipelineURLExtension)) {
+ return getPipelineAsOutput(requestURI);
}
AbstractOutputDocument output =
this.outputDocCache.get(requestURI);
@@ -471,7 +484,57 @@
return output;
}
- private DefaultOutputDocument getInternalDocumentAsOutput(final URI
requestURI) throws ProcessingException {
+ /**
+ * Return an XML document that represents the processing pipeline for
the
+ * given request URI.
+ *
+ * @param requestURI
+ * @return
+ * @throws ProcessingException
+ */
+ private AbstractOutputDocument getPipelineAsOutput(URI requestURI)
throws ProcessingException {
+ try {
+ this.processRequest(requestURI);
+ } catch (final Exception e) {
+ throw new ProcessingException(
+ "Unable to create the output documents
for "
+ + requestURI + "
because " + e.getMessage(), e);
+ }
+ StringBuffer sb = new StringBuffer();
+ sb.append("<forrestPipeline request=\"");
+ sb.append(requestURI);
+ sb.append("\">");
+ sb.append("<source url=\"");
+ sb.append("URL calculation not implemented yet\">");
+ sb.append("</source>");
+ sb.append("<!-- FIXME: if there are a chain of readers we
should show them all here -->");
+ sb.append("<reader class=\"");
+ sb.append(readerClass);
+ sb.append("\">");
+ sb.append("</reader>");
+ sb.append("<!-- FIXME: if there are a chain of input plugins we
should show them all here -->");
+ sb.append("<inputPlugin class=\"");
+ sb.append(inputPluginClass);
+ sb.append("\">");
+ sb.append("</inputPlugin>");
+ sb.append("<outputPlugin class=\"");
+ sb.append(outputPluginClass);
+ sb.append("\">");
+ sb.append("</outputPlugin>");
+ sb.append("<forrestPipeline>");
+ return new DefaultOutputDocument(requestURI, sb.toString());
+ }
+
+ /**
+ * Get an output document that contains the internal document gneerated
by
+ * the given request URI.
+ *
+ * @param requestURI
+ * @return
+ * @throws ProcessingException
+ */
+ private DefaultOutputDocument getInternalDocumentAsOutput(
+ final URI requestURI) throws ProcessingException {
final InternalDocument doc =
this.getInternalDocument(requestURI);
final StringBuffer content = new StringBuffer();
try {
@@ -481,14 +544,21 @@
content.append(requestURI);
content.append("</error>");
}
- final DefaultOutputDocument output = new DefaultOutputDocument(
- requestURI, content.toString());
- return output;
+ return new DefaultOutputDocument(requestURI,
content.toString());
}
- private DefaultOutputDocument getSourceDocumentAsOutput(final URI
requestURI) throws MalformedURLException, ProcessingException {
- final AbstractSourceDocument doc = this
- .getSourceDocuments(requestURI);
+ /**
+ * Get an output document that contains the original source document
for the
+ * given request URI.
+ *
+ * @param requestURI
+ * @return
+ * @throws MalformedURLException
+ * @throws ProcessingException
+ */
+ private DefaultOutputDocument getSourceDocumentAsOutput(final URI
requestURI)
+ throws MalformedURLException, ProcessingException {
+ final AbstractSourceDocument doc =
this.getSourceDocuments(requestURI);
final StringBuffer content = new StringBuffer();
try {
content.append(doc.getContentAsString());
@@ -498,8 +568,6 @@
content.append("</error>");
}
- final DefaultOutputDocument output = new DefaultOutputDocument(
- requestURI, content.toString());
- return output;
+ return new DefaultOutputDocument(requestURI,
content.toString());
}
}
Modified:
forrest/trunk/whiteboard/forrest2/core/src/core/org/apache/forrest/core/IController.java
URL:
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/forrest2/core/src/core/org/apache/forrest/core/IController.java?view=diff&rev=482010&r1=482009&r2=482010
==============================================================================
---
forrest/trunk/whiteboard/forrest2/core/src/core/org/apache/forrest/core/IController.java
(original)
+++
forrest/trunk/whiteboard/forrest2/core/src/core/org/apache/forrest/core/IController.java
Sun Dec 3 17:46:24 2006
@@ -19,6 +19,8 @@
final String sourceURLExtension = ".forrestSource";
final String internalURLExtension = ".forrestInternal";
+
+ final String pipelineURLExtension = ".forrestPipeline";
public abstract AbstractInputPlugin getInputPlugin(
final AbstractSourceDocument doc);
Modified:
forrest/trunk/whiteboard/forrest2/core/src/test/org/apache/forrest/test/core/TestController.java
URL:
http://svn.apache.org/viewvc/forrest/trunk/whiteboard/forrest2/core/src/test/org/apache/forrest/test/core/TestController.java?view=diff&rev=482010&r1=482009&r2=482010
==============================================================================
---
forrest/trunk/whiteboard/forrest2/core/src/test/org/apache/forrest/test/core/TestController.java
(original)
+++
forrest/trunk/whiteboard/forrest2/core/src/test/org/apache/forrest/test/core/TestController.java
Sun Dec 3 17:46:24 2006
@@ -51,6 +51,9 @@
public static final String INTERNAL_REQUEST_URI = BASE_REQUEST_URI
+ "testPage.forrestInternal";
+ public static final String PIPELINE_REQUEST_URI = BASE_REQUEST_URI
+ + "testPage.forrestPipeline";
+
public static final String VARIABLE_SUBSTITUTION_REQUEST_URI =
BASE_REQUEST_URI
+ "variable/sample_simple.forrestSource";
@@ -140,6 +143,23 @@
assertNotNull(output);
assertTrue("Content is not as expected",
output.getContentAsString()
.contains("http://www.w3.org/2002/06/xhtml2"));
+ }
+
+ public void testForrestPipelineRequest() throws ProcessingException,
+ URISyntaxException, IOException {
+ final AbstractOutputDocument output = this.controller
+ .getOutputDocument(new
URI(PIPELINE_REQUEST_URI));
+ assertNotNull(output);
+ assertTrue("Content does not appear to be a pipeline
description", output.getContentAsString()
+ .contains("forrestPipeline"));
+ assertTrue("Pipeline does not define source location",
output.getContentAsString()
+ .contains("<source"));
+ assertTrue("Pipeline does not define a reader",
output.getContentAsString()
+ .contains("<reader"));
+ assertTrue("Pipeline does not define an input plugin",
output.getContentAsString()
+ .contains("<inputPlugin"));
+ assertTrue("Pipeline does not define an output plugin",
output.getContentAsString()
+ .contains("<outputPlugin"));
}
public void testVariableSubstitution() throws ProcessingException,