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/01/17 00:04:54 UTC

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

Author: simoneg
Date: Fri Jan 16 15:04:54 2009
New Revision: 735176

URL: http://svn.apache.org/viewvc?rev=735176&view=rev
Log:
LABS-277 : form actions

Added:
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java
Modified:
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/BeanFormProducer.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java
    labs/magma/trunk/website-beansview/src/main/resources/org/apache/magma/website/beansview/magmaBeansview.css
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/SmartFormEventsTest.java

Modified: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/BeanFormProducer.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/BeanFormProducer.java?rev=735176&r1=735175&r2=735176&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/BeanFormProducer.java (original)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/BeanFormProducer.java Fri Jan 16 15:04:54 2009
@@ -51,6 +51,7 @@
 	private String code;
 	private Map<String, List<?>> lists = new HashMap<String, List<?>>();
 	private BeanHandler handler;
+	private List<FormAction> actions;
 
 	public BeanFormProducer(Object bean, List<LocalizableStringWithSubject> errors, ViewCustomizer filter, String code) {
 		super(bean, filter);
@@ -59,6 +60,10 @@
 		this.code = code;
 	}
 	
+	public void setActions(List<FormAction> actions) {
+		this.actions = actions;
+	}
+	
 	
 	
 	@Override
@@ -68,9 +73,15 @@
 			out.write("<form action=\"filled\" method=\"POST\" accept-charset=\"utf-8\">");
 			out.flush();
 			super.produce(stream);
