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 2009/03/10 16:00:34 UTC

svn commit: r752128 - in /labs/magma/trunk: foundation-website/ foundation-website/src/main/java/org/apache/magma/website/ foundation-website/src/main/java/org/apache/magma/website/producers/ website-developer/src/main/java/org/apache/magma/website/dev...

Author: simoneg
Date: Tue Mar 10 15:00:23 2009
New Revision: 752128

URL: http://svn.apache.org/viewvc?rev=752128&view=rev
Log:
LABS-250 : introduced templating producer, superclass and "factory" of velocity and other future templating systems

Added:
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducer.java
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducerFactory.java
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducerHook.aj
    labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/SetupVelocity.aj
Modified:
    labs/magma/trunk/foundation-website/pom.xml
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
    labs/magma/trunk/website-developer/src/main/java/org/apache/magma/website/developer/DeveloperHandler.java
    labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/VelocityHtmlProducer.java

Modified: labs/magma/trunk/foundation-website/pom.xml
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/pom.xml?rev=752128&r1=752127&r2=752128&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/pom.xml (original)
+++ labs/magma/trunk/foundation-website/pom.xml Tue Mar 10 15:00:23 2009
@@ -81,10 +81,5 @@
       <artifactId>commons-io</artifactId>
       <version>1.3.2</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.magma</groupId>
-      <artifactId>foundation-startup</artifactId>
-      <version>0.0.2-SNAPSHOT</version>
-    </dependency>
   </dependencies>
 </project>
\ No newline at end of file

Modified: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java?rev=752128&r1=752127&r2=752128&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java Tue Mar 10 15:00:23 2009
@@ -22,7 +22,7 @@
 import org.apache.magma.website.templating.Template;
 import org.apache.magma.website.utils.URLRewritingStream;
 import org.apache.magma.settings.Settings;
-import org.apache.magma.startup.Startup;
+import org.apache.magma.basics.startup.Startup;
 
 import sun.reflect.generics.scope.MethodScope;
 

Added: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducer.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducer.java?rev=752128&view=auto
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducer.java (added)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducer.java Tue Mar 10 15:00:23 2009
@@ -0,0 +1,29 @@
+package org.apache.magma.website.producers;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import org.apache.magma.website.Head;
+
+public class TemplatingProducer extends ParametrizableHtmlProducerBase {
+
+	private String templateFile = null;
+	
+	public TemplatingProducer(String templateFile) {
+		this.templateFile = templateFile;
+	}
+	
+	public TemplatingProducer() {
+		
+	}
+		
+	@Override
+	public void head(Head head) {
+	}
+
+	@Override
+	public void produce(Writer writer) throws IOException {
+		writer.append("Here goes a template file, located at \"" + templateFile + "\"");
+	}
+
+}

Added: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducerFactory.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducerFactory.java?rev=752128&view=auto
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducerFactory.java (added)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducerFactory.java Tue Mar 10 15:00:23 2009
@@ -0,0 +1,56 @@
+package org.apache.magma.website.producers;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.settings.Settings;
+
+public class TemplatingProducerFactory {
+
+	private static Map<String, Class<? extends TemplatingProducer>> extensions = new HashMap<String, Class<? extends TemplatingProducer>>();
+	
+	private static Map<String, Class<? extends TemplatingProducer>> cache = new HashMap<String, Class<? extends TemplatingProducer>>();
+	
+	public static void register(String extension, Class<? extends TemplatingProducer> clazz) {
+		extensions.put(extension, clazz);
+	}
+	
+	public static TemplatingProducer getFor(String path) {
+		Class<? extends TemplatingProducer> clazz = null;
+		String complete = null;
+ 		if (Settings.isProductionEnv()) {
+			clazz = cache.get(path);
+		} 
+ 		if (clazz == null) {
+ 			for (Map.Entry<String, Class<? extends TemplatingProducer>> entry : extensions.entrySet()) {
+				complete = path + "." + entry.getKey();
+				if (TemplatingProducerFactory.class.getResource(complete) != null) {
+					clazz = entry.getValue();
+					if (Settings.isProductionEnv()) {
+						cache.put(complete, clazz);
+					}
+					break;
+				}
+			}
+ 		}
+ 		if (clazz == null) return null;
+ 		TemplatingProducer producer;
+		try {
+			Constructor<? extends TemplatingProducer> constructor = clazz.getConstructor(String.class);
+			producer = constructor.newInstance(complete);
+		} catch (NoSuchMethodException e) {
+			throw new MagmaException(e, "The templating producer {0} does not implement a string only constructor!", clazz);
+		} catch (IllegalAccessException e) {
+			throw new MagmaException(e, "The templating producer {0} has a non public string only constructor!", clazz);
+		} catch (Exception e) {
+			throw new MagmaException(e, "Error creating producer {0}", clazz);
+		}
+ 		return producer;
+	}
+	
+}

