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/11/16 22:52:15 UTC

svn commit: r880983 - in /labs/magma/trunk/website-beansview/src: main/java/org/apache/magma/website/beansview/ test/java/org/apache/magma/website/beansview/

Author: simoneg
Date: Mon Nov 16 21:52:14 2009
New Revision: 880983

URL: http://svn.apache.org/viewvc?rev=880983&view=rev
Log:
LABS-221 : use LinkHelper for FormAction and list links

Modified:
    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/ShowList.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/ShowListTest.java

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=880983&r1=880982&r2=880983&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 Mon Nov 16 21:52:14 2009
@@ -16,10 +16,14 @@
  */
 package org.apache.magma.website.beansview;
 
+import java.lang.reflect.Method;
+
 import org.apache.magma.basics.MagmaException;
 import org.apache.magma.beans.MagmaBeanSupport;
 import org.apache.magma.conversion.Converter;
 import org.apache.magma.conversion.Converters;
+import org.apache.magma.website.WebHandler;
+import org.apache.magma.website.utils.LinkHelper;
 
 
 public class FormAction {
@@ -28,12 +32,13 @@
 	private String method;
 	private boolean parametrized = true;
 	private boolean validate;
+	
+	private LinkHelper linkHelper = null;
 
 	
 	public FormAction(String label, String method) {
 		this.label = label;
 		this.method = method;
-		checkMethod();
 	}
 	
 	
@@ -80,20 +85,29 @@
 		this.validate = validate;
 		return this;
 	}
+
+	protected void createHelper(Class<?> beanClass) {
+		if (linkHelper == null) {
+			if (this.parametrized && beanClass != null) {
+				linkHelper = new LinkHelper(this.method, beanClass);
+			} else {
+				linkHelper = new LinkHelper(this.method);
+			}
+		}		
+	}
+	
+	public void validate(Class<? extends WebHandler> against, Class<?> beanClass) {
+		createHelper(beanClass);
+		linkHelper.checkAgainst(against);
+	}
+	
+	public Method getMethod(Class<? extends WebHandler> on, MagmaBeanSupport bean) {
+		createHelper(bean.getClass());
+		return linkHelper.findMethod(on);
+	}
 	
 	public String getMethodUrl(MagmaBeanSupport bean) {
-		String meth = getMethod();
-		if (meth.startsWith("do")) {
-			meth = meth.substring(2);
-		} else if (meth.startsWith("handle")) {
-			meth = meth.substring(6);
-		}
-		if (bean != null && this.parametrized) {
-			Converter conv = Converters.getConverterFor(bean.getClass());
-			if (conv == null) throw new MagmaException("Cannot find a converter for the form action on bean {0}", bean.getClass());
-			meth += "!";
-			meth += conv.to(bean);
-		}
-		return meth;
+		createHelper(bean.getClass());
+		return linkHelper.makeLink(bean);
 	}
  }

Modified: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowList.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowList.java?rev=880983&r1=880982&r2=880983&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowList.java (original)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowList.java Mon Nov 16 21:52:14 2009
@@ -35,6 +35,7 @@
 import org.apache.magma.website.Head;
 import org.apache.magma.website.HtmlProducer;
 import org.apache.magma.website.WebHandler;
+import org.apache.magma.website.utils.LinkHelper;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
 
@@ -55,15 +56,15 @@
 	
 	protected Collection<?> list;
 	protected String link = null;
-	protected String linkUrl = null;
 	protected Class<? extends MagmaBeanSupport> myclass;
-	protected Converter converter;
 	protected String caption;
 	protected String summary;
 	protected String gototitle;
 	protected String[] layers = LIST;
 	protected ListStyle listStyle;
 	protected List<FormAction> actions = null;
