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


Reply via email to