Added: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducerHook.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducerHook.aj?rev=752128&view=auto
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducerHook.aj (added)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/producers/TemplatingProducerHook.aj Tue Mar 10 15:00:23 2009
@@ -0,0 +1,41 @@
+package org.apache.magma.website.producers;
+
+import java.beans.Introspector;
+
+import org.apache.magma.basics.context.RunningContext;
+import org.apache.magma.website.context.WebMethodContextElement;
+
+public aspect TemplatingProducerHook {
+
+	TemplatingProducer around(String path) : call(TemplatingProducer.new(String)) && args(path) {
+		WebMethodContextElement ele = RunningContext.get().getLast(WebMethodContextElement.class);
+		if (ele == null) return proceed(path);
+
+		if (path == null) {
+			String methodName = ele.getMethod().getName();
+			if (methodName.startsWith("do")) {
+				methodName = methodName.substring(2);
+				methodName = Introspector.decapitalize(methodName);
+				path = methodName;
+			}
+		}
+		if (path == null) return proceed(path);
+		
+		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;
+		}
+		
+		TemplatingProducer prod = TemplatingProducerFactory.getFor(complete);
+		if (prod == null) return proceed(path);
+		return prod;
+	}
+	
+}

Modified: labs/magma/trunk/website-developer/src/main/java/org/apache/magma/website/developer/DeveloperHandler.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-developer/src/main/java/org/apache/magma/website/developer/DeveloperHandler.java?rev=752128&r1=752127&r2=752128&view=diff
==============================================================================
--- labs/magma/trunk/website-developer/src/main/java/org/apache/magma/website/developer/DeveloperHandler.java (original)
+++ labs/magma/trunk/website-developer/src/main/java/org/apache/magma/website/developer/DeveloperHandler.java Tue Mar 10 15:00:23 2009
@@ -103,7 +103,7 @@
 			} catch (IOException e) {
 				throw new MagmaException(e, "Error reading from {0}", paramUrl);
 			}
-			return new VelocityHtmlProducer(prop, paramUrl);
+			return new VelocityHtmlProducer().addParameter(prop).addParameter(paramUrl);
 		} finally {
 			if (instr != null) {
 				try {
@@ -126,7 +126,7 @@
 	
 	public HtmlProducer doUris() {
 		HandlerDescription nd = new HandlerDescription(GenericClass.forClass(RootWebHandler.class));
-		return new VelocityHtmlProducer(nd);
+		return new VelocityHtmlProducer().addParameter(nd);
 	}
 	
 	public HtmlProducer doPanel() {

Added: labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/SetupVelocity.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/SetupVelocity.aj?rev=752128&view=auto
==============================================================================
--- labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/SetupVelocity.aj (added)
+++ labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/SetupVelocity.aj Tue Mar 10 15:00:23 2009
@@ -0,0 +1,25 @@
+package org.apache.magma.website.velocity;
+
+import java.util.Properties;
+
+import org.apache.magma.basics.startup.Startup;
+import org.apache.magma.settings.Settings;
+import org.apache.magma.website.producers.TemplatingProducerFactory;
+import org.apache.velocity.app.Velocity;
+
+public aspect SetupVelocity {
+
+	public void Startup.setupVelocity() {
+		try {
+			Properties prp = new Properties();
+			prp.putAll(Settings.getAll());
+			Velocity.init(prp);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}		
+		
+		TemplatingProducerFactory.register("vm", VelocityHtmlProducer.class);
+		TemplatingProducerFactory.register("vt", VelocityHtmlProducer.class);
+	}
+	
+}

Modified: labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/VelocityHtmlProducer.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/VelocityHtmlProducer.java?rev=752128&r1=752127&r2=752128&view=diff
==============================================================================
--- labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/VelocityHtmlProducer.java (original)
+++ labs/magma/trunk/website-velocity/src/main/java/org/apache/magma/website/velocity/VelocityHtmlProducer.java Tue Mar 10 15:00:23 2009
@@ -19,7 +19,7 @@
 import org.apache.magma.basics.MagmaException;
 import org.apache.magma.settings.Settings;
 import org.apache.magma.website.Head;
-import org.apache.magma.website.producers.ParametrizableHtmlProducerBase;
+import org.apache.magma.website.producers.TemplatingProducer;
 
 import java.beans.Introspector;
 import java.io.IOException;
@@ -38,27 +38,14 @@
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
 
-public class VelocityHtmlProducer extends ParametrizableHtmlProducerBase {
+public class VelocityHtmlProducer extends TemplatingProducer {
 
-	{
-		try {
-			Properties prp = new Properties();
-			prp.putAll(Settings.getAll());
-			Velocity.init(prp);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public VelocityHtmlProducer(Object... params) {
-		for (Object object : params) {
-			addParameter(object);
-		}
-	}
-	
 	public VelocityHtmlProducer(String template) {
 		this.template = template;
 	}
+	public VelocityHtmlProducer() {
+		
+	}
 	
 	private String template;
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org