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