+	protected LinkHelper linkHelper;
+	protected WebHandler referringHandler = null;
 	
 	
 	public <T extends MagmaBeanSupport> ShowList(Class<T> myclass, Collection<? extends T> list, String link, String... layers) {
@@ -94,32 +95,22 @@
 	
 	@Override
 	public void produce(Writer tables) throws IOException {
-		this.gototitle = new LocalizableString("Show element").toString();		
+		this.gototitle = new LocalizableString("Show element").toString();
+		
+		if (referringHandler == null) referringHandler = getCreatingHandler();
+		
+		// Check link and actions validity
 		if (this.link != null) {
-			GenericClass gc = GenericClass.forClass(getCreatingHandler().getClass());
-			List<MethodDef> methods = gc.findMethods(this.link, new Class<?>[] { this.myclass });
-			if (methods.size() == 0) {
-				methods = gc.findMethods(this.link, new Class<?>[] { null });
-				if (methods.size() == 0) {				
-					throw new MagmaException("Cannot find method {0}.{1}({2}) to make the link", getCreatingHandler(), this.link, this.myclass);
-				} else if (methods.size() > 1) {
-					throw new MagmaException("There is more than one method {0}.{1}(), and no one is accepting explicitly {2} as a parameter. Cannot not make the link", getCreatingHandler(), this.link, this.myclass);					
-				}
-			}
-			this.linkUrl = this.link;
-			if (linkUrl.startsWith("do")) {
-				this.linkUrl = this.linkUrl.substring(2);
-			} else if (linkUrl.startsWith("handle")){
-				this.linkUrl = this.linkUrl.substring(6);				
-			} else {
-				throw new MagmaException("The link {0} is not valid : it should refer a doMethod or handleMethod", this.link);
-			}
+			linkHelper = new LinkHelper(this.link, this.myclass);
+			linkHelper.checkAgainst(referringHandler.getClass());
 		}
-		if (this.linkUrl != null) {
-			this.converter = Converters.getConverterFor(this.myclass);
-			if (this.converter == null) throw new MagmaException("Cannot find converter for {0}, cannot make link!", this.myclass);			
+		if (this.actions != null) {
+			for (FormAction action : this.actions) {
+				action.validate(referringHandler.getClass(), this.myclass);
+			}
 		}
-				
+		
+		// build the template
 		RootNode root = BeanData.getFor(myclass).getViewTree(this.layers);
 		// TODO optimize this
 		if (root.getAllNodes().size() == 1) throw new MagmaException("Cannot create list for {0}, seems like no @Listed elements are present or they are not correctly connected to each other to form a proper list", myclass);
@@ -129,7 +120,7 @@
 		}
 		listStyle.setMyclass(myclass);
 		listStyle.setRoot(root);
-		listStyle.setWithLink(this.linkUrl != null);
+		listStyle.setWithLink(this.link != null);
 		listStyle.setWithAdditional(this.actions != null && this.actions.size() > 0);
 		String tplkey = listStyle.getClass().getName() + ":" + listStyle.getStyleKey();
 		
@@ -143,7 +134,8 @@
 				}
 			}
 		}
-		
+
+		// Output the list
 		VelocityContext ctx = new VelocityContext();
 		ctx.put("list", this);
 		Velocity.evaluate(ctx, tables, "", new StringReader(tplval));
@@ -201,7 +193,7 @@
 	}
 		
 	public String computeLinkURL(MagmaBeanSupport bean, String nodeid) {
-		return this.linkUrl + WebHandler.paramSeparator + this.converter.to(bean);
+		return this.linkHelper.makeLink(bean);
 	}
 	
 	public String computeLinkTitle(MagmaBeanSupport bean, String nodeid) {
@@ -281,5 +273,4 @@
 		return this;
 	}
 	
