You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by il...@apache.org on 2011/08/03 18:30:35 UTC

svn commit: r1153567 - in /cocoon/cocoon3/trunk: cocoon-docs/src/changes/ cocoon-sample/src/main/resources/COB-INF/ cocoon-stringtemplate/ cocoon-stringtemplate/src/main/java/org/apache/cocoon/stringtemplate/ cocoon-stringtemplate/src/main/resources/ME...

Author: ilgrosso
Date: Wed Aug  3 16:30:32 2011
New Revision: 1153567

URL: http://svn.apache.org/viewvc?rev=1153567&view=rev
Log:
Adding StringTemplateTransformer

Added:
    cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/java/org/apache/cocoon/stringtemplate/StringTemplateTransformer.java
    cocoon/cocoon3/trunk/cocoon-stringtemplate/src/test/java/org/apache/cocoon/stringtemplate/StringTemplateTransformerTest.java
      - copied, changed from r1153516, cocoon/cocoon3/trunk/cocoon-stringtemplate/src/test/java/org/apache/cocoon/stringtemplate/StringTemplateGeneratorTest.java
Modified:
    cocoon/cocoon3/trunk/cocoon-docs/src/changes/changes.xml
    cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/overview.html
    cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap
    cocoon/cocoon3/trunk/cocoon-stringtemplate/pom.xml
    cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/resources/META-INF/cocoon/spring/cocoon-stringtemplate-sitemap-components.xml
    cocoon/cocoon3/trunk/parent/pom.xml

Modified: cocoon/cocoon3/trunk/cocoon-docs/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-docs/src/changes/changes.xml?rev=1153567&r1=1153566&r2=1153567&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-docs/src/changes/changes.xml (original)
+++ cocoon/cocoon3/trunk/cocoon-docs/src/changes/changes.xml Wed Aug  3 16:30:32 2011
@@ -27,6 +27,10 @@
 
   <body>
     <release version="3.0.0-beta-1" date="2011-00-00" description="unreleased">
+      <action dev="ilgrosso" type="add">
+        [cocoon-stringtemplate] A StringTemplateTransformer has been added.
+      </action>
+
       <action dev="ilgrosso" type="update">
         [cocoon-stringtemplate] The StringTemplate has beed upgraded to latest v4, with some modifications in the source
         code of related components. The org.apache.cocoon.stringtemplate.ControllerContextAwareStringTemplateGenerator is now

Modified: cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/overview.html
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/overview.html?rev=1153567&r1=1153566&r2=1153567&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/overview.html (original)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/overview.html Wed Aug  3 16:30:32 2011
@@ -130,6 +130,7 @@
   <h2>StringTemplate</h2>
   <ul>
   	<li><a href="string-template/generator">StringTemplateGenerator</a>: A generator using <a href="http://www.stringtemplate.org/">StringTemplate</a> template engine.</li>
+  	<li><a href="string-template/transformer">StringTemplateTransformer</a>: A transformer using <a href="http://www.stringtemplate.org/">StringTemplate</a> template engine.</li>
   </ul>
   </body>
 </html>

Modified: cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap?rev=1153567&r1=1153566&r2=1153567&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap (original)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap Wed Aug  3 16:30:32 2011
@@ -527,6 +527,13 @@
         </map:generate>
         <map:serialize/>
       </map:match>
+      <map:match wildcard="string-template/transformer">
+        <map:generate src="string-template/template.xml"/>
+        <map:transform type="string-template">
+	  <map:parameter name="parameter" value="Another value"/>
+        </map:transform>
+        <map:serialize/>
+      </map:match>
     </map:pipeline>
 
     <!-- Global error handling -->

Modified: cocoon/cocoon3/trunk/cocoon-stringtemplate/pom.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-stringtemplate/pom.xml?rev=1153567&r1=1153566&r2=1153567&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-stringtemplate/pom.xml (original)
+++ cocoon/cocoon3/trunk/cocoon-stringtemplate/pom.xml Wed Aug  3 16:30:32 2011
@@ -56,7 +56,7 @@
         <!-- Other dependencies -->    
         <dependency>
             <groupId>org.antlr</groupId>
-            <artifactId>stringtemplate</artifactId>
+            <artifactId>ST4</artifactId>
         </dependency>
         <dependency>
             <groupId>commons-io</groupId>

