Author: ate
Date: Fri Jul  6 23:58:46 2012
New Revision: 1358473

URL: http://svn.apache.org/viewvc?rev=1358473&view=rev
Log:
RAVE-698: more Spring HMVC framework plumbing

Added:
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcDispatcherServlet.java
   (with props)
Modified:
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethod.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodHandlerAdapter.java

Added: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcDispatcherServlet.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcDispatcherServlet.java?rev=1358473&view=auto
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcDispatcherServlet.java
 (added)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcDispatcherServlet.java
 Fri Jul  6 23:58:46 2012
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.rave.portal.web.hmvc;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.web.servlet.DispatcherServlet;
+import org.springframework.web.servlet.ModelAndView;
+
+public class HmvcDispatcherServlet extends DispatcherServlet {
+
+    @Override
+    protected void render(ModelAndView mv, HttpServletRequest request, 
HttpServletResponse response) throws Exception {
+        Map<String, ModelAndView> ccmvMap = (Map<String, 
ModelAndView>)mv.getModelMap().get(HmvcHandlerMethod.MODEL_AND_VIEW);
+        if (ccmvMap != null) {
+            Map<String, Object> ccvrMap = new LinkedHashMap<String, Object>();
+            
mv.getModelMap().addAttribute(HmvcHandlerMethod.VIEW_RESPONSE_STATE, ccvrMap);
+            for (String name : ccmvMap.keySet()) {
+                // TODO: wrap response to buffer and capture its view render 
state
+                render(ccmvMap.get(name), request, response);
+                Object viewResponseState = null;
+                // TODO: retrieve viewResponseState from wrapped response
+                ccvrMap.put(name, viewResponseState);
+            }
+        }
+        super.render(mv, request, response);
+    }
+}

Propchange: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcDispatcherServlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcDispatcherServlet.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethod.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethod.java?rev=1358473&r1=1358472&r2=1358473&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethod.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethod.java
 Fri Jul  6 23:58:46 2012
@@ -25,6 +25,9 @@ import org.springframework.web.method.Ha
 
 public class HmvcHandlerMethod extends HandlerMethod {
 
+    public static final String VIEW_RESPONSE_STATE = 
HmvcHandlerMethod.class.getName()+".ViewResponseState";
+    public static final String MODEL_AND_VIEW = 
HmvcHandlerMethod.class.getName()+".ModelAndView";
+    
     protected Map<String, HmvcHandlerMethod> children;
     private BeanFactory beanFactory;
 

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodHandlerAdapter.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodHandlerAdapter.java?rev=1358473&r1=1358472&r2=1358473&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodHandlerAdapter.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcHandlerMethodHandlerAdapter.java
 Fri Jul  6 23:58:46 2012
@@ -16,44 +16,43 @@
  */
 package org.apache.rave.portal.web.hmvc;
 
+import java.util.LinkedHashMap;
+import java.util.Map;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.beans.factory.BeanFactoryAware;
-import org.springframework.beans.factory.InitializingBean;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter;
+import 
org.springframework.web.servlet.mvc.method.annotation.ForkedRequestMappingHandlerAdapter;
 
-public class HmvcHandlerMethodHandlerAdapter extends 
AbstractHandlerMethodAdapter implements BeanFactoryAware, InitializingBean {
+public class HmvcHandlerMethodHandlerAdapter extends 
ForkedRequestMappingHandlerAdapter {
 
     protected boolean supportsInternal(HandlerMethod handlerMethod) {
         return handlerMethod instanceof HmvcHandlerMethod;
     }
  
     @Override
-    public void afterPropertiesSet() throws Exception {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
     protected ModelAndView handleInternal(HttpServletRequest request, 
HttpServletResponse response,
             HandlerMethod handlerMethod) throws Exception {
         HmvcHandlerMethod hm = (HmvcHandlerMethod)handlerMethod;
-        // TODO
-        return null;
-    }
+        ModelAndView mv = super.handleInternal(request, response, 
handlerMethod);
 
-    @Override
-    protected long getLastModifiedInternal(HttpServletRequest request, 
HandlerMethod handlerMethod) {
-        // TODO Auto-generated method stub
-        return 0;
+        Map<String, ModelAndView> cmvMap = new 
LinkedHashMap<String,ModelAndView>();
+        for (String name : hm.getChildrenNames()) {
+            HmvcHandlerMethod chm = hm.getChild(name);
+            ModelAndView cmv = handleInternal(request, response, chm);
+            if (cmv != null) {
+                cmvMap.put(name, cmv);
+            }
+        }
+        
+        if (mv == null) {
+            mv = new ModelAndView();
+        }
+        
+        mv.getModelMap().addAttribute(HmvcHandlerMethod.MODEL_AND_VIEW, 
cmvMap);
+        
+        return mv;
     }
 }


Reply via email to