You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by jv...@apache.org on 2009/02/27 21:49:39 UTC

svn commit: r748691 - in /incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main: java/org/apache/sling/cocoon/generator/ java/org/apache/sling/cocoon/transform/ java/org/apache/sling/scripting/xproc/ java/org/apache/sling/xproc/...

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"
 	}