Author: ate
Date: Mon Sep 10 20:26:29 2012
New Revision: 1383099

URL: http://svn.apache.org/viewvc?rev=1383099&view=rev
Log:
RAVE-694: fixing up rave-web-hmvc, unit tests and demo-portal

Modified:
    
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/dispatcher-servlet.xml
    rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/routes.xml
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/NestedHandlerMethodHandlerMapping.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/RoutedRequestMappingHandlerMapping.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PagesConfig.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/xml/XmlPagesConfigManager.java
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/test-config.xml

Modified: 
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/dispatcher-servlet.xml
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/dispatcher-servlet.xml?rev=1383099&r1=1383098&r2=1383099&view=diff
==============================================================================
--- 
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/dispatcher-servlet.xml
 (original)
+++ 
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/dispatcher-servlet.xml
 Mon Sep 10 20:26:29 2012
@@ -148,18 +148,18 @@
   </bean>
 
   <!-- JCR|File based LOADING -->
-  <bean name="routedHandlerMapping" 
class="org.apache.rave.portal.web.mvc.RoutedRequestMappingHandlerMapping">
+  <bean name="nestedHandlerMethodHandlerMapping" 
class="org.apache.rave.portal.web.mvc.NestedHandlerMethodHandlerMapping">
     <property name="order" value="-1"/>
-    <property name="routesManager" ref="filePageRoutesManager"/>
-<!--
-    <property name="configurationName" value="myConfiguration"/>
-    <property name="configurationPath" value="/raveconfig"/>
-    <property name="credentials" ref="jcrCredentials"/>
-    <property name="lazyRepositoryFactory" ref="lazyRepositoryFactory"/>
--->
+    <property name="configManager" ref="xmlPagesConfigManager"/>
+  <!--
+      <property name="configurationName" value="myConfiguration"/>
+      <property name="configurationPath" value="/raveconfig"/>
+      <property name="credentials" ref="jcrCredentials"/>
+      <property name="lazyRepositoryFactory" ref="lazyRepositoryFactory"/>
+  -->
   </bean>
 
-  <bean id="filePageRoutesManager" 
class="org.apache.rave.portal.web.mvc.config.file.FilePageRoutesManager">
+  <bean id="xmlPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">
     <property name="configurationPath" value="/WEB-INF/page-definitions.xml"/>
     <property name="urlMappingsPath" value="/WEB-INF/routes.xml"/>
     <property name="refreshDelay" value="10000"/>

Modified: 
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/routes.xml
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/routes.xml?rev=1383099&r1=1383098&r2=1383099&view=diff
==============================================================================
--- 
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/routes.xml 
(original)
+++ 
rave/sandbox/content-services/demo-portal/src/main/webapp/WEB-INF/routes.xml 
Mon Sep 10 20:26:29 2012
@@ -21,5 +21,4 @@
   <route path="/home"          target="userPage" action="defaultPage"/>
   <route path="/page"          target="userPage" action="defaultPage"/>
   <route path="/page/{pageId}" target="userPage"/>
-
 </routes>

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/NestedHandlerMethodHandlerMapping.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/NestedHandlerMethodHandlerMapping.java?rev=1383099&r1=1383098&r2=1383099&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/NestedHandlerMethodHandlerMapping.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/NestedHandlerMethodHandlerMapping.java
 Mon Sep 10 20:26:29 2012
@@ -16,5 +16,99 @@
  */
 package org.apache.rave.portal.web.mvc;
 
+import java.lang.reflect.Method;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.rave.portal.web.mvc.config.PageDefinition;
+import org.apache.rave.portal.web.mvc.config.PageFragment;
+import org.apache.rave.portal.web.mvc.config.PagesConfig;
+import org.apache.rave.portal.web.mvc.config.Route;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
+
 public class NestedHandlerMethodHandlerMapping extends 
