Author: jvazquez
Date: Mon Feb 23 19:28:03 2009
New Revision: 747108
URL: http://svn.apache.org/viewvc?rev=747108&view=rev
Log:
Implemented three kind of xml generation: dynamic generation based on a script,
static with adaptTo(InputStream) and fallback to export document view
Added:
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/apps/sling/xpl/sample/sample.xml.esp
- copied unchanged from r746951,
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/apps/sling/xpl/sample/sample.esp
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/xpl-sample/pipelines/
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/xpl-sample/pipelines/static_xml.xml
Removed:
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/apps/sling/xpl/sample/sample.esp
Modified:
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/pom.xml
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/resources/SLING-INF/content/xpl-sample/pipelines.json
Modified:
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/pom.xml?rev=747108&r1=747107&r2=747108&view=diff
==============================================================================
---
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/pom.xml
(original)
+++
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/pom.xml
Mon Feb 23 19:28:03 2009
@@ -81,6 +81,11 @@
<artifactId>org.apache.sling.scripting.api</artifactId>
<version>2.0.2-incubator</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.mime</artifactId>
+ <version>2.0.2-incubator</version>
+ </dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.jcr.resource</artifactId>
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=747108&r1=747107&r2=747108&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
Mon Feb 23 19:28:03 2009
@@ -19,8 +19,10 @@
package org.apache.sling.cocoon.generator;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.InputStream;
+import javax.jcr.Session;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletResponse;
@@ -28,38 +30,66 @@
import org.apache.cocoon.pipeline.util.XMLUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
-import org.apache.sling.api.request.RequestDispatcherOptions;
import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.apache.sling.commons.mime.MimeTypeService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class SlingGenerator extends AbstractGenerator {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ private static final String XML_MIME_TYPE = "text/xml";
+
private SlingHttpServletRequest request;
private SlingHttpServletResponse response;
+ private MimeTypeService mimeTypeService;
- public SlingGenerator(SlingHttpServletRequest request,
SlingHttpServletResponse response) {
- this.request = request;
- this.response = response;
+ public SlingGenerator(SlingScriptHelper sling) {
+ this.request = sling.getRequest();
+ this.response = sling.getResponse();
+ this.mimeTypeService = sling.getService(MimeTypeService.class);
}
public void execute() {
try {
- XMLUtils.toSax(genXmlSource(), this.getXMLConsumer());
- } catch (Exception e) {
- e.printStackTrace();
+ Session session;
+ InputStream srcIs = genXmlSource();
+ if (srcIs != null)
+ XMLUtils.toSax(srcIs, this.getXMLConsumer());
+ else if ((session =
request.getResource().adaptTo(Session.class)) != null) {
+
session.exportDocumentView(request.getResource().getPath(),
this.getXMLConsumer(), true, true);
+ } else
+ throw new IllegalArgumentException("cannot
generate xml source for " + request.getResource().getPath());
+
+ } catch (Throwable t) {
+ log.error("SlingGenerator: cannot generate xml source
for "
+ + request.getResource().getPath(), t);
}
}
private InputStream genXmlSource() throws Exception {
- System.out.println("pasa por gen xml source");
- Resource resource = request.getResource();
- RequestDispatcherOptions options = new
RequestDispatcherOptions();
- options.setForceResourceType(resource.getResourceType());
- RequestDispatcher dispatcher =
request.getRequestDispatcher(request.getResource(), options);
+
+ String xmlPath = request.getResource().getPath() + "." +
mimeTypeService.getExtension(XML_MIME_TYPE);
+
+ // The source is a xml file
+ Resource xmlResource =
this.request.getResourceResolver().resolve(xmlPath);
+ InputStream xmlSourceFile =
xmlResource.adaptTo(InputStream.class);
+ if (xmlSourceFile != null)
+ return xmlSourceFile;
+
+ // The source is dynamically generated
+ RequestDispatcher dispatcher =
request.getRequestDispatcher(xmlPath);
SlingGeneratorServletOutputStream output = new
SlingGeneratorServletOutputStream();
ServletResponse newResponse = new
SlingGeneratorServletResponse(response, output);
dispatcher.include(request, newResponse);
byte[] bytes = output.toByteArray();
- return new ByteArrayInputStream(bytes);
+ if (bytes.length > 0)
+ return new ByteArrayInputStream(bytes);
+
+ 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=747108&r1=747107&r2=747108&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
Mon Feb 23 19:28:03 2009
@@ -54,7 +54,7 @@
try {
XplBuilder xplBuilder = new XplBuilder();
Pipeline xpl = (Pipeline) xplBuilder.build(reader);
- SlingGenerator generator = new
SlingGenerator(helper.getRequest(), helper.getResponse());
+ SlingGenerator generator = new SlingGenerator(helper);
xpl.setGenerator(generator);
xpl.execute(helper.getResponse().getOutputStream());
} catch (Throwable t) {
@@ -66,4 +66,4 @@
return null;
}
-}
+}
\ No newline at end of file
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=747108&r1=747107&r2=747108&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
Mon Feb 23 19:28:03 2009
@@ -1,9 +1,17 @@
{
"title": "pipelines",
"jcr:primaryType":"nt:unstructured",
- "test_pipeline": {
+ "dynamic_xml": {
"title": "test_pipeline",
"sling:resourceType": "sling/xpl/sample",
"sling:resourceSuperType": "sling/xpl"
+ },
+ "static_xml": {
+ "sling:resourceType": "sling/xpl"
+ },
+ "no_xml": {
+ "title": "test_pipeline",
+ "sling:resourceType": "sling/xpl"
}
+
}
\ No newline at end of file
Added:
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/xpl-sample/pipelines/static_xml.xml
URL:
http://svn.apache.org/viewvc/incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/xpl-sample/pipelines/static_xml.xml?rev=747108&view=auto
==============================================================================
---
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/xpl-sample/pipelines/static_xml.xml
(added)
+++
incubator/sling/whiteboard/jvazquez/org.apache.sling.scripting.xproc/src/main/resources/SLING-INF/content/xpl-sample/pipelines/static_xml.xml
Mon Feb 23 19:28:03 2009
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<test>
+ <content>
+ xpl-sample: static content
+ </content>
+</test>
\ No newline at end of file