Author: simoneg
Date: Fri Apr 2 09:12:22 2010
New Revision: 930193
URL: http://svn.apache.org/viewvc?rev=930193&view=rev
Log:
Support velocity in raw template zones
Added:
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/VelocityTemplate.java
labs/magma/trunk/foundation-website/src/test/resources/org/apache/magma/website/teststuff/velocityTemplate.vm
Modified:
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/HandlerSetup.aj
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/TemplateData.java
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplateDataTest.java
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplatingTest.java
Modified:
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/HandlerSetup.aj
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/HandlerSetup.aj?rev=930193&r1=930192&r2=930193&view=diff
==============================================================================
---
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/HandlerSetup.aj
(original)
+++
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/HandlerSetup.aj
Fri Apr 2 09:12:22 2010
@@ -39,6 +39,8 @@ import org.aspectj.lang.reflect.FieldSig
import org.aspectj.lang.reflect.MethodSignature;
import org.apache.magma.website.context.Contextualizer;
+import org.apache.magma.website.templating.Template;
+
public aspect HandlerSetup percflow(inRequest()) {
@@ -101,6 +103,21 @@ public aspect HandlerSetup percflow(inRe
return ret;
}
+ pointcut fetchingTemplate(Template t) :
+ (get(private * Template+.*) || get(protected * Template+.*))
+ && target(t);
+
+ Object around(Template t) : fetchingTemplate(t) {
+ FieldSignature sign =
(FieldSignature)thisJoinPointStaticPart.getSignature();
+ String element = sign.getName();
+ Interaction inter = OnDemandBinder.interactsWith(element);
+ if (inter == null) return proceed(t);
+ Class type = sign.getFieldType();
+ String unique =
Integer.toString(t.getClass().getName().hashCode());
+ Object ret = binder.fetch(element, type, inter, unique);
+ return ret;
+ }
+
pointcut storing(WebHandler h, Object value) :
(set(private * WebHandler+.*) || set(protected *
WebHandler+.*))
&& target(h)
Modified:
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java?rev=930193&r1=930192&r2=930193&view=diff
==============================================================================
---
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java
(original)
+++
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java
Fri Apr 2 09:12:22 2010
@@ -233,7 +233,7 @@ public class Template {
public void parse() {
data = parseContent();
Method[] methods = getClass().getMethods();
- for (String acZone : data.zones) {
+ for (String acZone : data.getZoneNames()) {
currentZone = acZone;
if (currentZone.equals("__head_content")) continue;
if (currentZone.equals("Main")) continue;
@@ -255,7 +255,7 @@ public class Template {
layoutMain();
current.clearDone();
- for (String acZone : data.zones) {
+ for (String acZone : data.getZoneNames()) {
List<ZonePlaceholder> list = holders.get(acZone);
if (list == null) continue;
List<HtmlProducer> producers = new
ArrayList<HtmlProducer>();
@@ -271,11 +271,11 @@ public class Template {
// TODO use complete class name here, so that
TemplateResourceHandler can check it to provide security
rewrite.setTemplatePrefix("template/" +
getClass().getPackage().getName() + "/");
OutputStreamWriter osw = new
OutputStreamWriter(rewrite, Charset.forName("UTF-8"));
- for (int i = 0; i < data.zones.size(); i++) {
+ for (int i = 0; i < data.getZoneCount(); i++) {
rewrite.setBaseUrl(rewrite.getTemplatePrefix());
- osw.write(data.raws.get(i));
+ osw.write(data.getRaw(i));
osw.flush();
- String zone = data.zones.get(i);
+ String zone = data.getZoneName(i);
if (zone.equals("__head_content")) {
Head head = new Head(rewrite);
for (List<HtmlProducer> producers :
zones.values()) {
@@ -304,7 +304,7 @@ public class Template {
}
}
rewrite.setBaseUrl(rewrite.getTemplatePrefix());
- osw.write(data.raws.get(data.zones.size()));
+ osw.write(data.getRaw(data.getZoneCount()));
osw.flush();
rewrite.flush();
} catch (IOException e) {
@@ -329,7 +329,7 @@ public class Template {
InputStream inputStream =
getClass().getResourceAsStream(fileName);
try {
InputStreamReader reader = new
InputStreamReader(inputStream, Charset.forName("UTF-8"));
- return new TemplateData(reader);
+ return new TemplateData(reader, this);
} finally {
try {
inputStream.close();
Modified:
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/TemplateData.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/TemplateData.java?rev=930193&r1=930192&r2=930193&view=diff
==============================================================================
---
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/TemplateData.java
(original)
+++
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/TemplateData.java
Fri Apr 2 09:12:22 2010
@@ -17,10 +17,14 @@
package org.apache.magma.website.templating;
import org.apache.magma.basics.MagmaException;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.context.Context;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
+import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
@@ -33,10 +37,12 @@ import java.util.List;
*/
public class TemplateData {
- public List<String> zones = new ArrayList<String>();
- public List<String> raws = new ArrayList<String>();
+ private List<String> zones = new ArrayList<String>();
+ private List<String> raws = new ArrayList<String>();
+ private Template template = null;
- public TemplateData(Reader reader) {
+ public TemplateData(Reader reader, Template template) {
+ this.template = template;
init(reader);
}
@@ -127,4 +133,36 @@ public class TemplateData {
return lp + rp;
}
}
+
+ public String getZoneName(int i) {
+ return this.zones.get(i);
+ }
+
+ public String getRaw(int i) {
+ String ret = this.raws.get(i);
+ if (ret.indexOf('$') != -1) {
+ Context ctx = new VelocityContext();
+ ctx.put("template", template);
+ StringWriter sw = new StringWriter();
+ try {
+ Velocity.evaluate(ctx, sw, "template", ret);
+ } catch (Exception e) {
+ throw new MagmaException(e, "Error while
evaluating velocity in template");
+ }
+ sw.flush();
+ ret = sw.toString();
+ }
+ return ret;
+ }
+
+ public List<String> getZoneNames() {
+ return this.zones;
+ }
+
+ public int getZoneCount() {
+ return this.zones.size();
+ }
+ public int getRawsCount() {
+ return this.raws.size();
+ }
}
Modified:
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplateDataTest.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplateDataTest.java?rev=930193&r1=930192&r2=930193&view=diff
==============================================================================
---
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplateDataTest.java
(original)
+++
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplateDataTest.java
Fri Apr 2 09:12:22 2010
@@ -71,18 +71,18 @@ public class TemplateDataTest {
public void checkParsing(String[] set) {
String html = set[0];
StringReader sr = new StringReader(html);
- TemplateData td = new TemplateData(sr);
+ TemplateData td = new TemplateData(sr,null);
StringBuffer full = new StringBuffer();
- for (String string : td.raws) {
- full.append(string);
+ for (int i = 0; i < td.getRawsCount(); i++) {
+ full.append(td.getRaw(i));
}
assertEquals(html, full.toString());
int z = 0;
while (set.length < 1 + (z * 3)) {
- String bef = td.raws.get(z);
- String zone = td.zones.get(z);
- String aft = td.raws.get(z + 1);
+ String bef = td.getRaw(z);
+ String zone = td.getZoneName(z);
+ String aft = td.getZoneName(z + 1);
assertTrue(bef.endsWith(set[1 + (z * 3)]));
assertEquals(set[2 + (z * 3)], zone);
assertTrue(aft.startsWith(set[3 + (z * 3)]));
Modified:
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplatingTest.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplatingTest.java?rev=930193&r1=930192&r2=930193&view=diff
==============================================================================
---
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplatingTest.java
(original)
+++
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplatingTest.java
Fri Apr 2 09:12:22 2010
@@ -28,6 +28,7 @@ import org.apache.magma.website.UnitTest
import org.apache.magma.website.teststuff.Person;
import org.apache.magma.website.teststuff.SimpleSecondTemplate;
import org.apache.magma.website.teststuff.SimpleTemplate;
+import org.apache.magma.website.teststuff.VelocityTemplate;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
@@ -161,6 +162,19 @@ public class TemplatingTest {
assertStructure(def.out.toString(), "<div id=\"zoneMain",
"ConvertedSessionHandler.doCompound]", "<div id=\"zoneSide",
"AuxiliaryWebHandler.doAuxSearch]", "AuxiliaryWebHandler.doAuxPoll]",
".doCompound]", "comp-sidea");
}
+ @Test
+ public void velocityTemplate() throws Exception {
+ DefaultExpectations def = new DefaultExpectations() {{
+ one(session).setAttribute("user",
Person.class.getName() + ":Simone");
+ }};
+ UnitTestDispatch disp = new UnitTestDispatch();
+ disp.setTemplate(new VelocityTemplate());
+ def.disp = disp;
+ def.setupMinimal("/testSession/setUser");
+ def.start();
+
+ assertStructure(def.out.toString(), "<title>", "This title",
"Simone", "</title>");
+ }
}
Added:
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/VelocityTemplate.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/VelocityTemplate.java?rev=930193&view=auto
==============================================================================
---
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/VelocityTemplate.java
(added)
+++
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/VelocityTemplate.java
Fri Apr 2 09:12:22 2010
@@ -0,0 +1,24 @@
+package org.apache.magma.website.teststuff;
+
+import org.apache.magma.website.CompoundType;
+import org.apache.magma.website.templating.Template;
+
+public class VelocityTemplate extends Template {
+
+ private Person sessionUser;
+
+ public VelocityTemplate() {
+ super.fileName = "velocityTemplate.vm";
+ }
+
+ public void layoutSide() {
+ always(root().handleAux().doAuxSearch());
+ byDefault(AuxiliaryWebHandler.class,
root().handleAux().doAuxPoll());
+ mainCompound(CompoundType.SIDEA);
+ }
+
+ public String getTitle() {
+ return "This title is generated dynamically for " +
sessionUser.getName();
+ }
+
+}
Added:
labs/magma/trunk/foundation-website/src/test/resources/org/apache/magma/website/teststuff/velocityTemplate.vm
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/resources/org/apache/magma/website/teststuff/velocityTemplate.vm?rev=930193&view=auto
==============================================================================
---
labs/magma/trunk/foundation-website/src/test/resources/org/apache/magma/website/teststuff/velocityTemplate.vm
(added)
+++
labs/magma/trunk/foundation-website/src/test/resources/org/apache/magma/website/teststuff/velocityTemplate.vm
Fri Apr 2 09:12:22 2010
@@ -0,0 +1,27 @@
+<html>
+<!--
+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.
+-->
+ <head>
+ <title>$template.title</title>
+ </head>
+ <body>
+ <div id="zoneMain">
+ </div>
+ <div id="zoneSide">
+ </div>
+ </body>
+</html>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]