RoutedRequestMappingHandlerMapping {
-}
+
+    private static final Logger log = 
LoggerFactory.getLogger(NestedHandlerMethodHandlerMapping.class);
+
+    protected void processRoute(Route route) {
+        if (!StringUtils.isEmpty(route.getTarget())) {
+            PagesConfig pageConfig = (PagesConfig)getConfig();
+            PageDefinition pageDefinition = 
pageConfig.getPageDefinitions().get(route.getTarget());
+            if (pageDefinition != null) {
+                Class<?> controllerClass = 
getControllerClass(pageDefinition.getController());
+                if (controllerClass != null) {
+                    Method method = getActionOrDefaultMethod(controllerClass, 
route.getAction());
+                    if (method != null) {
+                        RequestMapping annotation = 
AnnotationUtils.findAnnotation(method, RequestMapping.class);
+                        RequestMappingInfo mappingInfo = 
createMappingInfo(annotation, route.getPath());
+                        try {
+                            Object handler = 
getApplicationContext().getBean(controllerClass);
+                            registerPageHandlerMethod(pageDefinition, handler, 
method, mappingInfo, route.getAction());
+                        }
+                        catch (Exception e) {
+                            log.error("Error", e);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    protected void registerPageHandlerMethod(PageDefinition pageDefinition, 
Object handler, Method method, RequestMappingInfo mapping, String action) {
+        NestedHandlerMethod nestedHandlerMethod = 
getNestedHandlerMethodForFragment(handler, method, pageDefinition, action);
+        registerHandlerMethod(handler, method, mapping);
+        // replace default HandlerMethod with our own nestedHandlerMethod
+        getHandlerMethodsInternal().put(mapping, nestedHandlerMethod);
+        if (logger.isInfoEnabled()) {
+            logger.info("Remapped \"" + mapping + "\" onto nested " + 
nestedHandlerMethod);
+        }
+    }
+
+    private NestedHandlerMethod getNestedHandlerMethodForFragment(Object 
handler, Method method, PageFragment fragment, String action) {
+        NestedHandlerConfigImpl config = new NestedHandlerConfigImpl();
+        config.setName(fragment.getName());
+        config.setView(fragment.getViewName());
+        config.setMethod(new NestedHandlerMethod(handler, method, config));
+
+        final List<PageFragment> children = fragment.getChildren();
+        if (children != null ) {
+            for (PageFragment child : children) {
+                Class<?> controllerClass = 
getControllerClass(child.getController());
+                if (controllerClass != null) {
+                    Method childMethod = 
getActionOrDefaultMethod(controllerClass, action);
+                    if (method != null) {
+                        Object ccInstance;
+                        try {
+                            ccInstance = 
getApplicationContext().getBean(controllerClass);
+                        } catch (Exception e) {
+                            throw new IllegalStateException("Cannot 
instantiate found Child Controller");
+                        }
+                        log.info("@@@ Registering child component [{}] for 
parent [{}] ", child.getName(), fragment.getName());
+                        NestedHandlerConfigImpl childConfig = 
getNestedHandlerMethodForFragment(ccInstance, childMethod, child, 
action).getConfiguration();
+                        childConfig.setParent(config);
+                        config.getChildren().put(child.getName(), childConfig);
+                    }
+                }
+            }
+        }
+        return config.getMethod();
+    }
+
+    @Override
+    protected HandlerMethod getHandlerInternal(HttpServletRequest request) 
throws Exception {
+        HandlerMethod handlerMethod = super.getHandlerInternal(request);
+
+        if (handlerMethod != null && handlerMethod instanceof 
NestedHandlerMethod) {
+            // we have a NestedHandlerMethod match
+            request.setAttribute(NestedHandlerMethod.class.getName(), 
Boolean.TRUE);
+        }
+        return handlerMethod;
+    }
+}
\ No newline at end of file

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/RoutedRequestMappingHandlerMapping.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/RoutedRequestMappingHandlerMapping.java?rev=1383099&r1=1383098&r2=1383099&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/RoutedRequestMappingHandlerMapping.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/RoutedRequestMappingHandlerMapping.java
 Mon Sep 10 20:26:29 2012
@@ -28,9 +28,8 @@ import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.rave.portal.web.mvc.config.ConfigManager;
-import org.apache.rave.portal.web.mvc.config.PageDefinition;
-import org.apache.rave.portal.web.mvc.config.PageFragment;
 import org.apache.rave.portal.web.mvc.config.Config;
 import org.apache.rave.portal.web.mvc.config.Route;
 import org.slf4j.Logger;
@@ -116,7 +115,7 @@ public class RoutedRequestMappingHandler
     @Override
     protected void initHandlerMethods() {
         config = configManager.getConfig();
-        processRoutes(config);
+        processConfig();
     }
 
     protected void reloadConfigIfNeeded() {
@@ -127,7 +126,7 @@ public class RoutedRequestMappingHandler
                 (config != latestConfiguration)) {
             synchronized (configManager) {
                config = latestConfiguration;
-               processRoutes(config);
+               processConfig();
             }
         }
     }
@@ -189,7 +188,7 @@ public class RoutedRequestMappingHandler
         return actionMethods.get("default");
     }
 
-    private void processRoutes(Config config) {
+    protected void processConfig() {
 
         // reset
         getHandlerMethodsInternal().clear();
@@ -197,72 +196,29 @@ public class RoutedRequestMappingHandler
 
         if (config != null) {
             for (Route route : config.getRoutes()) {
-
-                // TODO rewrite to find the correct Router OR PageRouter
-//            PageDefinition pageDefinition = route.getPageDefinition();
-//            final String controller = pageDefinition.getController();
-//            log.info("Processing controller [ {} ]", controller);
-//            // TODO: handle exception, class not found etc.
-//            Class<?> controllerClass = getControllerClass(controller);
-//            if (controllerClass != null) {
-//                Method method = getActionOrDefaultMethod(controllerClass, 
route.getAction());
-//                if (method != null) {
-//                    RequestMapping annotation = 
AnnotationUtils.findAnnotation(method, RequestMapping.class);
-//                    RequestMappingInfo mappingInfo = 
createMappingInfo(annotation, route.getPath());
-//                    try {
-//                        Object handler = 
getApplicationContext().getBean(controllerClass);
-//                        registerPageHandlerMethod(pageDefinition, handler, 
method, mappingInfo, route.getAction());
-//                    } catch (Exception e) {
-//                        log.error("Error", e);
-//                    }
-//                }
-//            }
+                processRoute(route);
             }
         }
     }
 
     protected void processRoute(Route route) {
-
-    }
-
-    protected void registerPageHandlerMethod(PageDefinition pageDefinition, 
Object handler, Method method, RequestMappingInfo mapping, String action) {
-        NestedHandlerMethod nestedHandlerMethod = 
getNestedHandlerMethodForFragment(handler, method, pageDefinition, action);
-        registerHandlerMethod(handler, method, mapping);
-        // replace default HandlerMethod with our own nestedHandlerMethod
-        getHandlerMethodsInternal().put(mapping, nestedHandlerMethod);
-        if (logger.isInfoEnabled()) {
-            logger.info("Remapped \"" + mapping + "\" onto nested " + 
nestedHandlerMethod);
-        }
-    }
-
-    private NestedHandlerMethod getNestedHandlerMethodForFragment(Object 
handler, Method method, PageFragment fragment, String action) {
-        NestedHandlerConfigImpl config = new NestedHandlerConfigImpl();
-        config.setName(fragment.getName());
-        config.setView(fragment.getViewName());
-        config.setMethod(new NestedHandlerMethod(handler, method, config));
-
-        final List<PageFragment> children = fragment.getChildren();
-        if (children != null ) {
-            for (PageFragment child : children) {
-                Class<?> controllerClass = 
getControllerClass(child.getController());
-                if (controllerClass != null) {
-                    Method childMethod = 
getActionOrDefaultMethod(controllerClass, action);
-                    if (method != null) {
-                        Object ccInstance;
-                        try {
-                            ccInstance = 
getApplicationContext().getBean(controllerClass);
-                        } catch (Exception e) {
-                            throw new IllegalStateException("Cannot 
instantiate found Child Controller");
-                        }
-                        log.info("@@@ Registering child component [{}] for 
parent [{}] ", child.getName(), fragment.getName());
-                        NestedHandlerConfigImpl childConfig = 
getNestedHandlerMethodForFragment(ccInstance, childMethod, child, 
action).getConfiguration();
-                        childConfig.setParent(config);
-                        config.getChildren().put(child.getName(), childConfig);
+        final String controller = route.getTarget();
+        if (!StringUtils.isEmpty(controller)) {
+            Class<?> controllerClass = getControllerClass(controller);
+            if (controllerClass != null) {
+                Method method = getActionOrDefaultMethod(controllerClass, 
route.getAction());
+                if (method != null) {
+                    RequestMapping annotation = 
AnnotationUtils.findAnnotation(method, RequestMapping.class);
+                    RequestMappingInfo mappingInfo = 
createMappingInfo(annotation, route.getPath());
+                    try {
+                        Object handler = 
getApplicationContext().getBean(controllerClass);
+                        registerHandlerMethod(handler, method, mappingInfo);
+                    } catch (Exception e) {
+                        log.error("Error", e);
                     }
                 }
             }
         }
-        return config.getMethod();
     }
 
     
//*************************************************************************************
@@ -295,7 +251,7 @@ public class RoutedRequestMappingHandler
         return null;
     }
 
-    private RequestMappingInfo createMappingInfo(RequestMapping annotation, 
String path) {
+    protected RequestMappingInfo createMappingInfo(RequestMapping annotation, 
String path) {
         final String[] patterns = {path};
         log.info("Creating mapping for patterns:[{}]", patterns);
         final PatternsRequestCondition requestCondition = new 
PatternsRequestCondition(
@@ -310,17 +266,13 @@ public class RoutedRequestMappingHandler
                 null);
     }
 
-    public void setConfigManager(ConfigManager configManager) {
-        this.configManager = configManager;
-    }
-
     @Override
     protected void handleMatch(RequestMappingInfo info, String lookupPath, 
HttpServletRequest request) {
         super.handleMatch(info, lookupPath, request);
         request.setAttribute(NestedHandlerMethod.REQUEST_MAPPING_INFO, info);
     }
 
-        @Override
+    @Override
     protected HandlerMethod getHandlerInternal(HttpServletRequest request) 
throws Exception {
 
         reloadConfigIfNeeded();
@@ -331,7 +283,6 @@ public class RoutedRequestMappingHandler
         }
 
         HandlerMethod handlerMethod = lookupHandlerMethod(lookupPath, request);
-        RequestMappingInfo mapping = 
(RequestMappingInfo)request.getAttribute(NestedHandlerMethod.REQUEST_MAPPING_INFO);
 
         if (logger.isDebugEnabled()) {
             if (handlerMethod != null) {
@@ -340,11 +291,18 @@ public class RoutedRequestMappingHandler
                 logger.debug("Did not find handler method for [" + lookupPath 
+ ']');
             }
         }
-
-        if (handlerMethod != null && mapping != null) {
-            // we have a NestedHandlerMethod match
-            request.setAttribute(NestedHandlerMethod.class.getName(), 
Boolean.TRUE);
-        }
         return (handlerMethod != null) ? 
handlerMethod.createWithResolvedBean() : null;
     }
+
+    public void setConfigManager(ConfigManager configManager) {
+        this.configManager = configManager;
+    }
+
+    protected ConfigManager getConfigManager() {
+        return configManager;
+    }
+
+    protected Config getConfig() {
+        return config;
+    }
 }
\ No newline at end of file

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PagesConfig.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PagesConfig.java?rev=1383099&r1=1383098&r2=1383099&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PagesConfig.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PagesConfig.java
 Mon Sep 10 20:26:29 2012
@@ -18,9 +18,9 @@
  */
 package org.apache.rave.portal.web.mvc.config;
 
-import java.util.List;
+import java.util.Map;
 
 public interface PagesConfig extends Config {
 
-    List<PageDefinition> getPageDefinitions();
+    Map<String, PageDefinition> getPageDefinitions();
 }

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/xml/XmlPagesConfigManager.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/xml/XmlPagesConfigManager.java?rev=1383099&r1=1383098&r2=1383099&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/xml/XmlPagesConfigManager.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/xml/XmlPagesConfigManager.java
 Mon Sep 10 20:26:29 2012
@@ -21,7 +21,9 @@ package org.apache.rave.portal.web.mvc.c
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
@@ -51,15 +53,15 @@ public class XmlPagesConfigManager imple
     private static class PagesConfigImpl implements PagesConfig {
 
         private List<Route> routes;
-        private List<PageDefinition> pageDefinitions;
+        private Map<String, PageDefinition> pageDefinitions;
 
-        public PagesConfigImpl(List<Route> routes, List<PageDefinition> 
pageDefinitions) {
+        public PagesConfigImpl(List<Route> routes, Map<String, PageDefinition> 
pageDefinitions) {
             this.routes = routes;
             this.pageDefinitions = pageDefinitions;
         }
 
         @Override
-        public List<PageDefinition> getPageDefinitions() {
+        public Map<String, PageDefinition> getPageDefinitions() {
             return pageDefinitions;
         }
 
@@ -125,6 +127,10 @@ public class XmlPagesConfigManager imple
             if (pageDefinitions == null) {
                 throw new InvalidConfigurationException("Provided 
PageDefinitions was null");
             }
+            Map<String, PageDefinition> pageDefinitionMap = new 
HashMap<String, PageDefinition>();
+            for (PageDefinition pd : pageDefinitions.getPageDefinitions()) {
+                pageDefinitionMap.put(pd.getName(), pd);
+            }
             log.info("Loading configuration: {}", urlMappingsPath);
             InputStream is = null;
             try {
@@ -139,7 +145,7 @@ public class XmlPagesConfigManager imple
                 JAXBContext context = JAXBContext.newInstance(XmlRoutes.class);
                 Unmarshaller unmarshaller = context.createUnmarshaller();
                 final XmlRoutes routes = (XmlRoutes) 
unmarshaller.unmarshal(is);
-                this.config = new PagesConfigImpl(routes.getRoutes(), 
pageDefinitions.getPageDefinitions());
+                this.config = new PagesConfigImpl(routes.getRoutes(), 
pageDefinitionMap);
                 lastBuildTime = System.currentTimeMillis();
                 return this.config;
             } catch (JAXBException e) {

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/test-config.xml
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/resources/test-config.xml?rev=1383099&r1=1383098&r2=1383099&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/test-config.xml 
(original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/test-config.xml 
Mon Sep 10 20:26:29 2012
@@ -40,10 +40,9 @@
 
 
   <!-- FILE LOADING -->
-  <bean name="routedHandlerMapping" 
class="org.apache.rave.portal.web.mvc.RoutedRequestMappingHandlerMapping">
+  <bean name="nestedHandlerMethodHandlerMapping" 
class="org.apache.rave.portal.web.mvc.NestedHandlerMethodHandlerMapping">
     <property name="order" value="-1"/>
     <property name="configManager" ref="xmlPagesConfigManager"/>
-
   </bean>
 
   <bean id="xmlPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">


Reply via email to