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>