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/20 18:54:19 UTC

svn commit: r901307 - in /labs/magma/trunk: foundation-website/src/main/java/org/apache/magma/website/utils/ website-administration/src/main/java/org/apache/magma/website/admin/ website-beansview/src/main/java/org/apache/magma/website/beansview/ websit...

Author: simoneg
Date: Wed Jan 20 17:54:18 2010
New Revision: 901307

URL: http://svn.apache.org/viewvc?rev=901307&view=rev
Log:
Better form action link rewriting, support for actions in smart list and in default cruds

Modified:
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj
    labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractCrudHandler.java
    labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java
    labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/CompleteCrudHandler.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTableWithSorting.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartList.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartListProducer.java
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowListTest.java

Modified: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java Wed Jan 20 17:54:18 2010
@@ -8,6 +8,7 @@
 import java.util.List;
 
 import org.apache.magma.basics.MagmaException;
+import org.apache.magma.basics.startup.Cycle;
 import org.apache.magma.basics.utils.GenericClass;
 import org.apache.magma.basics.utils.GenericClass.MethodDef;
 import org.apache.magma.conversion.Converter;
@@ -37,6 +38,7 @@
 	private String baseMethod;
 	private Converter[] converters;
 	private Class<?>[] paramTypes;
+	private WebHandler targetHandler;
 	
 	public LinkHelper(Method method) {
 		this(method.getName(), method.getParameterTypes());
@@ -62,8 +64,27 @@
 		
 	}
 	