-	
 }

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=880983&r1=880982&r2=880983&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 Mon Nov 16 21:52:14 2009
@@ -114,6 +114,12 @@
 	}
 	
 	public HtmlProducer doShow() {
+		// Check validity of actions
+		if (this.actions != null) {
+			for (FormAction action : this.actions) {
+				action.validate(getCreatingHandler().getClass(), bean.getClass());
+			}
+		}
 		parametrize(prodHeader);
 		parametrize(prodFooter);
 		BeanFormProducer producer = new BeanFormProducer(this.bean, errors, getMyCode(), this.layers);
@@ -164,21 +170,7 @@
 
 	protected HtmlProducer goToAction(FormAction action) {
 		WebHandler parent = getCreatingHandler();
-		GenericClass gc = GenericClass.forClass(parent.getClass());
-		List<MethodDef> methods = null;
-		if (action.isParametrized()) {
-			methods = gc.findMethods(action.getMethod(), new Class<?>[] { this.bean.getClass() });
-			if (methods.size() == 0) {
-				throw new MagmaException("Cannot find method {0}.{1}({2}) to go after the form", getCreatingHandler(), action.getMethod(), this.bean.getClass());					
-			}
-		} else {
-			methods = gc.findMethods(action.getMethod(), new Class<?>[] {});
-			if (methods.size() == 0) {
-				throw new MagmaException("Cannot find method {0}.{1}() to go after the form", getCreatingHandler(), action.getMethod());					
-			}			
-		}
-
-		Method method = methods.get(0).getBaseMethod();
+		Method method = action.getMethod(parent.getClass(), bean);
 		try {
 			if (action.isParametrized()) {
 				return (HtmlProducer) method.invoke(parent, this.bean);

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=880983&r1=880982&r2=880983&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 Mon Nov 16 21:52:14 2009
@@ -39,6 +39,7 @@
 import org.apache.magma.website.HtmlProducer;
 import org.apache.magma.website.WebHandler;
 import org.apache.magma.website.producers.ParametrizableProducer;
+import org.apache.magma.website.utils.LinkHelper;
 
 public class SmartList extends WebHandler {
 
@@ -64,7 +65,6 @@
 	private boolean defaultDesc = false;
 	
 	private String link;
-	private String linkUrl;
 	private Class<? extends MagmaBeanSupport> myclass;
 
 	// Delegate fields
@@ -83,29 +83,7 @@
 	}
 	
 	public HtmlProducer doShow() {
-		if (this.link != null) {
-			GenericClass gc = GenericClass.forClass(getCreatingHandler().getClass());
-			List<MethodDef> methods = gc.findMethods(this.link, new Class<?>[] { this.myclass });
-			if (methods.size() == 0) {
-				methods = gc.findMethods(this.link, new Class<?>[] { null });
-				if (methods.size() == 0) {				
-					throw new MagmaException("Cannot find method {0}.{1}({2}) to make the link", getCreatingHandler(), this.link, this.myclass);
-				} else if (methods.size() > 1) {
-					throw new MagmaException("There is more than one method {0}.{1}(), and no one is accepting explicitly {2} as a parameter. Cannot not make the link", getCreatingHandler(), this.link, this.myclass);					
-				}
-			}
-			this.linkUrl = this.link;
-			if (linkUrl.startsWith("do")) {
-				this.linkUrl = this.linkUrl.substring(2);
-			} else if (linkUrl.startsWith("handle")){
-				this.linkUrl = this.linkUrl.substring(6);				
-			} else {
-				throw new MagmaException("The link {0} is not valid : it should refer a doMethod or handleMethod", this.link);
-			}
-		}
-		
 		checkSortables();
-		
 		Database db = new Database();
 		int count = -1;
 		StringBuilder countquery = new StringBuilder(this.query); 
@@ -162,7 +140,8 @@
 		producer.setSummary(summary);
 		producer.setListStyle(listStyle);
 		producer.setLayers(layers);
-		producer.setLink("../" + this.linkUrl);
+		producer.setLink(this.link);
+		producer.setReferringHandler(getCreatingHandler());
 		producer.compoundWith(prodHeader, CompoundType.BEFORE);
 		producer.compoundWith(prodFooter, CompoundType.AFTER);
 		return producer;

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=880983&r1=880982&r2=880983&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 Mon Nov 16 21:52:14 2009
@@ -248,12 +248,19 @@
 		this.count = count;
 	}
 
-	public String getLink() {
-		return linkUrl;
+	public void setReferringHandler(WebHandler handler) {
+		this.referringHandler = handler;
 	}
-
-	public void setLink(String next) {
-		this.linkUrl = next;
+	
+	
+	public void setLink(String link) {
+		this.link = link;
 	}
-
+	
+	@Override
+	public String computeLinkURL(MagmaBeanSupport bean, String nodeid) {
+		// TODO this is ugly
+		return "../" + super.computeLinkURL(bean, nodeid);
+	}
+	
 }

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=880983&r1=880982&r2=880983&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 Mon Nov 16 21:52:14 2009
@@ -17,6 +17,8 @@
 package org.apache.magma.website.beansview;
 
 import org.apache.magma.beans.BeanData;
+import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.WebHandler;
 import org.apache.magma.website.beansview.stuff.Person;
 
 import java.io.ByteArrayOutputStream;
@@ -28,7 +30,7 @@
 import static org.junit.Assert.*;
 
 
-public class ShowListTest {
+public class ShowListTest extends WebHandler {
 
 	@Test
 	public void listTemplateTest() throws Exception {
@@ -99,6 +101,7 @@
 		lst.add(p);
 		
 		ShowList sbp = new ShowList(Person.class, lst);
+		sbp.referringHandler = this;
 		sbp.addAction(new FormAction("Delete", "doDelete"));
 		sbp.addAction(new FormAction("Promote", "doPromote"));
 		
@@ -109,10 +112,16 @@
 
 		assertStructure(result, 
 				"<table","<tr",
-				"<td", "Simone", "</td", "<td", "Gianni", "<td", "additionals", "<a", "href=\"Delete",
+				"<td", "Simone", "</td", "<td", "Gianni", "<td", "additionals", 
+				"<a", "href=\"delete!converted",
+				"<a", "href=\"promote!converted",
 				"</table");
 		System.out.println(result);
 	}
 	
+	// Cehcked for actions in actionsTest 
+	public HtmlProducer doDelete(Person p) { return null; };
+	public HtmlProducer doPromote(Person p) { return null; };
+	
 	
 }



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