ovidiu      2002/09/24 01:27:01

  Modified:    src/java/org/apache/cocoon/components/treeprocessor/sitemap
                        CallNodeBuilder.java
  Log:
  Modified to support using <map:call> for invoking resources, flow
  functions and restarting continuations.
  
  Revision  Changes    Path
  1.6       +38 -20    
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallNodeBuilder.java
  
  Index: CallNodeBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallNodeBuilder.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- CallNodeBuilder.java      11 Sep 2002 10:08:34 -0000      1.5
  +++ CallNodeBuilder.java      24 Sep 2002 08:27:01 -0000      1.6
  @@ -59,6 +59,7 @@
   import org.apache.cocoon.components.treeprocessor.CategoryNodeBuilder;
   import org.apache.cocoon.components.treeprocessor.LinkedProcessingNodeBuilder;
   import org.apache.cocoon.components.treeprocessor.ProcessingNode;
  +import org.apache.cocoon.components.flow.Interpreter;
   
   /**
    *
  @@ -73,20 +74,26 @@
       protected ProcessingNode node;
       protected String resourceName;
       protected String functionName;
  +    protected String continuationId;
   
       public ProcessingNode buildNode(Configuration config)
           throws Exception
       {
  -        this.resourceName = config.getAttribute("resource", null);
  -        this.functionName = config.getAttribute("function", null);
  +        resourceName = config.getAttribute("resource", null);
  +        functionName = config.getAttribute("function", null);
  +        continuationId = config.getAttribute("continuation", null);
  +
  +        if (resourceName == null) {
  +          if (functionName == null && continuationId == null)
  +            throw new ConfigurationException("<map:call> must have either a 
'resource', a 'function' or a 'continuation' attribute!");
   
  -        if (resourceName == null && functionName == null)
  -            throw new ConfigurationException("<map:call> must have either a 
'resource' or a 'function' attribute!");
  -
  -        if (resourceName != null)
  -            this.node = new CallNode();
  -        else
  -            this.node = new CallFunctionNode(functionName);
  +          node = new CallFunctionNode(functionName, continuationId);
  +        }
  +        else {
  +            if (functionName != null || continuationId != null)
  +              throw new ConfigurationException("<map:call> can be used to call 
either a resource, or a function/continuation in the control flow! Please specify 
either <map:call resource=\"...\"/> or <map:call function=\"...\" 
continuation=\"...\"/>.");
  +            node = new CallNode();
  +        }
   
           this.treeBuilder.setupNode(this.node, config);
           if (node instanceof Configurable)
  @@ -98,18 +105,29 @@
       public void linkNode()
           throws Exception
       {
  +      if (resourceName != null) {
  +        // We have a <map:call resource="..."/>
           CategoryNode resources
  -            = CategoryNodeBuilder.getCategoryNode(this.treeBuilder, "resources");
  +            = CategoryNodeBuilder.getCategoryNode(treeBuilder, "resources");
   
  -        if (resources == null) {
  -            String msg = "This sitemap contains no resources. Cannot call at "
  -                + this.node.getLocation();
  -            throw new ConfigurationException(msg);
  -        }
  +        if (resources == null)
  +            throw new ConfigurationException("This sitemap contains no resources. 
Cannot call at " + node.getLocation());
   
  -        if (resourceName != null)
  -            ((CallNode)this.node).setResource(resources, this.resourceName);
  -        else
  -            ((CallFunctionNode)this.node).setResources(resources);
  +        ((CallNode)this.node).setResource(resources, this.resourceName);
  +      }
  +      else {
  +        // We have a <map:call> with either "function" or
  +        // "continuation", or both specified
  +
  +        // Check to see if a flow has been defined in this sitemap
  +        FlowNode flow = (FlowNode)treeBuilder.getRegisteredNode("flow");
  +        if (flow == null)
  +            throw new ConfigurationException("This sitemap contains no control 
flows defined, cannot call at " + node.getLocation() + ". Define a control flow using 
<map:flow>, with embedded <map:script> elements.");
  +
  +        // Get the Interpreter instance and set it up in the
  +        // CallFunctionNode function
  +        Interpreter interpreter = flow.getInterpreter();
  +        ((CallFunctionNode)node).setInterpreter(interpreter);
  +      }
       }
   }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to