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">