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