You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by at...@apache.org on 2012/08/10 18:27:29 UTC

svn commit: r1371760 - in /rave/sandbox/content-services/rave-web-hmvc/src: main/java/org/apache/rave/portal/web/hmvc/ main/java/org/apache/rave/portal/web/hmvc/example/ test/java/org/apache/rave/portal/web/hmvc/

Author: ate
Date: Fri Aug 10 16:27:29 2012
New Revision: 1371760

URL: http://svn.apache.org/viewvc?rev=1371760&view=rev
Log:
RAVE-698: more fixes and cleanup

Modified:
    rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMapping.java
    rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMappingByConfig.java
    rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/example/MyPageController.java
    rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMappingByConfigTest.java

Modified: rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMapping.java
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMapping.java?rev=1371760&r1=1371759&r2=1371760&view=diff
==============================================================================
--- rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMapping.java (original)
+++ rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMapping.java Fri Aug 10 16:27:29 2012
@@ -51,7 +51,7 @@ public class HmvcHandlerMethodMapping ex
         return AnnotationUtils.findAnnotation(method, Hmvc.class) != null;
     }
 
-    private Class<?> getBeanType(Object handler) {
+    protected Class<?> getBeanType(Object handler) {
         Class<?> beanType = (handler instanceof String) ?
                 getApplicationContext().getType((String) handler) : handler.getClass();
 

Modified: rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMappingByConfig.java
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMappingByConfig.java?rev=1371760&r1=1371759&r2=1371760&view=diff
==============================================================================
--- rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMappingByConfig.java (original)
+++ rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMappingByConfig.java Fri Aug 10 16:27:29 2012
@@ -23,7 +23,6 @@ import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.apache.rave.jcr.config.model.JcrPageConfiguration;
 import org.apache.rave.jcr.config.model.JcrPageDefinition;
@@ -35,10 +34,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.core.annotation.AnnotationUtils;
 import org.springframework.util.ClassUtils;
-import org.springframework.util.ReflectionUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.method.HandlerMethodSelector;
 import org.springframework.web.servlet.mvc.condition.ConsumesRequestCondition;
 import org.springframework.web.servlet.mvc.condition.HeadersRequestCondition;
 import org.springframework.web.servlet.mvc.condition.ParamsRequestCondition;
@@ -105,42 +102,31 @@ public class HmvcHandlerMethodMappingByC
         for (PageDefinition pageDefinition : pageDefinitions) {
             final String controller = pageDefinition.getController();
             log.info("Processing controller [ {} ]", controller);
-            final Class<?> clazz = classFromString(controller);
-            if (clazz != null) {
-                final Class<?> userType = ClassUtils.getUserClass(clazz);
-                Set<Method> methods = HandlerMethodSelector.selectMethods(userType, new ReflectionUtils.MethodFilter() {
-                    public boolean matches(Method method) {
-                        final RequestMapping annotation = AnnotationUtils.findAnnotation(method, RequestMapping.class);
-                        return annotation != null;
-                    }
-                });
-                // take first
-                if (methods.iterator().hasNext()) {
-                    if (methods.size() > 1) {
-                        log.warn("Found more than one @RequestMapping annotated methods: we'll use first one");
-                    }
-                    final Method method = methods.iterator().next();
-                    final RequestMapping annotation = AnnotationUtils.findAnnotation(method, RequestMapping.class);
-                    final RequestMappingInfo mappingInfo = createMappingInfo(annotation, pageDefinition);
+            // TODO: handle exception, class not found etc.
+            Class<?> controllerClass = getControllerClass(controller);
+            if (controllerClass != null) {
+                Method method = getRenderMethod(controllerClass);
+                if (method != null) {
+                    RequestMapping annotation = AnnotationUtils.findAnnotation(method, RequestMapping.class);
+                    RequestMappingInfo mappingInfo = createMappingInfo(annotation, pageDefinition);
                     try {
-                        final Object handler = userType.newInstance();
-                        registerFragment(pageDefinition, handler, method, mappingInfo);
+                        Object handler = controllerClass.newInstance();
+                        registerPageHandlerMethod(pageDefinition, handler, method, mappingInfo);
                     } catch (InstantiationException e) {
                         log.error("Error", e);
                     } catch (IllegalAccessException e) {
                         log.error("Error", e);
                     }
-
                 }
             }
         }
     }
 
 
-    protected void registerFragment(PageFragment fragment, Object handler, Method method, RequestMappingInfo mapping) {
+    protected void registerPageHandlerMethod(PageDefinition pageDefinition, Object handler, Method method, RequestMappingInfo mapping) {
         registerHandler(handler, method, mapping);
-        HandlerMethod handlerMethod = super.getHandlerMethods().get(mapping);
-        getHmvcHandlerMethods().put(handlerMethod, getHmvcHandlerMethodForFragment(handler, method, fragment));
+        HandlerMethod handlerMethod = getHandlerMethods().get(mapping);
+        getHmvcHandlerMethods().put(handlerMethod, getHmvcHandlerMethodForFragment(handler, method, pageDefinition));
     }
 
 
@@ -148,22 +134,20 @@ public class HmvcHandlerMethodMappingByC
         Map<String, HmvcHandlerMethod> controllerMethods = new HashMap<String, HmvcHandlerMethod>();
         final List<PageFragment> children = fragment.getChildren();
         for (PageFragment child : children) {
-            Class<?> clazz = classFromString(child.getController());
-            if (clazz == null) {
-                continue;
-            }
-            Method renderMethod = getRenderMethod(clazz);
-            if (renderMethod != null) {
-                Object ccInstance;
-                try {
-                    ccInstance = clazz.newInstance();
-                } catch (Exception e) {
-                    throw new IllegalStateException("Cannot instantiate found CController");
+            Class<?> controllerClass = getControllerClass(child.getController());
+            if (controllerClass != null) {
+                Method renderMethod = getRenderMethod(controllerClass);
+                if (renderMethod != null) {
+                    Object ccInstance;
+                    try {
+                        ccInstance = controllerClass.newInstance();
+                    } catch (Exception e) {
+                        throw new IllegalStateException("Cannot instantiate found CController");
+                    }
+                    log.info("@@@ Registering child component [{}] for parent [{}] ", child.getName(), fragment.getName());
+                    controllerMethods.put(child.getName(), getHmvcHandlerMethodForFragment(ccInstance, renderMethod, child));
                 }
-                log.info("@@@ Registering child component [{}] for parent [{}] ", child.getName(), fragment.getName());
-                controllerMethods.put(child.getName(), getHmvcHandlerMethodForFragment(ccInstance, renderMethod, child));
             }
-
         }
         return new HmvcHandlerMethod(handler, method, controllerMethods);
     }
@@ -172,6 +156,11 @@ public class HmvcHandlerMethodMappingByC
     //*************************************************************************************
     // UTILITIES
     //*************************************************************************************
+    protected Class<?> getControllerClass(String controller) {
+        Class<?> userType = classFromString(controller);
+        return userType != null ? ClassUtils.getUserClass(userType) : null;
+    }
+
     private Class<?> classFromString(String controller) {
         try {
             return Class.forName(controller);

Modified: rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/example/MyPageController.java
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/example/MyPageController.java?rev=1371760&r1=1371759&r2=1371760&view=diff
==============================================================================
--- rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/example/MyPageController.java (original)
+++ rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/example/MyPageController.java Fri Aug 10 16:27:29 2012
@@ -31,7 +31,22 @@ public class MyPageController {
             @CController(name = "body", type = MyBodyController.class),
             @CController(name = "footer", type = MyFooterController.class)
     })
-    public String render() {
+    public String renderPage() {
+        return "mypage";
+    }
+
+    @RequestMapping("/mypage1")
+    @HController(controllers = {
+            @CController(name = "head", type = MyHeaderController.class),
+            @CController(name = "body", type = MyContentController.class),
+            @CController(name = "footer", type = MyFooterController.class)
+    })
+    public String renderPage1() {
+        return "mypage";
+    }
+
+    @Hmvc @RequestMapping
+    public String renderPage2() {
         return "mypage";
     }
 }

Modified: rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMappingByConfigTest.java
URL: http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMappingByConfigTest.java?rev=1371760&r1=1371759&r2=1371760&view=diff
==============================================================================
--- rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMappingByConfigTest.java (original)
+++ rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodMappingByConfigTest.java Fri Aug 10 16:27:29 2012
@@ -95,9 +95,11 @@ public class HmvcHandlerMethodMappingByC
     private Object getHandler(HttpServletRequest request) throws Exception {
         Map<String, HandlerMapping> map = applicationContext.getBeansOfType(HandlerMapping.class);
         for (HandlerMapping mapping : map.values()) {
-            HandlerExecutionChain chain = mapping.getHandler(request);
-            if (chain != null) {
-                return chain.getHandler();
+            if (mapping instanceof HmvcHandlerMethodMapping) {
+                HandlerExecutionChain chain = mapping.getHandler(request);
+                if (chain != null) {
+                    return chain.getHandler();
+                }
             }
         }
         return null;