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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to