Added: cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/java/org/apache/cocoon/stringtemplate/StringTemplateTransformer.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/java/org/apache/cocoon/stringtemplate/StringTemplateTransformer.java?rev=1153567&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/java/org/apache/cocoon/stringtemplate/StringTemplateTransformer.java (added)
+++ cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/java/org/apache/cocoon/stringtemplate/StringTemplateTransformer.java Wed Aug  3 16:30:32 2011
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2011 The Apache Software Foundation.
+ *
+ * Licensed 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.cocoon.stringtemplate;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import org.apache.cocoon.sax.AbstractSAXTransformer;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.stringtemplate.v4.ST;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
+
+public class StringTemplateTransformer extends AbstractSAXTransformer {
+
+    private static final Log LOG =
+            LogFactory.getLog(StringTemplateTransformer.class);
+
+    private transient final Map<String, Object> parameters;
+
+    private transient final StringBuilder accumulator;
+
+    public StringTemplateTransformer() {
+        super();
+
+        parameters = new HashMap<String, Object>();
+        accumulator = new StringBuilder();
+    }
+
+    @Override
+    public void setup(final Map<String, Object> parameters) {
+        if (parameters != null && !parameters.isEmpty()) {
+            this.parameters.putAll(parameters);
+        }
+    }
+
+    @Override
+    public void setConfiguration(
+            final Map<String, ? extends Object> configuration) {
+
+        this.setup((Map<String, Object>) configuration);
+    }
+
+    private String renderTemplate(final String template) {
+        if (this.parameters == null) {
+            LOG.warn("There are not any parameters passed to the template.");
+            return template;
+        }
+
+        final ST stringTemplate = new ST(template, '$', '$');
+
+        for (Entry<String, Object> eachEntry : this.parameters.entrySet()) {
+            stringTemplate.add(eachEntry.getKey().replace(".", "_"),
+                    StringEscapeUtils.escapeXml(eachEntry.getValue().toString()));
+
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Passing pipeline parameter as attribute: key="
+                        + eachEntry.getKey() + ", value="
+                        + eachEntry.getValue());
+            }
+        }
+
+        return stringTemplate.render();
+    }
+
+    private void flushAccumulator()
+            throws SAXException {
+        if (accumulator.length() > 0) {
+            final String rendered = renderTemplate(accumulator.toString());
+            accumulator.setLength(0);
+
+            super.characters(rendered.toCharArray(), 0, rendered.length());
+        }
+    }
+
+    @Override
+    public void startElement(final String uri, final String localName,
+            final String name, final Attributes atts)
+            throws SAXException {
+
+        final AttributesImpl newAtts = new AttributesImpl();
+        for (int i = 0; i < atts.getLength(); i++) {
+            newAtts.addAttribute(atts.getURI(i),
+                    atts.getLocalName(i), atts.getQName(i), atts.getType(i),
+                    renderTemplate(atts.getValue(i)));
+        }
+
+        flushAccumulator();
+        super.startElement(uri, localName, name, newAtts);
+    }
+
+    @Override
+    public void characters(final char[] ch, final int start, final int length)
+            throws SAXException {
+
+        accumulator.append(Arrays.copyOfRange(ch, start, start + length));
+    }
+
+    @Override
+    public void endElement(final String uri, final String localName,
+            final String name)
+            throws SAXException {
+
+        flushAccumulator();
+        super.endElement(uri, localName, name);
+    }
+}

Modified: cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/resources/META-INF/cocoon/spring/cocoon-stringtemplate-sitemap-components.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/resources/META-INF/cocoon/spring/cocoon-stringtemplate-sitemap-components.xml?rev=1153567&r1=1153566&r2=1153567&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/resources/META-INF/cocoon/spring/cocoon-stringtemplate-sitemap-components.xml (original)
+++ cocoon/cocoon3/trunk/cocoon-stringtemplate/src/main/resources/META-INF/cocoon/spring/cocoon-stringtemplate-sitemap-components.xml Wed Aug  3 16:30:32 2011
@@ -27,4 +27,6 @@
 
     <bean name="reader:string-template" class="org.apache.cocoon.stringtemplate.StringTemplateReader" scope="prototype" />
 
+    <bean name="transformer:string-template" class="org.apache.cocoon.stringtemplate.StringTemplateTransformer" scope="prototype" />
+
 </beans>

