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 2008/09/19 05:49:57 UTC

svn commit: r696912 - in /labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview: BeanFormProducer.java SmartForm.java

Author: simoneg
Date: Thu Sep 18 20:49:56 2008
New Revision: 696912

URL: http://svn.apache.org/viewvc?rev=696912&view=rev
Log:
LABS-161 : Magma is now fully generics aware

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

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=696912&r1=696911&r2=696912&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 Thu Sep 18 20:49:56 2008
@@ -169,20 +169,41 @@
 	private void createRadioField(FieldNode node, List<?> elements, Writer out) throws IOException {
 		PropertyInfo property = node.getProperty();		
 		Converter conv = (Converter)property.getConverter();
+		int i = 0;
+		CompoundValidator<Object> val = property.getValidator();
+		if ((val == null || (val != null && val.acceptsNulls())) && !elements.contains(null)) {
+			createRadioButton(node, out, conv, i++, null);
+		}
 		for (Object object : elements) {
-			String val = conv.toString(object);
-			out.append("<input type=\"radio\"");
-			createNameAndId(node, out);
-			out.append(" value=\"");
-			out.append(val);
-			out.append("\"");
-			String acval = binding.get(node.getId());
-			if (acval != null && acval.equals(val)) {
-				out.append(" checked=\"checked\"");
-			}
-			out.append("/>");			
+			createRadioButton(node, out, conv, i++, object);
+		}
+	}
+
+
+
+	private void createRadioButton(FieldNode node, Writer out, Converter conv,
+			int i, Object object) throws IOException {
+		String val = conv.toString(object);
+		out.append("<input type=\"radio\"");
+		createNameAndId(node, out, Integer.toString(i));
+		out.append(" value=\"");
+		out.append(val);
+		out.append("\"");
+		String acval = binding.get(node.getId());
+		if (acval != null && acval.equals(val)) {
+			out.append(" checked=\"checked\"");
+		}
+		out.append("/>");
+		out.append("<label for=\"");
+		out.append(getId(node, Integer.toString(i)));
+		out.append("\">");
+		if (object != null) {
 			out.append(ViewUtils.getStringValue(object));
+		} else {
+			// TODO how to handle this in i18n?
+			out.append("None");
 		}
+		out.append("</label>");
 	}
 
 	protected void createDropDownField(FieldNode node, List<?> elements, Writer out) throws IOException {
@@ -191,22 +212,38 @@
 		out.append('>');
 		PropertyInfo property = node.getProperty();		
 		Converter conv = (Converter)property.getConverter();
+		CompoundValidator<Object> val = property.getValidator();
+		if ((val == null || (val != null && val.acceptsNulls())) && !elements.contains(null)) {
+			createDropDownOption(node, out, conv, null);			
+		}
 		for (Object object : elements) {
-			String val = conv.toString(object);
-			out.append("<option value=\"");
-			out.append(val);
-			out.append("\"");
-			String acval = binding.get(node.getId());
-			if (acval != null && acval.equals(val)) {
-				out.append(" selected=\"selected\"");
-			}
-			out.append(">");			
-			out.append(ViewUtils.getStringValue(object));
-			out.append("</option>");			
+			createDropDownOption(node, out, conv, object);			
 		}
 		out.append("</select>");		
 	}
 
+
+
+	private void createDropDownOption(FieldNode node, Writer out,
+			Converter conv, Object object) throws IOException {
+		String val = conv.toString(object);
+		out.append("<option value=\"");
+		out.append(val);
+		out.append("\"");
+		String acval = binding.get(node.getId());
+		if (acval != null && acval.equals(val)) {
+			out.append(" selected=\"selected\"");
+		}
+		out.append(">");
+		if (object != null) {
+			out.append(ViewUtils.getStringValue(object));
+		} else {
+			// TODO how to handle this in i18n?
+			out.append("None");
+		}
+		out.append("</option>");
+	}
+
 	protected void createTextField(FieldNode node, Writer out) throws IOException {
 		PropertyInfo property = node.getProperty();
 		int maxSize = findInputMaxSize(property);
@@ -268,15 +305,24 @@
 	public void setLists(Map<String, List<?>> lists) {
 		this.lists = lists;
 	}
-	
+
 	protected void createNameAndId(Node node, Writer out) throws IOException {
+		createNameAndId(node, out, null);
+	}
+	
+	
+	protected void createNameAndId(Node node, Writer out, String addToId) throws IOException {
 		out.append(" name=\"");
 		out.append(code);
 		out.append(".");
 		out.append(node.getId());
 		out.append("\" id=\"");
-		out.append(node.getId());
+		out.append(getId(node, addToId));
 		out.append('\"');		
 	}
 	
+	protected String getId(Node node, String addToId) {
+		return node.getId() + (addToId != null ? "-" + addToId : "");
+	}
+	
 }

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=696912&r1=696911&r2=696912&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 Thu Sep 18 20:49:56 2008
@@ -19,6 +19,8 @@
 import org.apache.magma.basics.LocalizableString;
 import org.apache.magma.basics.LocalizableStringWithSubject;
 import org.apache.magma.basics.MagmaException;
+import org.apache.magma.basics.utils.GenericClass;
+import org.apache.magma.basics.utils.GenericClass.MethodDef;
 import org.apache.magma.beans.BeanHandler;
 import org.apache.magma.beans.MagmaBeanSupport;
 import org.apache.magma.conversion.ConversionException;
@@ -120,12 +122,17 @@
 
 	protected HtmlProducer goToNext() {
 		WebHandler parent = getCreatingHandler();
-		Class<? extends WebHandler> parentClass = parent.getClass();
+		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());					
+		}
+
+		Method method = methods.get(0).getBaseMethod();
 		try {
-			Method method = parentClass.getMethod(this.next, this.bean.getClass());
 			return (HtmlProducer) method.invoke(parent, this.bean);
 		} catch (Exception e) {
-			throw new MagmaException(e, "Error invoking {0}.{1}({2}) after proper firm completition.", parentClass.getSimpleName(), this.next, this.bean.getClass().getSimpleName());
+			throw new MagmaException(e, "Error invoking {0}.{1}({2}) after proper firm completition.", parent.getClass(), this.next, this.bean.getClass());
 		}
 	}
 



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