-			out.write("<input type=\"submit\" name=\"smartFormSend\" value=\"");
-			out.write(new LocalizableString("Send").toString());
-			out.write("\"/>");
+			if (actions != null) {
+				int i = 0;
+				for (FormAction action : this.actions) {
+					out.write("<input type=\"submit\" name=\"" + this.code + ".__action_" + i +"\" value=\"");
+					out.write(new LocalizableString(action.getLabel()).toString());
+					out.write("\"/>");									
+					i++;
+				}
+			}
 			out.write("</form>");
 			out.flush();
 		} catch (IOException e) {

Added: 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=735176&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java (added)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java Fri Jan 16 15:04:54 2009
@@ -0,0 +1,64 @@
+package org.apache.magma.website.beansview;
+
+import org.apache.magma.basics.MagmaException;
+
+public class FormAction {
+
+	private String label;
+	private String method;
+	private boolean parametrized;
+	private boolean validate;
+
+	
+	public FormAction(String label, String method) {
+		this.label = label;
+		this.method = method;
+		checkMethod();
+	}
+	
+	
+	private void checkMethod() {
+		if (method != null) {
+			if (!method.startsWith("do") && !method.startsWith("hidden")) {
+				throw new MagmaException("A form action method must be either a doMethod or a hiddenMethod");
+			}
+		}
+	}
+
+
+	public FormAction(String label, String method, boolean parametrized, boolean validate) {
+		this(label, method);
+		this.parametrized = parametrized;
+		this.validate = validate;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+	public FormAction setLabel(String label) {
+		this.label = label;
+		return this;
+	}
+	public String getMethod() {
+		return method;
+	}
+	public FormAction setMethod(String method) {
+		this.method = method;
+		return this;
+	}
+	public boolean isParametrized() {
+		return parametrized;
+	}
+	public FormAction setParametrized(boolean parametrized) {
+		this.parametrized = parametrized;
+		return this;
+	}
+	public boolean isValidate() {
+		return validate;
+	}
+	public FormAction setValidate(boolean validate) {
+		this.validate = validate;
+		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=735176&r1=735175&r2=735176&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 Fri Jan 16 15:04:54 2009
@@ -45,7 +45,8 @@
 
 	MagmaBeanSupport bean = null;
 	
-	private String next = null;
+	private List<FormAction> actions = new ArrayList<FormAction>();
+	private FormAction defaultAction = null;
 	
 	private HtmlProducer header = null;
 	private HtmlProducer footer = null;
@@ -59,12 +60,8 @@
 	
 	public SmartForm(Object bean, String next) {
 		this.bean = (MagmaBeanSupport) bean;
-		if (next != null) {
-			if (!next.startsWith("do") && !next.startsWith("hidden")) {
-				throw new MagmaException("The form return method must be either a doMethod or a hiddenMethod");
-			}
-		}
-		this.next = next;
+		actions.add(new FormAction("Send", next, true, true));
+		defaultAction = new FormAction("Send", next, true, true);
 	}
 
 	public SmartForm(Object bean, String next, HtmlProducer header) {
@@ -109,6 +106,7 @@
 		parametrize(header);
 		parametrize(footer);
 		BeanFormProducer producer = new BeanFormProducer(this.bean, errors, this.filter, getMyCode());
+		producer.setActions(this.actions);
 		producer.setLists(this.lists);
 		return new CompoundHtmlProducer(header, producer, footer);
 	}
@@ -120,10 +118,13 @@
 	
 	public HtmlProducer doFilled() {
 		errors.clear();
-		executeBinding();
-		checkValidity();
+		FormAction action = executeBinding();
+		if (action == null) throw new MagmaException("Cannot find which form action button has been pressed");
+		if (action.isValidate()) {
+			checkValidity();
+		}
 		if (errors.size() == 0) {
-			return goToNext();
+			return goToAction(action);
 		}
 		return unrepeatable(doShow());
 	}
@@ -136,23 +137,39 @@
 		prod.setTemplate(this.getTemplate());
 	}
 
-	protected HtmlProducer goToNext() {
+	protected HtmlProducer goToAction(FormAction action) {
 		WebHandler parent = getCreatingHandler();
 		GenericClass gc = GenericClass.forClass(parent.getClass());
-		List<MethodDef> methods = gc.findMethods(this.next, new Class<?>[] { this.bean.getClass() });
-		if (methods.size() == 0) {
-			throw new MagmaException("Cannot find method {0}.{1}({2}) to go after the form", getCreatingHandler(), this.next, this.bean.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();
 		try {
-			return (HtmlProducer) method.invoke(parent, this.bean);
+			if (action.isParametrized()) {
+				return (HtmlProducer) method.invoke(parent, this.bean);
+			} else {
+				return (HtmlProducer) method.invoke(parent);
+			}
 		} catch (Exception e) {
-			throw new MagmaException(e, "Error invoking {0}.{1}({2}) after proper firm completition.", parent.getClass(), this.next, this.bean.getClass());
+			if (action.isParametrized()) {
+				throw new MagmaException(e, "Error invoking {0}.{1}({2}) after proper firm completition.", parent.getClass(), action.getMethod(), this.bean.getClass());
+			} else {
+				throw new MagmaException(e, "Error invoking {0}.{1}() after proper firm completition.", parent.getClass(), action.getMethod());				
+			}
 		}
 	}
 
-	void executeBinding() {
+	FormAction executeBinding() {
 		handlers = new HashMap<MagmaBeanSupport, BeanHandler>();
 		Node root = bean.beanData().getViewTree(this.filter);
 		Set<Node> allNodes = root.getAllNodes();
@@ -173,6 +190,12 @@
 				}
 			}
 		}
+		for (int i = 0; i < actions.size(); i++) {
+			if (binding.get("__action_" + i) != null) {
+				return actions.get(i);
+			}
+		}
+		return defaultAction;
 	}
 	
 	void checkValidity() {	
@@ -228,4 +251,9 @@
 		return bean;
 	}
 	
+	public SmartForm addAction(FormAction action) {
+		this.actions.add(0, action);
+		return this;
+	}
+
 }

Modified: labs/magma/trunk/website-beansview/src/main/resources/org/apache/magma/website/beansview/magmaBeansview.css
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/resources/org/apache/magma/website/beansview/magmaBeansview.css?rev=735176&r1=735175&r2=735176&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/resources/org/apache/magma/website/beansview/magmaBeansview.css (original)
+++ labs/magma/trunk/website-beansview/src/main/resources/org/apache/magma/website/beansview/magmaBeansview.css Fri Jan 16 15:04:54 2009
@@ -84,6 +84,7 @@
 	font-weight: bold;
 	font-size: 100%;
 	color: #231F58;
+	margin-right: 2px;
 }
 
 input[type="submit"].MagmaRefreshButton {

Modified: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/SmartFormEventsTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/SmartFormEventsTest.java?rev=735176&r1=735175&r2=735176&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/SmartFormEventsTest.java (original)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/SmartFormEventsTest.java Fri Jan 16 15:04:54 2009
@@ -25,10 +25,11 @@
 		binding.put("name", "Simone");
 		binding.put("surname", "Gianni");
 		binding.put("email", "simoneg@apache.org");
+		binding.put("__action_0", "send");
 
 		SmartForm sf = new SmartForm(p, null) {
 			@Override
-			protected HtmlProducer goToNext() {
+			protected HtmlProducer goToAction(FormAction action) {
 				return null;
 			}
 		};



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