Copied: cocoon/cocoon3/trunk/cocoon-stringtemplate/src/test/java/org/apache/cocoon/stringtemplate/StringTemplateTransformerTest.java (from r1153516, cocoon/cocoon3/trunk/cocoon-stringtemplate/src/test/java/org/apache/cocoon/stringtemplate/StringTemplateGeneratorTest.java)
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-stringtemplate/src/test/java/org/apache/cocoon/stringtemplate/StringTemplateTransformerTest.java?p2=cocoon/cocoon3/trunk/cocoon-stringtemplate/src/test/java/org/apache/cocoon/stringtemplate/StringTemplateTransformerTest.java&p1=cocoon/cocoon3/trunk/cocoon-stringtemplate/src/test/java/org/apache/cocoon/stringtemplate/StringTemplateGeneratorTest.java&r1=1153516&r2=1153567&rev=1153567&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-stringtemplate/src/test/java/org/apache/cocoon/stringtemplate/StringTemplateGeneratorTest.java (original)
+++ cocoon/cocoon3/trunk/cocoon-stringtemplate/src/test/java/org/apache/cocoon/stringtemplate/StringTemplateTransformerTest.java Wed Aug  3 16:30:32 2011
@@ -18,27 +18,39 @@ package org.apache.cocoon.stringtemplate
 import static junit.framework.Assert.*;
 
 import java.io.ByteArrayOutputStream;
-import java.io.File;
 import java.util.Collections;
 import junit.framework.Assert;
 import org.apache.cocoon.pipeline.NonCachingPipeline;
 import org.apache.cocoon.pipeline.Pipeline;
 import org.apache.cocoon.sax.SAXPipelineComponent;
+import org.apache.cocoon.sax.component.XMLGenerator;
 import org.apache.cocoon.sax.component.XMLSerializer;
-import org.apache.commons.io.FileUtils;
 import org.custommonkey.xmlunit.Diff;
 import org.junit.Test;
 
-public class StringTemplateGeneratorTest {
+public class StringTemplateTransformerTest {
 
-    private boolean doTest(final StringTemplateGenerator generator)
+    private static final String INPUT =
+            "<test>"
+            + "<element param=\"$param$\">"
+            + "This text content also contains $param$"
+            + "</element>"
+            + "and also this contains $param$"
+            + "<element>while this does not</element>"
+            + "</test>";
+
+    @Test
+    public void test()
             throws Exception {
 
-        generator.setup(Collections.singletonMap("param", (Object) "value"));
+        final StringTemplateTransformer transformer =
+                new StringTemplateTransformer();
+        transformer.setup(Collections.singletonMap("param", (Object) "value"));
 
         final Pipeline<SAXPipelineComponent> pipeline =
                 new NonCachingPipeline<SAXPipelineComponent>();
-        pipeline.addComponent(generator);
+        pipeline.addComponent(new XMLGenerator(INPUT));
+        pipeline.addComponent(transformer);
         pipeline.addComponent(new XMLSerializer());
 
         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -48,46 +60,10 @@ public class StringTemplateGeneratorTest
         final String actualDocument = new String(baos.toByteArray(), "UTF-8");
         Assert.assertNotNull(actualDocument);
 
-        final String expectedDocument = FileUtils.readFileToString(
-                new File(getClass().getResource("/test.xml").toURI())).
-                replaceAll("\\$param\\$", "value");
+        final String expectedDocument = INPUT.replaceAll("\\$param\\$", "value");
 
         final Diff diff = new Diff(expectedDocument, actualDocument);
-        assertTrue("StringTemplate generation didn't work as expected " + diff,
+        assertTrue("StringTemplate transformer didn't work as expected " + diff,
                 diff.identical());
-
-        return true;
-    }
-
-    @Test
-    public final void testURL()
-            throws Exception {
-
-        assertTrue(doTest(new StringTemplateGenerator(
-                getClass().getResource("/test.xml"))));
-    }
-
-    @Test
-    public final void testFile()
-            throws Exception {
-
-        assertTrue(doTest(new StringTemplateGenerator(
-                new File(getClass().getResource("/test.xml").toURI()))));
-    }
-
-    @Test
-    public final void testStream()
-            throws Exception {
-
-        assertTrue(doTest(new StringTemplateGenerator(
-                getClass().getResourceAsStream("/test.xml"))));
-    }
-
-    @Test
-    public final void testString()
-            throws Exception {
-
-        assertTrue(doTest(new StringTemplateGenerator(FileUtils.readFileToString(
-                new File(getClass().getResource("/test.xml").toURI())))));
     }
 }

Modified: cocoon/cocoon3/trunk/parent/pom.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/parent/pom.xml?rev=1153567&r1=1153566&r2=1153567&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/parent/pom.xml (original)
+++ cocoon/cocoon3/trunk/parent/pom.xml Wed Aug  3 16:30:32 2011
@@ -363,8 +363,8 @@
       </dependency>
       <dependency>
         <groupId>org.antlr</groupId>
-        <artifactId>stringtemplate</artifactId>
-        <version>4.0.2</version>
+        <artifactId>ST4</artifactId>
+        <version>4.0.4</version>
       </dependency>
       <dependency>
         <groupId>org.apache.solr</groupId>