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/17 03:30:30 UTC

svn commit: r881104 - in /labs/magma/trunk: foundation-website/src/main/java/org/apache/magma/website/utils/ website-beansview/src/main/java/org/apache/magma/website/beansview/

Author: simoneg
Date: Tue Nov 17 02:30:29 2009
New Revision: 881104

URL: http://svn.apache.org/viewvc?rev=881104&view=rev
Log:
LABS-221 : relax some LinkHelper checks, cause a FormAction does not always result in a real link

Modified:
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.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/ShowList.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.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=881104&r1=881103&r2=881104&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 Tue Nov 17 02:30:29 2009
@@ -36,6 +36,7 @@
 	
 	private String baseMethod;
 	private Converter[] converters;
+	private Class<?>[] paramTypes;
 	
 	public LinkHelper(Method method) {
 		this(method.getName(), method.getParameterTypes());
@@ -50,13 +51,15 @@
 		this.baseMethod = methodName;
 		if (parameters == null) {
 			converters = new Converter[0];
+			paramTypes = new Class<?>[0];
 		} else {
 			converters = new Converter[parameters.length];
 			for (int i = 0; i < parameters.length; i++) {
 				converters[i] = Converters.getConverterFor(parameters[i]);
-				if (converters[i] == null) throw new MagmaException("Cannot find a converter for {0}, needed to create link for {1}", parameters[i], methodName);
 			}
+			paramTypes = parameters;
 		}
+		
 	}
 	
 	public String makeLink(Object... params) {
@@ -91,16 +94,25 @@
 	 * @param handler A WebHandler to check against.
 	 */
 	public void checkAgainst(Class<? extends WebHandler> handlerClass) {
-		findMethod(handlerClass);
+		findMethod(handlerClass, true);
+	}
+	
+	/**
+	 * Check if given handler has a method for this "internal" link, without care for converters.
+	 * @param handler A WebHandler to check against.
+	 */
+	public void checkAgainstNoConverter(Class<? extends WebHandler> handlerClass) {
+		findMethod(handlerClass, 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
 	 * @return A method in the specified class (or superclass)
 	 * @throws MagmaException if a method is not found or if more than one method is found.
 	 */
-	public Method findMethod(Class<? extends WebHandler> handlerClass) {
+	public Method findMethod(Class<? extends WebHandler> handlerClass, boolean withConversion) {
 		GenericClass gc = GenericClass.forClass(handlerClass);
 		
 		// search for name
@@ -123,11 +135,26 @@
 			Class[] params = GenericClass.toRawClasses(genparams);
 			if (params.length != converters.length) continue;
 			boolean ok = true;
-			for (int i = 0; i < params.length; i++) {
-				if (!converters[i].converts(params[i])) {
-					ok = false;
-					break;
+			if (withConversion) {
+				// Check converters
+				for (int i = 0; i < params.length; i++) {
+					if (converters[i] == null) {
+						throw new MagmaException("Cannot find a converter suitable for {0} for creating links", params[i]);
+					}
+					if (!converters[i].converts(params[i])) {
+						ok = false;
+						break;
+					}
+				}
+			} else {
+				// Check registered types
+				for (int i = 0; i < params.length; i++) {
+					if (!params[i].isAssignableFrom(paramTypes[i])) {
+						ok = false;
+						break;
+					}
 				}
+				
 			}
 			if (ok) {
 				if (found == null) {

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=881104&r1=881103&r2=881104&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 Tue Nov 17 02:30:29 2009
@@ -42,15 +42,6 @@
 	}
 	
 	
-	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;
@@ -96,14 +87,19 @@
 		}		
 	}
 	
-	public void validate(Class<? extends WebHandler> against, Class<?> beanClass) {
+	public void checkAgainst(Class<? extends WebHandler> against, Class<?> beanClass) {
 		createHelper(beanClass);
 		linkHelper.checkAgainst(against);
 	}
+
+	public void checkAgainstNoConverter(Class<? extends WebHandler> against, Class<?> beanClass) {
+		createHelper(beanClass);
+		linkHelper.checkAgainstNoConverter(against);
+	}
 	
 	public Method getMethod(Class<? extends WebHandler> on, MagmaBeanSupport bean) {
 		createHelper(bean.getClass());
-		return linkHelper.findMethod(on);
+		return linkHelper.findMethod(on, false);
 	}
 	
 	public String getMethodUrl(MagmaBeanSupport 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=881104&r1=881103&r2=881104&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 Tue Nov 17 02:30:29 2009
@@ -106,7 +106,7 @@
 		}
 		if (this.actions != null) {
 			for (FormAction action : this.actions) {
-				action.validate(referringHandler.getClass(), this.myclass);
+				action.checkAgainst(referringHandler.getClass(), this.myclass);
 			}
 		}
 		

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=881104&r1=881103&r2=881104&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 Tue Nov 17 02:30:29 2009
@@ -117,7 +117,7 @@
 		// Check validity of actions
 		if (this.actions != null) {
 			for (FormAction action : this.actions) {
-				action.validate(getCreatingHandler().getClass(), bean.getClass());
+				action.checkAgainstNoConverter(getCreatingHandler().getClass(), bean.getClass());
 			}
 		}
 		parametrize(prodHeader);



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