Author: jvazquez
Date: Fri Feb 27 20:49:38 2009
New Revision: 748691

URL: http://svn.apache.org/viewvc?rev=748691&view=rev
Log:
SlingTransformer implemented and some refactoring.

Added:
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/cocoon/transform/
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/cocoon/transform/SlingTransformer.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Environment.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/MultiContainerStep.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractCompoundStepImpl.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractStepImpl.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElementImpl.java
      - copied, changed from r746951, 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElement.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/EnvironmentImpl.java
Removed:
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Invocation.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElement.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/InvocationImpl.java
Modified:
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/cocoon/generator/SlingGenerator.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/scripting/xproc/XProcScriptEngine.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/XplBuilder.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/CompoundStep.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Pipeline.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Step.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElement.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/DocumentImpl.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/InputImpl.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/PipelineImpl.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XplElementFactoryImpl.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XsltImpl.java
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/apps/sling/xpl/html.xpl
    
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/xpl-sample/pipelines.json

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/cocoon/generator/SlingGenerator.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/cocoon/generator/SlingGenerator.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/cocoon/generator/SlingGenerator.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/cocoon/generator/SlingGenerator.java
 Fri Feb 27 20:49:38 2009
@@ -19,7 +19,6 @@
 package org.apache.sling.cocoon.generator;
 
 import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 
 import javax.jcr.Session;

