ovidiu 02/04/01 20:58:55 Modified: src/scratchpad/schecoon/src/org/apache/cocoon/components/flow AbstractInterpreter.java Log: Refactor processPipeline() and forwardTo() from JavaScriptInterpreter. Continue reading scripts even if there are errors. Revision Changes Path 1.5 +77 -7 xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/flow/AbstractInterpreter.java Index: AbstractInterpreter.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/flow/AbstractInterpreter.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- AbstractInterpreter.java 21 Mar 2002 23:10:55 -0000 1.4 +++ AbstractInterpreter.java 2 Apr 2002 04:58:54 -0000 1.5 @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.component.ComponentException; import org.apache.avalon.framework.component.ComponentManager; @@ -15,6 +16,10 @@ import org.apache.cocoon.Constants; import org.apache.cocoon.components.source.SourceFactory; import org.apache.cocoon.components.treeprocessor.CategoryNode; +import org.apache.cocoon.components.treeprocessor.InvokeContext; +import org.apache.cocoon.components.treeprocessor.MapStackResolver; +import org.apache.cocoon.components.treeprocessor.ProcessingNode; +import org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode; import org.apache.cocoon.environment.Context; import org.apache.cocoon.environment.Environment; @@ -22,7 +27,8 @@ * Abstract superclass for various scripting languages used by Cocoon * for flow control. Defines some useful behavior like the ability to * reload script files if they get modified (useful when doing - * development). + * development), and passing the control to Cocoon's sitemap for + * result page generation. * * @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a> * @since March 15, 2002 @@ -31,8 +37,7 @@ implements Component, Composable, Contextualizable, Interpreter, ThreadSafe { /** - * Hash table of source locations -> DelayedRefreshSourceWrapper - * instances + * Hash table of source locations -> ScriptSource instances */ protected HashMap scripts = new HashMap(); @@ -63,7 +68,7 @@ */ protected long checkTime; - CategoryNode resources; + protected CategoryNode resources; public void compose(ComponentManager manager) throws ComponentException @@ -173,8 +178,15 @@ Iterator iter = scripts.values().iterator(); while (iter.hasNext()) { ScriptSource src = (ScriptSource)iter.next(); - if (src.getLastModified() > lastTimeCheck) - src.refresh(environment); + if (src.getLastModified() > lastTimeCheck) { + try { + src.refresh(environment); + } + catch (Exception ex) { + System.out.println("Error reading script " + src.getSourceName() + + ", ignoring!"); + } + } } } @@ -186,7 +198,12 @@ ScriptSource src = new ScriptSource(this, source); scripts.put(source, src); needResolve.remove(0); - src.refresh(environment); + try { + src.refresh(environment); + } + catch (Exception ex) { + System.out.println("Error reading script " + source + ", ignoring!"); + } } } @@ -194,5 +211,58 @@ // is not executed, so the next request will force a reparse of // the script files because of an old time stamp. lastTimeCheck = System.currentTimeMillis(); + } + + public void processPipeline(String name, Map pipelineArgs, Object bizData, + WebContinuation continuation, + Environment environment, InvokeContext ctx) + throws Exception + { + if (ctx == null) { + String msg = "Cannot invoke pipeline with a null InvokeContext! Make sure" + + " you're calling the pipeline during the execution of a request."; + throw new RuntimeException(msg); + } + + environment.setAttribute("bean-dict", bizData); + environment.setAttribute("kont", continuation); + + ProcessingNode pipeline + = resources.getNodeByName(MapStackResolver.unescape(name)); + + if (pipelineArgs != null) + ctx.pushMap(pipelineArgs); + try { + pipeline.invoke(environment, ctx); + } + finally { + environment.removeAttribute("bean-dict"); + environment.removeAttribute("kont"); + if (pipelineArgs != null) + ctx.popMap(); + } + } + + public void forwardTo(String uri, Object bizData, + WebContinuation continuation, + Environment environment, InvokeContext ctx) + throws Exception + { + if (ctx == null) { + String msg = "Cannot invoke pipeline with a null InvokeContext! Make sure" + + " you're calling the pipeline during the execution of a request."; + throw new RuntimeException(msg); + } + + environment.setAttribute("bean-dict", bizData); + environment.setAttribute("kont", continuation); + + try { + PipelinesNode.getRedirector(environment).redirect(false, uri); + } + finally { + environment.removeAttribute("bean-dict"); + environment.removeAttribute("kont"); + } } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]