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;