ovidiu 02/03/15 15:39:44
Modified:
src/scratchpad/schecoon/src/org/apache/cocoon/components/treeprocessor/sitemap
CallFunctionNode.java
Log:
Maintain parameters in a list.
Revision Changes Path
1.2 +79 -30
xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/treeprocessor/sitemap/CallFunctionNode.java
Index: CallFunctionNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/treeprocessor/sitemap/CallFunctionNode.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CallFunctionNode.java 13 Mar 2002 19:03:59 -0000 1.1
+++ CallFunctionNode.java 15 Mar 2002 23:39:44 -0000 1.2
@@ -1,72 +1,121 @@
package org.apache.cocoon.components.treeprocessor.sitemap;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
import org.apache.avalon.framework.activity.Initializable;
-
-import org.apache.cocoon.environment.Environment;
-
-import org.apache.cocoon.sitemap.PatternException;
-
+import org.apache.avalon.framework.component.Component;
+import org.apache.avalon.framework.component.ComponentManager;
+import org.apache.avalon.framework.component.Composable;
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.cocoon.components.flow.Interpreter;
+import org.apache.cocoon.components.flow.InterpreterSelector;
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNode;
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.ParameterizableProcessingNode;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
-
-import java.util.List;
-import java.util.Map;
+import org.apache.cocoon.environment.Environment;
+import org.apache.cocoon.sitemap.PatternException;
public class CallFunctionNode extends AbstractProcessingNode
- implements Initializable, ParameterizableProcessingNode
+ implements Component, Configurable, Composable
{
- protected Map parameters;
protected String functionName;
+ protected ArrayList parameters;
protected MapStackResolver resourceResolver;
+ protected ComponentManager manager;
+ String language;
public CallFunctionNode(String funName)
{
functionName = funName;
}
- public void setParameters(Map params)
+ public static List resolveList(List expressions, List mapStack)
+ throws PatternException
{
- parameters = params;
- System.out.println("CallFunctionNode: params = " + params);
+ int size;
+ if (expressions == null || (size = expressions.size()) == 0)
+ return Collections.EMPTY_LIST;
+
+ List result = new ArrayList(size);
+
+ for (int i = 0; i < size; i++) {
+ Interpreter.Argument arg = (Interpreter.Argument)expressions.get(i);
+ String value = MapStackResolver.getResolver(arg.value).resolve(mapStack);
+ result.add (new Interpreter.Argument(arg.name, value));
+ }
+
+ return result;
}
- public void initialize()
- throws Exception
+ /**
+ * Obtain the configuration specific to this node type and update
+ * the internal state.
+ *
+ * @param config a <code>Configuration</code> value
+ * @exception ConfigurationException if an error occurs
+ */
+ public void configure(Configuration config)
+ throws ConfigurationException
{
- if (MapStackResolver.needsResolve(functionName)) {
- // Will always be resolved at invoke time
- this.resourceResolver = MapStackResolver.getResolver(functionName);
+ language = config.getAttribute("language", null);
+
+ parameters = new ArrayList();
+
+ Configuration[] params = config.getChildren("parameter");
+ for (int i = 0; i < params.length; i++) {
+ Configuration param = params[i];
+ String name = param.getAttribute("name", null);
+ String value = param.getAttribute("value", null);
+ parameters.add(new Interpreter.Argument(name, value));
}
+
+ try {
+ if (MapStackResolver.needsResolve(functionName)) {
+ // Will always be resolved at invoke time
+ this.resourceResolver = MapStackResolver.getResolver(functionName);
+ }
+ }
+ catch (PatternException ex) {
+ throw new ConfigurationException(ex.toString());
+ }
+ }
+
+ public void compose(ComponentManager manager)
+ {
+ this.manager = manager;
}
public boolean invoke(Environment env, InvokeContext context)
throws Exception
{
- Map params = parameters;
+ List params = null;
// Resolve parameters
- if (this.parameters != null) {
- params = MapStackResolver.resolveMap(this.parameters,
- context.getMapStack());
- }
+ if (this.parameters != null)
+ params = resolveList(this.parameters, context.getMapStack());
String name = functionName;
-
if (resourceResolver != null) {
// Need to resolve the function name at runtime
name = resourceResolver.resolve(context.getMapStack());
-
- if (getLogger().isInfoEnabled()) {
- getLogger().info("Calling function " + name);
- }
}
- System.out.println("CallFunctionNode: invoking " + name
- + ", params = " + params);
+ InterpreterSelector selector
+ = (InterpreterSelector)manager.lookup(Interpreter.ROLE);
+ if (language == null)
+ language = selector.getDefaultLanguage();
+
+ // Obtain the Interpreter instance for this language
+ Interpreter interpreter = (Interpreter)selector.select(language);
+
+ interpreter.callFunction(name, params, env, context);
return true;
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]