cocoon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ovi...@apache.org
Subject cvs commit: xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap CallNodeBuilder.java
Date Tue, 24 Sep 2002 08:27:01 GMT
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:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org


Mime
View raw message