Added: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/cocoon/transform/SlingTransformer.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/cocoon/transform/SlingTransformer.java?rev=748691&view=auto
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/cocoon/transform/SlingTransformer.java
 (added)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/cocoon/transform/SlingTransformer.java
 Fri Feb 27 20:49:38 2009
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sling.cocoon.transform;
+
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TemplatesHandler;
+import javax.xml.transform.sax.TransformerHandler;
+
+import org.apache.cocoon.pipeline.component.sax.AbstractTransformer;
+import org.apache.cocoon.pipeline.component.sax.XMLConsumer;
+import org.apache.cocoon.pipeline.component.sax.XMLConsumerAdapter;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+public class SlingTransformer extends AbstractTransformer {
+       
+       private final Logger log = LoggerFactory.getLogger(getClass());
+       
+       private SlingHttpServletRequest request;
+       private Map<String, Object> parameters;
+    private String srcAbsPath;
+
+    public SlingTransformer() {
+        super();
+    }
+
+    public SlingTransformer(SlingScriptHelper sling, String srcAbsPath) {
+        this(sling, srcAbsPath, null);
+    }
+
+    public SlingTransformer(SlingScriptHelper sling, String srcAbsPath, 
Map<String, Object> parameters) {
+        super();
+        if (srcAbsPath == null) {
+            throw new IllegalArgumentException("The parameter 'source' mustn't 
be null.");
+        }
+        
+        this.request = sling.getRequest();
+        this.parameters = parameters;
+        this.srcAbsPath = srcAbsPath;
+    }
+
+    /**
+     * Test if the name is a valid parameter name for XSLT
+     */
+    private static boolean isValidXSLTParameterName(String name) {
+        return name.matches("[a-zA-Z_][\\w\\-\\.]*");
+    }
+
+    @Override
+    public void setConfiguration(Map<String, ? extends Object> configuration) {
+        this.parameters = new HashMap<String, Object>(configuration);
+    }
+
+    @Override
+    protected void setXMLConsumer(XMLConsumer consumer) {
+        TransformerHandler transformerHandler;
+        try {
+            transformerHandler = this.createTransformerHandler();
+        } catch (Exception ex) {
+            throw new RuntimeException("Could not initialize transformer 
handler.", ex);
+        }
+
+        final Map<String, Object> map = this.getLogicSheetParameters();
+        if (map != null) {
+            final Transformer transformer = 
transformerHandler.getTransformer();
+
+            for (Entry<String, Object> entry : map.entrySet()) {
+                transformer.setParameter(entry.getKey(), entry.getValue());
+            }
+        }
+
+        final SAXResult result = new SAXResult();
+        result.setHandler(consumer);
+        // According to TrAX specs, all TransformerHandlers are LexicalHandlers
+        result.setLexicalHandler(consumer);
+        transformerHandler.setResult(result);
+
+        super.setXMLConsumer(new XMLConsumerAdapter(transformerHandler, 
transformerHandler));
+    }
+
+    private TransformerHandler createTransformerHandler() throws Exception {
+        SAXTransformerFactory transformerFactory = (SAXTransformerFactory) 
TransformerFactory.newInstance();
+        TemplatesHandler templatesHandler = 
transformerFactory.newTemplatesHandler();
+
+        XMLReader xmlReader = XMLReaderFactory.createXMLReader();
+        xmlReader.setContentHandler(templatesHandler);
+        InputSource inputSource = new InputSource(getXsltSource());
+        xmlReader.parse(inputSource);
+
+        // Create transformer handler
+        final TransformerHandler handler = 
transformerFactory.newTransformerHandler(templatesHandler.getTemplates());
+
+        return handler;
+    }
+
+    private Map<String, Object> getLogicSheetParameters() {
+        if (this.parameters == null) {
+            return null;
+        }
+
+        Map<String, Object> result = new HashMap<String, Object>();
+
+        for (Entry<String, Object> entry : this.parameters.entrySet()) {
+            String name = entry.getKey();
+
+            if (isValidXSLTParameterName(name)) {
+                result.put(name, entry.getValue());
+            }
+        }
+
+        return result;
+    }
+       
+    private InputStream getXsltSource() throws Exception {
+               // The source is a xml file
+               Resource xmlResource = 
this.request.getResourceResolver().resolve(srcAbsPath);
+               InputStream xmlSourceFile = 
xmlResource.adaptTo(InputStream.class);
+               if (xmlSourceFile != null) 
+                       return xmlSourceFile;
+               return null;
+                       
+       }
+    
+}

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/scripting/xproc/XProcScriptEngine.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/scripting/xproc/XProcScriptEngine.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/scripting/xproc/XProcScriptEngine.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/scripting/xproc/XProcScriptEngine.java
 Fri Feb 27 20:49:38 2009
@@ -27,7 +27,6 @@
 
 import org.apache.sling.api.scripting.SlingBindings;
 import org.apache.sling.api.scripting.SlingScriptHelper;
-import org.apache.sling.cocoon.generator.SlingGenerator;
 import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
 import org.apache.sling.xproc.XplBuilder;
 import org.apache.sling.xproc.api.Pipeline;
@@ -54,9 +53,8 @@
                try {
                        XplBuilder xplBuilder = new XplBuilder();
                        Pipeline xpl = (Pipeline) xplBuilder.build(reader);
-                       SlingGenerator generator = new SlingGenerator(helper);
-                       xpl.setGenerator(generator);
-                       xpl.execute(helper.getResponse().getOutputStream());
+                       xpl.getEnv().setSling(helper);
+                       xpl.eval();
                } catch (Throwable t) {
                        log.error("Failure running XProc script.", t);
             throw new ScriptException("Failure running XProc script "

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/XplBuilder.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/XplBuilder.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/XplBuilder.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/XplBuilder.java
 Fri Feb 27 20:49:38 2009
@@ -53,10 +53,6 @@
                return xplHandler.getRootStep();
        }
        
-       public void setSitemapNodeFactory(XplElementFactory xplElementFactory) {
-               this.xplElementFactory = new XplElementFactoryImpl();
-       }
-       
        protected XplElement createXplElement(String localName, Map<String, 
String> parameters) {
         return XplBuilder.this.xplElementFactory.createXplElement(new 
QName(XplConstants.NS_XPROC, localName), parameters);
     }

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/CompoundStep.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/CompoundStep.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/CompoundStep.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/CompoundStep.java
 Fri Feb 27 20:49:38 2009
@@ -18,6 +18,12 @@
  */
 package org.apache.sling.xproc.api;
 
+import java.util.Vector;
+
 public interface CompoundStep extends Step {
 
+       Vector<Step> getSubpipeline();
+
+       void setSubpipeline(Vector<Step> subpipeline);
+       
 }

Added: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Environment.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Environment.java?rev=748691&view=auto
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Environment.java
 (added)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Environment.java
 Fri Feb 27 20:49:38 2009
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sling.xproc.api;
+
+import org.apache.cocoon.pipeline.Pipeline;
+import org.apache.sling.api.scripting.SlingScriptHelper;
+
+public interface Environment {
+       
+       SlingScriptHelper getSling();
+       
+       void setSling(SlingScriptHelper sling);
+       
+       Pipeline getCcPipeline();
+       
+       void setCcPipeline(Pipeline ccPipeline);
+       
+}

Added: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/MultiContainerStep.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/MultiContainerStep.java?rev=748691&view=auto
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/MultiContainerStep.java
 (added)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/MultiContainerStep.java
 Fri Feb 27 20:49:38 2009
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sling.xproc.api;
+
+public interface MultiContainerStep extends Step {
+
+}

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Pipeline.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Pipeline.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Pipeline.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Pipeline.java
 Fri Feb 27 20:49:38 2009
@@ -18,14 +18,7 @@
  */
 package org.apache.sling.xproc.api;
 
-import java.io.OutputStream;
-
-import org.apache.cocoon.pipeline.component.sax.AbstractGenerator;
-
 public interface Pipeline extends CompoundStep {
-       
-       void execute(OutputStream outputStream) throws Exception;
-       
-       void setGenerator(AbstractGenerator generator);
+
        
 }

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Step.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Step.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Step.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/Step.java
 Fri Feb 27 20:49:38 2009
@@ -20,4 +20,13 @@
 
 public interface Step extends XplElement {
        
+       void eval();
+       
+       Step getContainer();
+
+       void setContainer(Step container);
+       
+       Environment getEnv();
+
+       void setEnv(Environment env);
 }

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElement.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElement.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElement.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/api/XplElement.java
 Fri Feb 27 20:49:38 2009
@@ -33,6 +33,4 @@
        
        void addChild(XplElement child);
        
-       void invoke(Invocation invocation) throws Exception;
-       
 }

Added: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractCompoundStepImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractCompoundStepImpl.java?rev=748691&view=auto
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractCompoundStepImpl.java
 (added)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractCompoundStepImpl.java
 Fri Feb 27 20:49:38 2009
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sling.xproc.impl;
+
+import java.util.Vector;
+
+import org.apache.sling.xproc.api.CompoundStep;
+import org.apache.sling.xproc.api.Step;
+import org.apache.sling.xproc.api.XplElement;
+
+public abstract class AbstractCompoundStepImpl extends AbstractStepImpl 
implements CompoundStep {
+
+       private Vector<Step> subpipeline = new Vector<Step>();
+       
+       @Override
+       public void eval() {
+               for (Step step : subpipeline) {
+                       step.eval();
+               }
+       }
+       
+       @Override
+       public void addChild(XplElement child) {
+               super.addChild(child);
+               if (child instanceof Step) {
+                       Step stepChild = (Step) child;
+                       stepChild.setEnv(this.getEnv());
+                       subpipeline.add(stepChild);
+               }
+       }
+       
+       public Vector<Step> getSubpipeline() {
+               return subpipeline;
+       }
+
+       public void setSubpipeline(Vector<Step> subpipeline) {
+               this.subpipeline = subpipeline;
+       }
+       
+}

Added: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractStepImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractStepImpl.java?rev=748691&view=auto
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractStepImpl.java
 (added)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractStepImpl.java
 Fri Feb 27 20:49:38 2009
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sling.xproc.impl;
+
+import org.apache.sling.xproc.api.Environment;
+import org.apache.sling.xproc.api.Step;
+
+public abstract class AbstractStepImpl extends AbstractXplElementImpl 
implements Step {
+       
+       private Step container;
+       private Environment env;
+       
+       public abstract void eval();
+       
+       public AbstractStepImpl() {
+               this.env = new EnvironmentImpl();
+       }
+       
+       public AbstractStepImpl(Environment env) {
+               this.env = env;
+       }
+       
+       public Step getContainer() {
+               return container;
+       }
+
+       public void setContainer(Step container) {
+               this.container = container;
+       }
+       
+       public Environment getEnv() {
+               return env;
+       }
+
+       public void setEnv(Environment env) {
+               this.env = env;
+       }
+       
+}

Copied: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElementImpl.java
 (from r746951, 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElement.java)
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElementImpl.java?p2=incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElementImpl.java&p1=incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElement.java&r1=746951&r2=748691&rev=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElement.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/AbstractXplElementImpl.java
 Fri Feb 27 20:49:38 2009
@@ -26,19 +26,19 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.sling.xproc.api.Invocation;
+import org.apache.sling.api.scripting.SlingScriptHelper;
 import org.apache.sling.xproc.api.XplElement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class AbstractXplElement implements XplElement {
+public abstract class AbstractXplElementImpl implements XplElement {
        
        protected final Logger log = LoggerFactory.getLogger(this.getClass());
        
-       private final Map<String, String> parameters = new HashMap<String, 
String>();
-       
+       private SlingScriptHelper sling;
+
+       private final Map<String, String> parameters = new HashMap<String, 
String>();   
        private XplElement parent; 
-       
        private final LinkedList<XplElement> children = new 
LinkedList<XplElement>();
        
        public LinkedList<XplElement> getChildren() {
@@ -71,12 +71,6 @@
                
        }
        
-       public void invoke(Invocation invocation) throws Exception {
-               for (XplElement child : children) {
-                       child.invoke(invocation);
-               }
-       }
-       
        public void setParameters(Map<String, String> parameters) {
                if (parameters == null || parameters.isEmpty()) {
             // nothing to do
@@ -111,6 +105,10 @@
         }
        }
        
+       public SlingScriptHelper getSling() {
+               return sling;
+       }
+       
        public XplElement getParent() {
                return parent;
        }

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/DocumentImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/DocumentImpl.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/DocumentImpl.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/DocumentImpl.java
 Fri Feb 27 20:49:38 2009
@@ -20,7 +20,7 @@
 
 import org.apache.sling.xproc.api.Document;
 
-public class DocumentImpl extends AbstractXplElement implements Document {
+public class DocumentImpl extends AbstractXplElementImpl implements Document {
 
        private String href;
        

Added: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/EnvironmentImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/EnvironmentImpl.java?rev=748691&view=auto
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/EnvironmentImpl.java
 (added)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/EnvironmentImpl.java
 Fri Feb 27 20:49:38 2009
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sling.xproc.impl;
+
+import org.apache.cocoon.pipeline.Pipeline;
+import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.apache.sling.xproc.api.Environment;
+
+public class EnvironmentImpl implements Environment {
+       
+       private SlingScriptHelper sling;
+       private Pipeline ccPipeline;
+       
+       public SlingScriptHelper getSling() {
+               return sling;
+       }
+       public void setSling(SlingScriptHelper sling) {
+               this.sling = sling;
+       }
+       
+       public Pipeline getCcPipeline() {
+               return ccPipeline;
+       }
+       public void setCcPipeline(Pipeline ccPipeline) {
+               this.ccPipeline = ccPipeline;
+       }
+       
+}

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/InputImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/InputImpl.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/InputImpl.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/InputImpl.java
 Fri Feb 27 20:49:38 2009
@@ -21,11 +21,11 @@
 import org.apache.sling.xproc.api.Document;
 import org.apache.sling.xproc.api.Input;
 
-public class InputImpl extends AbstractXplElement implements Input {
+public class InputImpl extends AbstractXplElementImpl implements Input {
 
        private String port;
        private Document document;
-
+       
        public String getPort() {
                return port;
        }

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/PipelineImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/PipelineImpl.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/PipelineImpl.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/PipelineImpl.java
 Fri Feb 27 20:49:38 2009
@@ -23,32 +23,34 @@
 import org.apache.cocoon.pipeline.NonCachingPipeline;
 import org.apache.cocoon.pipeline.component.sax.AbstractGenerator;
 import org.apache.cocoon.pipeline.component.sax.XMLSerializer;
-import org.apache.sling.xproc.api.Invocation;
+import org.apache.sling.cocoon.generator.SlingGenerator;
 import org.apache.sling.xproc.api.Pipeline;
+import org.apache.sling.xproc.api.Step;
 
-public class PipelineImpl extends AbstractXplElement implements Pipeline {
-       
-       private AbstractGenerator generator;
+public class PipelineImpl extends AbstractCompoundStepImpl implements Pipeline 
{
 
-       public void execute(OutputStream outputStream) throws Exception {
-               
-               if (generator == null)
-                       throw new IllegalStateException("xml generator is 
missing.");
-               
-               org.apache.cocoon.pipeline.Pipeline cocoonPipeline = new 
NonCachingPipeline();
+       @Override
+       public void eval() {            
+               try {
+                       this.getEnv().setCcPipeline(new NonCachingPipeline());
+                       
+                       // generator
+                       AbstractGenerator generator = new 
SlingGenerator(this.getEnv().getSling());
+                       this.getEnv().getCcPipeline().addComponent(generator);
+                       
+                       // subpipeline evaluated
+                       for (Step step : this.getSubpipeline()) {
+                               step.eval();
+                       }
+                       
+                       this.getEnv().getCcPipeline().addComponent(new 
XMLSerializer());
+                       OutputStream out = 
this.getEnv().getSling().getResponse().getOutputStream();
+                       this.getEnv().getCcPipeline().setup(out);
+                       this.getEnv().getCcPipeline().execute();
+               } catch(Exception e) {
+                       e.printStackTrace();
+               }
                
-               cocoonPipeline.addComponent(generator);
-               Invocation invocation = new InvocationImpl();
-               invocation.setCocoonPipeline(cocoonPipeline);
-               this.invoke(invocation);
-               
-               cocoonPipeline.addComponent(new XMLSerializer());
-               cocoonPipeline.setup(outputStream);
-               cocoonPipeline.execute();
        }
        
-       public void setGenerator(AbstractGenerator generator) {
-               this.generator = generator;
-       }
-
-}
+}
\ No newline at end of file

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XplElementFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XplElementFactoryImpl.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XplElementFactoryImpl.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XplElementFactoryImpl.java
 Fri Feb 27 20:49:38 2009
@@ -27,7 +27,7 @@
 import org.apache.sling.xproc.api.XplElementFactory;
 
 public class XplElementFactoryImpl implements XplElementFactory {
-
+       
        public XplElement createXplElement(QName type, Map<String, String> 
parameters) {
                
                XplElement xplElement;

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XsltImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XsltImpl.java?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XsltImpl.java
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/java/org/apache/sling/xproc/impl/XsltImpl.java
 Fri Feb 27 20:49:38 2009
@@ -18,22 +18,18 @@
  */
 package org.apache.sling.xproc.impl;
 
-import java.net.URL;
-
-import org.apache.cocoon.pipeline.component.sax.XSLTTransformer;
+import org.apache.sling.cocoon.transform.SlingTransformer;
 import org.apache.sling.xproc.api.Input;
-import org.apache.sling.xproc.api.Invocation;
 import org.apache.sling.xproc.api.Xslt;
 
-public class XsltImpl extends AbstractXplElement implements Xslt {
-       
-       private Input stylesheet;
+public class XsltImpl extends AbstractStepImpl implements Xslt {
 
+       private Input stylesheet;
+       
        @Override
-       public void invoke(Invocation invocation) throws Exception {
-               super.invoke(invocation);
+       public void eval() {            
                String href = this.getStylesheet().getDocument().getHref();
-               invocation.getCocoonPipeline().addComponent(new 
XSLTTransformer(new URL(href)));
+               this.getEnv().getCcPipeline().addComponent(new 
SlingTransformer(this.getEnv().getSling(), href));
        }
        
        public Input getStylesheet() {

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/apps/sling/xpl/html.xpl
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/apps/sling/xpl/html.xpl?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/apps/sling/xpl/html.xpl
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/apps/sling/xpl/html.xpl
 Fri Feb 27 20:49:38 2009
@@ -19,7 +19,7 @@
 
   <p:xslt>
     <p:input port="stylesheet">
-      <p:document 
href="http://localhost:8888/xpl-sample/xsl/test-content.xslt"/>
+      <p:document href="/xpl-sample/xsl/test-content.xslt"/>
     </p:input>
   </p:xslt>
   

Modified: 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/xpl-sample/pipelines.json
URL: 
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/xpl-sample/pipelines.json?rev=748691&r1=748690&r2=748691&view=diff
==============================================================================
--- 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/xpl-sample/pipelines.json
 (original)
+++ 
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/xpl-sample/pipelines.json
 Fri Feb 27 20:49:38 2009
@@ -2,7 +2,7 @@
        "title": "pipelines",
        "jcr:primaryType":"nt:unstructured",
        "dynamic_xml": {
-               "title": "test_pipeline",
+               "title": "dynamic_xml",
                "sling:resourceType": "sling/xpl/sample",
                "sling:resourceSuperType": "sling/xpl"
        },
@@ -10,7 +10,7 @@
                "sling:resourceType": "sling/xpl"
        },
        "no_xml": {
-               "title": "test_pipeline",
+               "title": "no_xml",
                "sling:resourceType": "sling/xpl"
        }
        


Reply via email to