You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2010/01/14 01:53:13 UTC
svn commit: r899011 - in /labs/magma/trunk/website-velocity/src:
main/java/org/apache/magma/website/velocity/
test/java/org/apache/magma/website/velocity/
test/resources/org/apache/magma/website/velocity/
Author: simoneg
Date: Thu Jan 14 00:53:12 2010
New Revision: 899011
URL: http://svn.apache.org/viewvc?rev=899011&view=rev
Log:
Velocity based producer for creating raw data (like XML or json) instead of HTML.
Added:
labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/RawVelocityProducer.java
labs/magma/trunk/website-velocity/src/test/java/org/apache/magma/website/velocity/TestRawVelocity.java
labs/magma/trunk/website-velocity/src/test/resources/org/apache/magma/website/velocity/testRaw.vm
Added: labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/RawVelocityProducer.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/RawVelocityProducer.java?rev=899011&view=auto
==============================================================================
--- labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/RawVelocityProducer.java (added)
+++ labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/RawVelocityProducer.java Thu Jan 14 00:53:12 2010
@@ -0,0 +1,118 @@
+package org.apache.magma.website.velocity;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+import java.nio.charset.Charset;
+import java.util.Map;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.basics.context.RunningContext;
+import org.apache.magma.website.context.WebMethodContextElement;
+import org.apache.magma.website.producers.ParametrizableProducerBase;
+import org.apache.magma.website.utils.LinkHelper;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+
+public class RawVelocityProducer extends ParametrizableProducerBase {
+
+ public RawVelocityProducer(String path, String mimeType) {
+ this.mimeType = mimeType;
+ if (path != null && path.length() == 0) path = null;
+ WebMethodContextElement ele = RunningContext.get().getLast(WebMethodContextElement.class);
+ if (ele == null) return;
+
+ if (path == null) {
+ path = LinkHelper.linkNameFromMethodName(ele.getMethod().getName());
+ }
+
+ String complete = null;
+ if (!path.startsWith("/")) {
+ complete = ele.getHandlerInstance().getClass().getName();
+ complete = complete.substring(0, complete.lastIndexOf('.'));
+ complete = complete.replace('.','/');
+ complete = '/' + complete;
+ complete += '/';
+ complete += path;
+ } else {
+ complete = path;
+ }
+
+ this.template = complete;
+ }
+
+ private String template;
+ private String mimeType;
+
+ private void sendTemplate(OutputStream stream, String tplname, Map<String, Object> additional) {
+ OutputStreamWriter ow;
+ try {
+ ow = new OutputStreamWriter(stream, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ throw new MagmaException(e, "Something is very wrong if we cannot find UTF-8");
+ }
+ try {
+ sendTemplate(ow, tplname, additional);
+ ow.flush();
+ } catch (IOException e) {
+ throw new MagmaException(e, "Error sending velocity template");
+ }
+ }
+
+
+ private void sendTemplate(Writer writer, String tplname, Map<String, Object> additional) {
+ VelocityContext ctx = new VelocityContext();
+ if (parameters != null) {
+ Map<String, Object> map = parameters.getParameters();
+ for (Map.Entry<String, Object> entry : map.entrySet()) {
+ ctx.put(entry.getKey(), entry.getValue());
+ }
+ }
+ if (additional != null) {
+ for (Map.Entry<String, Object> entry : additional.entrySet()) {
+ ctx.put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ if (parameters != null && getCreatingHandler() != null) {
+ InputStream inputStream = getCreatingHandler().getClass().getResourceAsStream(tplname);
+ if (inputStream != null) {
+ InputStreamReader inreader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));
+ try {
+ Velocity.evaluate(ctx, writer, tplname, inreader);
+ return;
+ } catch (Throwable e) {
+ throw new MagmaException(e, "Error executing template {0} loaded from resource {1}", tplname, getCreatingHandler().getClass().getResource(tplname));
+ }
+ }
+ }
+
+ try {
+ Velocity.mergeTemplate(tplname, "UTF-8", ctx, writer);
+ } catch (Exception e) {
+ throw new MagmaException(e, "Error executing velocity template {0} loaded by default velocity loader", tplname);
+ }
+ }
+
+ @Override
+ public void produce(OutputStream stream) {
+ String tplname = this.template;
+ if (tplname == null && this.parameters != null) {
+ tplname = parameters.getTemplateName();
+ }
+ if (!tplname.endsWith(".vm")) tplname += ".vm";
+
+ sendTemplate(stream, tplname, null);
+ }
+
+ @Override
+ public String getMimeType() {
+ return mimeType;
+ }
+
+
+}
Added: labs/magma/trunk/website-velocity/src/test/java/org/apache/magma/website/velocity/TestRawVelocity.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-velocity/src/test/java/org/apache/magma/website/velocity/TestRawVelocity.java?rev=899011&view=auto
==============================================================================
--- labs/magma/trunk/website-velocity/src/test/java/org/apache/magma/website/velocity/TestRawVelocity.java (added)
+++ labs/magma/trunk/website-velocity/src/test/java/org/apache/magma/website/velocity/TestRawVelocity.java Thu Jan 14 00:53:12 2010
@@ -0,0 +1,58 @@
+package org.apache.magma.website.velocity;
+
+import static junit.framework.Assert.assertEquals;
+
+import java.io.ByteArrayOutputStream;
+import java.lang.reflect.Method;
+import java.text.SimpleDateFormat;
+
+import org.apache.magma.basics.context.RunningContext;
+import org.apache.magma.website.Head;
+import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.WebHandler;
+import org.apache.magma.website.context.WebMethodContextElement;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Test;
+
+
+public class TestRawVelocity extends WebHandler {
+
+ @AfterClass
+ public static void cleanAll() {
+ RunningContext.cleanup();
+ }
+
+ @Before
+ public void setupContext() throws Exception {
+ Method m = this.getClass().getMethod("doFake");
+ WebMethodContextElement wce = new WebMethodContextElement(m, new Object[0], this);
+ RunningContext.get().push(wce);
+ }
+
+ @After
+ public void cleanContext() {
+ RunningContext.get().pop(WebMethodContextElement.class);
+ }
+
+ public HtmlProducer doFake() {
+ return null;
+ }
+
+ @Test
+ public void formattedDate() throws Exception {
+ FakeBean fb = new FakeBean();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ fb.setDate(sdf.parse("1979-03-05"));
+ fb.setString("String < with strà ngè chars");
+ RawVelocityProducer prod = new RawVelocityProducer("testRaw.vm", "text/plain");
+ prod.addParameter("bean", fb);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ prod.produce(baos);
+ String str = new String(baos.toByteArray(), "UTF-8");
+ assertEquals("date:" + fb.getDate().toString() +"\nstr:" + fb.getString(), str.trim());
+ }
+
+
+}
Added: labs/magma/trunk/website-velocity/src/test/resources/org/apache/magma/website/velocity/testRaw.vm
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-velocity/src/test/resources/org/apache/magma/website/velocity/testRaw.vm?rev=899011&view=auto
==============================================================================
--- labs/magma/trunk/website-velocity/src/test/resources/org/apache/magma/website/velocity/testRaw.vm (added)
+++ labs/magma/trunk/website-velocity/src/test/resources/org/apache/magma/website/velocity/testRaw.vm Thu Jan 14 00:53:12 2010
@@ -0,0 +1,2 @@
+date:$bean.date
+str:$bean.string
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org