You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by da...@apache.org on 2005/04/08 00:18:32 UTC

svn commit: r160478 - in cocoon/trunk/src/java/org/apache/cocoon: components/pipeline/VirtualProcessingPipeline.java components/treeprocessor/sitemap-language.xml components/treeprocessor/sitemap/ComponentsNodeBuilder.java components/treeprocessor/sitemap/VPCsNodeBuilder.java reading/VirtualPipelineReader.java

Author: danielf
Date: Thu Apr  7 15:18:29 2005
New Revision: 160478

URL: http://svn.apache.org/viewcvs?view=rev&rev=160478
Log:
Started adding VirtualPipelineReader, doesn't work yet. Corrected bug in ComponentsNodeBuilder, no VPCs in a section must be allowed.

Added:
    cocoon/trunk/src/java/org/apache/cocoon/reading/VirtualPipelineReader.java
Modified:
    cocoon/trunk/src/java/org/apache/cocoon/components/pipeline/VirtualProcessingPipeline.java
    cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap-language.xml
    cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ComponentsNodeBuilder.java
    cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap/VPCsNodeBuilder.java

Modified: cocoon/trunk/src/java/org/apache/cocoon/components/pipeline/VirtualProcessingPipeline.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/pipeline/VirtualProcessingPipeline.java?view=diff&r1=160477&r2=160478
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/pipeline/VirtualProcessingPipeline.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/pipeline/VirtualProcessingPipeline.java Thu Apr  7 15:18:29 2005
@@ -380,7 +380,17 @@
     }
 
     public boolean process(Environment environment) throws ProcessingException {
-        throw new UnsupportedOperationException();
+        if (!this.prepared) {
+            preparePipeline(environment);
+        }
+
+        // If this is an internal request, lastConsumer was reset!
+        if (this.lastConsumer == null) {
+            this.lastConsumer = this.serializer;
+        }
+        
+        connectPipeline(environment);
+        return processXMLPipeline(environment);
     }
 
     /**

Modified: cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap-language.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap-language.xml?view=diff&r1=160477&r2=160478
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap-language.xml (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap-language.xml Thu Apr  7 15:18:29 2005
@@ -57,6 +57,24 @@
         <ignored-children>source</ignored-children>
       </node>
 
+      <node name="transformers" builder="org.apache.cocoon.components.treeprocessor.sitemap.VPCsNodeBuilder"/>
+
+      <node name="transformer" builder="org.apache.cocoon.components.treeprocessor.sitemap.VPCNodeBuilder">
+        <ignored-children>source</ignored-children>
+      </node>
+
+      <node name="serializers" builder="org.apache.cocoon.components.treeprocessor.sitemap.VPCsNodeBuilder"/>
+
+      <node name="serializer" builder="org.apache.cocoon.components.treeprocessor.sitemap.VPCNodeBuilder">
+        <ignored-children>source</ignored-children>
+      </node>
+
+      <node name="readers" builder="org.apache.cocoon.components.treeprocessor.sitemap.VPCsNodeBuilder"/>
+
+      <node name="reader" builder="org.apache.cocoon.components.treeprocessor.sitemap.VPCNodeBuilder">
+        <ignored-children>source</ignored-children>
+      </node>
+
       <node name="views" builder="org.apache.cocoon.components.treeprocessor.CategoryNodeBuilder">
         <allowed-children>view</allowed-children>
       </node>

Modified: cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ComponentsNodeBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ComponentsNodeBuilder.java?view=diff&r1=160477&r2=160478
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ComponentsNodeBuilder.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ComponentsNodeBuilder.java Thu Apr  7 15:18:29 2005
@@ -28,6 +28,9 @@
  */
 public class ComponentsNodeBuilder extends AbstractProcessingNodeBuilder {
 
+    private static String[] VPCTypes =
+    {"generators", "transformers", "serializers", "readers"};
+
     /** This builder has no parameters -- return <code>false</code> */
     protected boolean hasParameters() {
         return false;
@@ -35,12 +38,14 @@
 
     public ProcessingNode buildNode(Configuration config) throws Exception {
         // Handle the VPCs
-        Configuration child = config.getChild("generators", false);
-        if (child != null) {
-            ProcessingNodeBuilder childBuilder = this.treeBuilder.createNodeBuilder(child);
-            childBuilder.buildNode(child);
+        for (int i = 0; i < VPCTypes.length; i++) {
+            Configuration child = config.getChild(VPCTypes[i], false);
+            if (child != null) {
+                ProcessingNodeBuilder childBuilder =
+                    this.treeBuilder.createNodeBuilder(child);
+                childBuilder.buildNode(child);
+            }
         }
         return null;
     }
 }
-

Modified: cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap/VPCsNodeBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap/VPCsNodeBuilder.java?view=diff&r1=160477&r2=160478
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap/VPCsNodeBuilder.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/sitemap/VPCsNodeBuilder.java Thu Apr  7 15:18:29 2005
@@ -18,8 +18,11 @@
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 
+import org.apache.cocoon.components.treeprocessor.ContainerNode;
 import org.apache.cocoon.components.treeprocessor.ContainerNodeBuilder;
+import org.apache.cocoon.components.treeprocessor.ProcessingNode;
 import org.apache.cocoon.generation.VirtualPipelineGenerator;
+import org.apache.cocoon.reading.VirtualPipelineReader;
 
 /**
  * Handles a set of virtual sitemap components.
@@ -41,6 +44,16 @@
         checkNamespace(child);
 
         String clazz = child.getAttribute("src");
-        return VirtualPipelineGenerator.class.getName().equals(clazz);
+        return VirtualPipelineGenerator.class.getName().equals(clazz)
+            || VirtualPipelineReader.class.getName().equals(clazz);
+    }
+
+    protected void setupNode(ContainerNode node, Configuration config)throws Exception {
+
+        this.treeBuilder.setupNode(node, config);
+
+        ProcessingNode[] children = buildChildNodes(config);
+
+        node.setChildren(children);
     }
 }

Added: cocoon/trunk/src/java/org/apache/cocoon/reading/VirtualPipelineReader.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/reading/VirtualPipelineReader.java?view=auto&rev=160478
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/reading/VirtualPipelineReader.java (added)
+++ cocoon/trunk/src/java/org/apache/cocoon/reading/VirtualPipelineReader.java Thu Apr  7 15:18:29 2005
@@ -0,0 +1,120 @@
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.reading;
+
+import org.apache.cocoon.Constants;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.environment.Environment;
+import org.apache.cocoon.environment.internal.EnvironmentHelper;
+import org.apache.cocoon.sitemap.impl.AbstractVirtualSitemapComponent;
+
+import org.xml.sax.SAXException;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Map;
+
+
+public class VirtualPipelineReader extends AbstractVirtualSitemapComponent
+    implements Reader {
+
+    /** The <code>OutputStream</code> to write on. */
+    protected OutputStream out;
+
+    protected String getTypeName() {
+        return "reader";
+    }
+
+    /**
+     * Set the <code>OutputStream</code>
+     */
+    // The output stream from
+    // EnvironmentHelper.getCurrentEnvironment() is used instead. Is
+    // it always the same?
+    public void setOutputStream(OutputStream out) {
+	this.out = out;
+    }
+
+    /**
+     * Get the mime-type of the output of this <code>Reader</code>
+     * This default implementation returns null to indicate that the
+     * mime-type specified in the sitemap is to be used
+     */
+    public String getMimeType() {
+        return null;
+    }
+
+    /**
+     * @return the time the read source was last modified or 0 if it is not
+     *         possible to detect
+     */
+    public long getLastModified() {
+        return 0;
+    }
+
+    /**
+     * Recycle the component
+     */
+    public void recycle() {
+        this.out = null;
+    }
+
+    /**
+     * Test if the component wants to set the content length
+     */
+    public boolean shouldSetContentLength() {
+        return false;
+    }
+
+    public void generate()
+    throws IOException, SAXException, ProcessingException {
+
+        // Should use SourceResolver of the this components' sitemap, not caller sitemap
+        // Have to switch to another environment...
+        Environment env = EnvironmentHelper.getCurrentEnvironment();
+        String oldPrefix = env.getURIPrefix();
+        String oldURI    = env.getURI();
+
+        // save callers resolved sources if there are any
+        Map oldSourceMap = (Map)env.getAttribute(this.sourceMapName);
+        // place for resolved sources
+        env.setAttribute(this.sourceMapName, this.sourceMap);
+
+        try {
+            try {
+                String uri = (String) this.context.get(Constants.CONTEXT_ENV_URI);
+                String prefix = (String) this.context.get(Constants.CONTEXT_ENV_PREFIX);
+                env.setURI(prefix, uri);
+                
+                this.pipeline.prepareInternal(env);
+            } catch (Exception e) {
+                throw new ProcessingException("Oops", e);
+            } finally {
+                // Restore context
+                env.setURI(oldPrefix, oldURI);
+            }
+
+            this.pipeline.process(env);
+
+        } finally {
+            // restore sourceMap
+            if (oldSourceMap != null)
+                env.setAttribute(this.sourceMapName, oldSourceMap);
+            else
+                env.removeAttribute(this.sourceMapName);
+        }
+    }
+ }