+	public LinkHelper(WebHandler target, String methodName, Class<?>... parameters) {
+		this(methodName, parameters);
+		this.targetHandler = target;
+	}
+	
+	public LinkHelper(WebHandler target, MethodDef method) {
+		this(method);
+		this.targetHandler = target;
+	}
+
+	public LinkHelper(WebHandler target, Method method) {
+		this(method);
+		this.targetHandler = target;
+	}
+	
 	public String makeLink(Object... params) {
 		StringBuilder ret = new StringBuilder();
+		if (targetHandler != null) {
+			ret.append("magma:");
+			ret.append(targetHandler.getRelativePath());			
+		}
 		ret.append(this.baseMethod);
 		if (params != null) {
 			if (params.length > converters.length) throw new MagmaException("Incorrect number of parameters for link to {0}, expecting {1} got {2}", this.baseMethod, this.converters.length, params.length);
@@ -106,6 +127,21 @@
 	}
 	
 	/**
+	 * Check if links created by this instance will work against the target handler.
+	 */
+	public void check() {
+		findMethod(targetHandler.getClass(), true);		
+	}
+
+	/**
+	 * Check if links created by this instance will work against the target handler, without checking converters. 
+	 */
+	public void checkNoConverter() {
+		findMethod(targetHandler.getClass(), false);		
+	}
+	
+	
+	/**
 	 * Searches for the method resulting from this link in the specified handler.
 	 * @param handlerClass A WebHandler to search in
 	 * @param withConversion If true also checks for converters

Modified: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj Wed Jan 20 17:54:18 2010
@@ -20,11 +20,13 @@
 import org.apache.magma.basics.startup.CycleThreadLocal;
 import org.apache.magma.website.Producer;
 import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.WebHandler;
 
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.Writer;
 import org.apache.magma.website.Head;
+import org.apache.magma.website.HandlerSetup;
 
 public aspect MakeURLRewritingContextBased {
 
@@ -35,6 +37,24 @@
 			execution(* HtmlProducer+.head(Head))
 		) && this(prod);
 	
+	
+	before(WebHandler h) : HandlerSetup.subHandle(h) || HandlerSetup.doMethod(h) || HandlerSetup.hiddenMethod(h) {
+		URLRewritingStream stream = Cycle.get().getRewriting();
+		if (stream == null) return;
+		try {
+			stream.pushBaseUrl(h.getRelativePath());
+		} catch (Throwable e) {
+			return;
+		}		
+	}
+	
+	after(WebHandler h) : HandlerSetup.subHandle(h) || HandlerSetup.doMethod(h) || HandlerSetup.hiddenMethod(h) {
+		URLRewritingStream stream = Cycle.get().getRewriting();
+		if (stream == null) return;
+		stream.popBaseUrl();
+	}	
+	
+	
 	before(Producer prod) : producing(prod) {
 		URLRewritingStream stream = Cycle.get().getRewriting();
 		if (stream == null) return;
@@ -71,4 +91,6 @@
 		stream.popBaseUrl();
 	}	
 	
+	
+	
 }

Modified: labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractCrudHandler.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractCrudHandler.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractCrudHandler.java (original)
+++ labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractCrudHandler.java Wed Jan 20 17:54:18 2010
@@ -16,6 +16,8 @@
  */
 package org.apache.magma.website.admin;
 
+import java.util.Set;
+
 import org.apache.magma.basics.LocalizableString;
 import org.apache.magma.basics.MagmaException;
 import org.apache.magma.beans.MagmaBeanSupport;
@@ -28,6 +30,7 @@
 import org.apache.magma.website.beansview.SmartForm;
 import org.apache.magma.website.beansview.SmartList;
 import org.apache.magma.website.producers.StringHtmlProducer;
+import org.apache.magma.website.utils.LinkHelper;
 
 public class AbstractCrudHandler<T extends MagmaBeanSupport> extends WebHandler {
 
@@ -55,6 +58,7 @@
 			.setLink("doShow")
 			.setHeader(header)
 			.setElementsPerPage(listSize);
+		
 		if (listLayers != null) {
 			ret.setLayers(listLayers);
 		}
@@ -71,6 +75,7 @@
 	
 	protected HtmlProducer doDelete(T bean) {
 		new Database().delete(bean);
+		redirect(LinkHelper.makeLink("handleList"));
 		return handleList().do_default();
 	}
 	
@@ -92,6 +97,7 @@
 	
 	public HtmlProducer hiddenSave(T bean) {
 		new Database().save(bean);
+		redirect(LinkHelper.makeLink("doShow", bean));
 		return doShow(bean);
 	}
 	

Modified: labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java (original)
+++ labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java Wed Jan 20 17:54:18 2010
@@ -46,7 +46,7 @@
 		sl.compoundWith(
 				new StringHtmlProducer("<h1>" + new LocalizableString("List of {0}", property.getCollectionClass().getSimpleName()).toString() + "</h1>")
 				, CompoundType.HEAD);		
-		sl.addAction(new FormAction("Disconnect", "doDelete"));
+		sl.addAction(new FormAction(this, "Disconnect", "doDelete"));
 		if (isOverridden(AbstractListCrud.class, "handleNew")) {
 			sl.compoundWith(handleNew().do_default(), CompoundType.AFTER);			
 		}

Modified: labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/CompleteCrudHandler.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/CompleteCrudHandler.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/CompleteCrudHandler.java (original)
+++ labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/CompleteCrudHandler.java Wed Jan 20 17:54:18 2010
@@ -21,6 +21,7 @@
 import org.apache.magma.website.Producer;
 import org.apache.magma.website.beansview.SmartForm;
 import org.apache.magma.website.beansview.SmartList;
+import org.apache.magma.website.beansview.FormAction;
 
 public class CompleteCrudHandler<T extends MagmaBeanSupport> extends AbstractCrudHandler<T> {
 
@@ -55,7 +56,11 @@
 	
 	@Override
 	public SmartList handleList() {
-		return super.handleList();
+		SmartList ret = super.handleList();
+		ret.addAction(new FormAction(this, "Show", "doShow", true, false));
+		ret.addAction(new FormAction(this, "Edit", "handleEdit", true, false));
+		ret.addAction(new FormAction(this, "Delete", "doDelete", true, false));
+		return ret;
 	}
 	
 	@Override

Modified: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java (original)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java Wed Jan 20 17:54:18 2010
@@ -32,18 +32,20 @@
 	private String method;
 	private boolean parametrized = true;
 	private boolean validate;
+	private WebHandler targetHandler = null;
 	
 	private LinkHelper linkHelper = null;
 
 	
-	public FormAction(String label, String method) {
+	public FormAction(WebHandler handler, String label, String method) {
 		this.label = label;
 		this.method = method;
+		this.targetHandler = handler;
 	}
 	
 	
-	public FormAction(String label, String method, boolean parametrized, boolean validate) {
-		this(label, method);
+	public FormAction(WebHandler handler, String label, String method, boolean parametrized, boolean validate) {
+		this(handler, label, method);
 		this.parametrized = parametrized;
 		this.validate = validate;
 	}
@@ -80,9 +82,9 @@
 	protected void createHelper(Class<?> beanClass) {
 		if (linkHelper == null) {
 			if (this.parametrized && beanClass != null) {
-				linkHelper = new LinkHelper(this.method, beanClass);
+				linkHelper = new LinkHelper(this.targetHandler, this.method, beanClass);
 			} else {
-				linkHelper = new LinkHelper(this.method);
+				linkHelper = new LinkHelper(this.targetHandler, this.method);
 			}
 		}		
 	}
@@ -97,6 +99,15 @@
 		linkHelper.checkAgainstNoConverter(against);
 	}
 	
+	public void check(Class<?> beanClass) {
+		createHelper(beanClass);
+		linkHelper.check();		
+	}
+	public void checkNoConverter(Class<?> beanClass) {
+		createHelper(beanClass);
+		linkHelper.checkNoConverter();		
+	}
+	
 	public Method getMethod(Class<? extends WebHandler> on, MagmaBeanSupport bean) {
 		createHelper(bean.getClass());
 		return linkHelper.findMethod(on, false);

Modified: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTableWithSorting.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTableWithSorting.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTableWithSorting.java (original)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTableWithSorting.java Wed Jan 20 17:54:18 2010
@@ -11,6 +11,7 @@
 	@Override
 	protected void openHeaderCell(FieldNode fldn) {
 		super.openHeaderCell(fldn);
+		if (fldn == null) return;
 		buff.append("\n#set( $hasSortLink = $list.isSortable('");
 		buff.append(fldn.getId());
 		buff.append("') )\n");
@@ -23,22 +24,24 @@
 	
 	@Override
 	protected void closeHeaderCell(FieldNode fldn) {
-		buff.append("\n#if( $list.isSorted('");
-		buff.append(fldn.getId());
-		buff.append("'))\n");
-		buff.append("\n#if ($list.desc)\n");
-		buff.append("<img src=\"sortDesc.png\" alt=\"");
-		buff.append(new LocalizableString("Sorted").toString());
-		buff.append("\"/>");
-		buff.append("\n#else\n");
-		buff.append("<img src=\"sortAsc.png\" alt=\"");
-		buff.append(new LocalizableString("Sorted").toString());
-		buff.append("\"/>");		
-		buff.append("\n#end\n");
-		buff.append("\n#if( $hasSortLink )\n");
-		buff.append("</a>");
-		buff.append("\n#end\n");
-		buff.append("\n#end\n");
+		if (fldn != null) {
+			buff.append("\n#if( $list.isSorted('");
+			buff.append(fldn.getId());
+			buff.append("'))\n");
+			buff.append("\n#if ($list.desc)\n");
+			buff.append("<img src=\"sortDesc.png\" alt=\"");
+			buff.append(new LocalizableString("Sorted").toString());
+			buff.append("\"/>");
+			buff.append("\n#else\n");
+			buff.append("<img src=\"sortAsc.png\" alt=\"");
+			buff.append(new LocalizableString("Sorted").toString());
+			buff.append("\"/>");		
+			buff.append("\n#end\n");
+			buff.append("\n#if( $hasSortLink )\n");
+			buff.append("</a>");
+			buff.append("\n#end\n");
+			buff.append("\n#end\n");
+		}
 		super.closeHeaderCell(fldn);
 	}
 		

Modified: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java (original)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java Wed Jan 20 17:54:18 2010
@@ -78,8 +78,8 @@
 	
 	public SmartForm(Object bean, String next) {
 		this.bean = (MagmaBeanSupport) bean;
-		actions.add(new FormAction("Send", next, true, true));
-		defaultAction = new FormAction("Send", next, true, true);
+		actions.add(new FormAction(getCreatingHandler(), "Send", next, true, true));
+		defaultAction = new FormAction(getCreatingHandler(), "Send", next, true, true);
 	}
 
 	public SmartForm(Object bean, String next, HtmlProducer header) {

Modified: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartList.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartList.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartList.java (original)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartList.java Wed Jan 20 17:54:18 2010
@@ -17,6 +17,7 @@
 package org.apache.magma.website.beansview;
 
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -59,6 +60,7 @@
 	
 	private Set<String> sortables = null;
 	private boolean withFilter = false;
+	protected List<FormAction> actions = null;	
 	
 	private HtmlProducer prodHeader = null;
 	private HtmlProducer prodFooter = null;
@@ -219,11 +221,13 @@
 		producer.setListStyle(listStyle);
 		producer.setLayers(layers);
 		producer.setLink(this.link);
+		producer.setActions(this.actions);
 		producer.setReferringHandler(getCreatingHandler());
 		producer.setElementCssClass(elementCssClass);
 		producer.setIntermediateCssClass(intermediateCssClass);
 		producer.setOuterCssClass(outerCssClass);
 		
+		
 		producer.compoundWith(prodHeader, CompoundType.HEAD);
 		if (withFilter && this.sessionReservedQbe != null) {
 			producer.compoundWith(handleFilter().do_default(), CompoundType.BEFORE);
@@ -407,4 +411,11 @@
 		return this;
 	}
 	
+	public SmartList addAction(FormAction action) {
+		if (this.actions == null) this.actions = new ArrayList<FormAction>();
+		this.actions.add(action);
+		return this;
+	}
+
+	
 }

Modified: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartListProducer.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartListProducer.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartListProducer.java (original)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartListProducer.java Wed Jan 20 17:54:18 2010
@@ -261,6 +261,10 @@
 		this.link = link;
 	}
 	
+	public void setActions(List<FormAction> actions) {
+		this.actions = actions;
+	}
+	
 	@Override
 	public String computeLinkURL(MagmaBeanSupport bean, String nodeid) {
 		// TODO this is ugly

Modified: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java (original)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java Wed Jan 20 17:54:18 2010
@@ -20,6 +20,10 @@
 	@Test
 	public void showBeanPerformances() throws Exception {
 		Settings.setEnvironment("prod");
+		System.gc();
+		Thread.sleep(1000);
+		System.gc();
+		System.gc();
 		
 		Person p = new Person();
 		p.setName("Simone");
@@ -47,6 +51,10 @@
 	@Test
 	public void showFormPerformances() throws Exception {
 		Settings.setEnvironment("prod");
+		System.gc();
+		Thread.sleep(1000);
+		System.gc();
+		System.gc();
 		
 		Person p = new Person();
 		p.setName("Simone");

Modified: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowListTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowListTest.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowListTest.java (original)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowListTest.java Wed Jan 20 17:54:18 2010
@@ -152,8 +152,8 @@
 		
 		ShowList sbp = new ShowList(Person.class, lst);
 		sbp.referringHandler = this;
-		sbp.addAction(new FormAction("Delete", "doDelete"));
-		sbp.addAction(new FormAction("Promote", "doPromote"));
+		sbp.addAction(new FormAction(this, "Delete", "doDelete"));
+		sbp.addAction(new FormAction(this, "Promote", "doPromote"));
 		
 		ByteArrayOutputStream baos = new ByteArrayOutputStream();
 		sbp.produce(baos);



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