Author: marijan
Date: Thu Jul 19 09:12:51 2012
New Revision: 1363268

URL: http://svn.apache.org/viewvc?rev=1363268&view=rev
Log:
git merge wrapper_skeleton

Added:
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/filter/
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/filter/HmvcFilter.java
   (contents, props changed)
      - copied, changed from r1361937, 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcResponseHolder.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/servlet/
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/servlet/HmvcDispatcherServlet.java
   (contents, props changed)
      - copied, changed from r1361937, 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcDispatcherServlet.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/HmvcServletRequest.java
   (with props)
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/HmvcServletResponse.java
   (with props)
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/ResponseHolder.java
   (with props)
Removed:
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcDispatcherServlet.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcResponseHolder.java
Modified:
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/CController.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HController.java
    
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/example/MyBodyController.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/main/java/org/apache/rave/portal/web/hmvc/tags/IncludeComponentTag.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/resources/META-INF/hmvc.tld

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/CController.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/CController.java?rev=1363268&r1=1363267&r2=1363268&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/CController.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/CController.java
 Thu Jul 19 09:12:51 2012
@@ -26,6 +26,9 @@ import java.lang.annotation.Target;
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 public @interface CController {
-  String name();
-  Class<?> type();
+    String name();
+
+    String value() default "";
+
+    Class<?> type();
 }

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HController.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HController.java?rev=1363268&r1=1363267&r2=1363268&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HController.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HController.java
 Thu Jul 19 09:12:51 2012
@@ -29,5 +29,7 @@ import org.springframework.stereotype.Co
 @Documented
 @Controller
 public @interface HController {
-  CController[] value() default {};
+    CController[] controllers() default {};
+
+    String value() default "";
 }

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=1363268&r1=1363267&r2=1363268&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
 Thu Jul 19 09:12:51 2012
@@ -87,8 +87,8 @@ public class HmvcHandlerMethodMapping ex
         Class<?> handlerType = getBeanType(handler);
         HController hcontroller = AnnotationUtils.findAnnotation(handlerType, 
HController.class);
         Map<String, HmvcHandlerMethod> ccontrollerMethods = new 
HashMap<String, HmvcHandlerMethod>();
-        if (!ObjectUtils.isEmpty(hcontroller.value())) {
-            for (CController cc : hcontroller.value()) {
+        if (!ObjectUtils.isEmpty(hcontroller.controllers())) {
+            for (CController cc : hcontroller.controllers()) {
                 Method ccrenderMethod = getCCRenderMethod(cc.type());
                 if (ccrenderMethod != null) {
                     // should do this better, caching etc.
@@ -102,7 +102,7 @@ public class HmvcHandlerMethodMapping ex
                 }
             }
         }
-        Object handlerBean = null;
+        Object handlerBean;
         if (handler instanceof String) {
             try {
                 handlerBean = handlerType.newInstance();

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/example/MyBodyController.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/example/MyBodyController.java?rev=1363268&r1=1363267&r2=1363268&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/example/MyBodyController.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/example/MyBodyController.java
 Thu Jul 19 09:12:51 2012
@@ -20,9 +20,9 @@ import org.apache.rave.portal.web.hmvc.C
 import org.apache.rave.portal.web.hmvc.CController;
 import org.apache.rave.portal.web.hmvc.HController;
 
-@HController({
-    @CController(name="menu", type=MyMenuController.class),
-    @CController(name="content", type=MyContentController.class)
+@HController(controllers = {
+        @CController(name = "menu", type = MyMenuController.class),
+        @CController(name = "content", type = MyContentController.class)
 })
 public class MyBodyController {
 

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=1363268&r1=1363267&r2=1363268&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
 Thu Jul 19 09:12:51 2012
@@ -20,16 +20,16 @@ import org.apache.rave.portal.web.hmvc.C
 import org.apache.rave.portal.web.hmvc.HController;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-@HController({
-    @CController(name="head", type=MyHeaderController.class),
-    @CController(name="body", type=MyBodyController.class),
-    @CController(name="footer", type=MyFooterController.class)
+@HController(controllers = {
+        @CController(name = "head", type = MyHeaderController.class),
+        @CController(name = "body", type = MyBodyController.class),
+        @CController(name = "footer", type = MyFooterController.class)
 })
 @RequestMapping("/mypage")
 public class MyPageController {
 
     @RequestMapping
     public String render() {
-     return "mypage";   
+        return "mypage";
     }
 }

Copied: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/filter/HmvcFilter.java
 (from r1361937, 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcResponseHolder.java)
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/filter/HmvcFilter.java?p2=rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/filter/HmvcFilter.java&p1=rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcResponseHolder.java&r1=1361937&r2=1363268&rev=1363268&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcResponseHolder.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/filter/HmvcFilter.java
 Thu Jul 19 09:12:51 2012
@@ -17,19 +17,33 @@
  * under the License.
  */
 
-package org.apache.rave.portal.web.hmvc;
+package org.apache.rave.portal.web.hmvc.filter;
 
+import java.io.IOException;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.rave.portal.web.hmvc.support.HmvcServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.web.filter.OncePerRequestFilter;
 
 /**
- * Wraps HttpRequest, so we can capture sub-components output.
- *
  * @version "$Id$"
  */
-public class HmvcResponseHolder {
+public class HmvcFilter extends OncePerRequestFilter {
+
+    private static Logger log = LoggerFactory.getLogger(HmvcFilter.class);
 
-    private static Logger log = 
LoggerFactory.getLogger(HmvcResponseHolder.class);
 
-    private boolean flushed;
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, 
HttpServletResponse response, FilterChain filterChain) throws ServletException, 
IOException {
+        log.info("@HMVC-FILTER");
+        HmvcServletRequest servletRequest = new HmvcServletRequest(request);
+        servletRequest.addHeader("hmvc", "true");
+        filterChain.doFilter(request, response);
+    }
 }

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

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

Copied: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/servlet/HmvcDispatcherServlet.java
 (from r1361937, 
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/servlet/HmvcDispatcherServlet.java?p2=rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/servlet/HmvcDispatcherServlet.java&p1=rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcDispatcherServlet.java&r1=1361937&r2=1363268&rev=1363268&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/HmvcDispatcherServlet.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/servlet/HmvcDispatcherServlet.java
 Thu Jul 19 09:12:51 2012
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.rave.portal.web.hmvc;
+package org.apache.rave.portal.web.hmvc.servlet;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -22,11 +22,15 @@ import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.rave.portal.web.hmvc.HmvcHandlerMethod;
+import org.apache.rave.portal.web.hmvc.support.HmvcServletRequest;
+import org.apache.rave.portal.web.hmvc.support.HmvcServletResponse;
 import org.springframework.web.servlet.DispatcherServlet;
 import org.springframework.web.servlet.ModelAndView;
 
 public class HmvcDispatcherServlet extends DispatcherServlet {
 
+
     private static final long serialVersionUID = 1L;
 
     @Override
@@ -37,13 +41,14 @@ public class HmvcDispatcherServlet exten
             Map<String, Object> ccvrMap = new LinkedHashMap<String, Object>();
             
mv.getModelMap().addAttribute(HmvcHandlerMethod.VIEW_RESPONSE_STATE, ccvrMap);
             for (Map.Entry<String, ModelAndView> entry : ccmvMap.entrySet()) {
-                // TODO: wrap response to buffer and capture its view render 
state
-                render(entry.getValue(), request, response);
-                Object viewResponseState = null;
-                // TODO: retrieve viewResponseState from wrapped response
-                ccvrMap.put(entry.getKey(), viewResponseState);
+                HttpServletRequest servletRequest = new 
HmvcServletRequest(request);
+                HmvcServletResponse servletResponse = new 
HmvcServletResponse(response);
+                render(entry.getValue(), servletRequest, servletResponse);
+                ccvrMap.put(entry.getKey(), 
servletResponse.getResponseHolder());
             }
         }
-        super.render(mv, request, response);
+        HttpServletRequest servletRequest = new HmvcServletRequest(request);
+        HttpServletResponse servletResponse = new 
HmvcServletResponse(response);
+        super.render(mv, servletRequest, servletResponse);
     }
 }

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

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

Added: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/HmvcServletRequest.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/HmvcServletRequest.java?rev=1363268&view=auto
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/HmvcServletRequest.java
 (added)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/HmvcServletRequest.java
 Thu Jul 19 09:12:51 2012
@@ -0,0 +1,132 @@
+/*
+ * 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.support;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Request wrapper used within HMVC framework.
+ *
+ * @version "$Id$"
+ */
+public class HmvcServletRequest extends HttpServletRequestWrapper {
+
+
+    private static final Logger log = 
LoggerFactory.getLogger(HmvcServletRequest.class);
+    private String componentRequestUri;
+    private boolean component;
+    private Map<String, String> headers;
+
+    /**
+     * Constructs a request object wrapping the given request.
+     *
+     * @throws IllegalArgumentException if the request is null
+     */
+    public HmvcServletRequest(HttpServletRequest request) {
+        super(request);
+        headers = new HashMap<String, String>();
+    }
+
+    @Override
+    public String getMethod() {
+        return super.getMethod();
+    }
+
+
+    public void setComponentRequestUri(final String uri) {
+        component = true;
+        componentRequestUri = uri;
+    }
+
+
+    public boolean isComponent() {
+        return component;
+    }
+
+    public void setComponent(boolean component) {
+        this.component = component;
+    }
+
+    @Override
+    public String getRequestURI() {
+        if (component) {
+            log.info("Requesting component rendering for uri {}", 
componentRequestUri);
+            return componentRequestUri;
+        }
+        return super.getRequestURI();
+    }
+
+
+    @Override
+    public StringBuffer getRequestURL() {
+        if (component) {
+            final StringBuffer requestURL = super.getRequestURL();
+            final String replace = 
requestURL.toString().replace(super.getRequestURI(), getRequestURI());
+            log.info("replace {}", replace);
+            return new StringBuffer(replace);
+        }
+        return super.getRequestURL();
+    }
+
+    @SuppressWarnings("rawtypes")
+    @Override
+    public Enumeration getHeaderNames() {
+        HttpServletRequest request = (HttpServletRequest) getRequest();
+        Collection<String> list = new ArrayList<String>();
+        for (Enumeration e = request.getHeaderNames(); e.hasMoreElements(); ) {
+            list.add(e.nextElement().toString());
+        }
+
+        for (String s : headers.keySet()) {
+            list.add(s);
+        }
+        return Collections.enumeration(list);
+    }
+
+    /**
+     * Adds value to header map
+     *
+     * @param name  key
+     * @param value value
+     */
+    public void addHeader(String name, String value) {
+        headers.put(name, value);
+    }
+
+    @Override
+    public String getHeader(String name) {
+        final String value = headers.get(name);
+        if (value != null) {
+            return value;
+        }
+        return ((HttpServletRequest) getRequest()).getHeader(name);
+    }
+}

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

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

Added: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/HmvcServletResponse.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/HmvcServletResponse.java?rev=1363268&view=auto
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/HmvcServletResponse.java
 (added)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/HmvcServletResponse.java
 Thu Jul 19 09:12:51 2012
@@ -0,0 +1,77 @@
+/*
+ * 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.support;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @version "$Id$"
+ */
+public class HmvcServletResponse extends HttpServletResponseWrapper {
+
+    private static Logger log = 
LoggerFactory.getLogger(HmvcServletResponse.class);
+
+
+    private final ResponseHolder responseHolder;
+
+
+    /**
+     * Constructs a response adaptor wrapping the given response.
+     *
+     * @throws IllegalArgumentException if the response is null
+     */
+    public HmvcServletResponse(HttpServletResponse response) {
+        super(response);
+        responseHolder = new ResponseHolder(response);
+    }
+
+
+    public ResponseHolder getResponseHolder() {
+        return responseHolder;
+    }
+
+
+    @Override
+    public void flushBuffer() throws IOException {
+        responseHolder.flushBuffer();
+    }
+
+    @Override
+    public ServletOutputStream getOutputStream() throws IOException {
+        ServletOutputStream outputStream = responseHolder.getOutputStream();
+        return outputStream != null ? outputStream : super.getOutputStream();
+    }
+
+    @Override
+    public PrintWriter getWriter() throws IOException {
+        PrintWriter writer = responseHolder.getWriter();
+        return writer != null ? writer : super.getWriter();
+    }
+
+
+}

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

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

Added: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/ResponseHolder.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/ResponseHolder.java?rev=1363268&view=auto
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/ResponseHolder.java
 (added)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/support/ResponseHolder.java
 Thu Jul 19 09:12:51 2012
@@ -0,0 +1,115 @@
+/*
+ * 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.support;
+
+import java.io.ByteArrayOutputStream;
+import java.io.CharArrayWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @version "$Id$"
+ */
+public class ResponseHolder {
+
+    private static Logger log = LoggerFactory.getLogger(ResponseHolder.class);
+
+    /**
+     * Flag which indicates response is flushed
+     */
+    private boolean responseFlushed;
+
+    protected ByteArrayOutputStream byteOutputBuffer;
+    private CharArrayWriterBuffer charBuffer;
+    private ServletOutputStream outputStream;
+    private PrintWriter printWriter;
+    private boolean closed;
+    private boolean commited;
+    private int contentLength;
+    private final HttpServletResponse response;
+
+
+    public ResponseHolder(HttpServletResponse response) {
+        this.response = response;
+    }
+
+
+    public void flushBuffer() throws IOException {
+        if (!closed) {
+            responseFlushed = true;
+        }
+
+
+    }
+
+    public PrintWriter getWriter() throws IOException {
+
+        charBuffer = new CharArrayWriterBuffer();
+        printWriter = new PrintWriter(charBuffer);
+        return printWriter;
+    }
+
+
+    public ServletOutputStream getOutputStream() throws IOException {
+
+        if (outputStream == null) {
+            if (printWriter != null) {
+                throw new IllegalStateException("getWriter() has already been 
called on this response");
+            }
+            byteOutputBuffer = new ByteArrayOutputStream();
+            outputStream = new ServletOutputStream() {
+                @Override
+                public void write(int b) throws IOException {
+                    if (!closed) {
+                        byteOutputBuffer.write(b);
+                        if (contentLength > -1 && byteOutputBuffer.size() >= 
contentLength) {
+                            commited = true;
+                            closed = true;
+                        }
+                    }
+                }
+            };
+        }
+        return outputStream;
+    }
+
+
+    
//*************************************************************************************
+    // HELP CLASSES
+    
//*************************************************************************************
+
+    private static class CharArrayWriterBuffer extends CharArrayWriter {
+        private char[] getBuffer() {
+            return buf;
+        }
+
+        private int getCount() {
+            return count;
+        }
+    }
+
+
+}

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

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

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/tags/IncludeComponentTag.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/tags/IncludeComponentTag.java?rev=1363268&r1=1363267&r2=1363268&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/tags/IncludeComponentTag.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/hmvc/tags/IncludeComponentTag.java
 Thu Jul 19 09:12:51 2012
@@ -21,16 +21,17 @@ package org.apache.rave.portal.web.hmvc.
 
 import java.io.IOException;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.JspWriter;
 import javax.servlet.jsp.tagext.TagSupport;
 
+import org.apache.rave.portal.web.hmvc.support.HmvcServletResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
+ * Produces (render/markup) output of a HMVC component into page included
+ *
  * @version "$Id$"
  */
 public class IncludeComponentTag extends TagSupport {
@@ -49,15 +50,23 @@ public class IncludeComponentTag extends
     @Override
     public int doEndTag() throws JspException {
 
-        HttpServletRequest request = (HttpServletRequest) 
pageContext.getRequest();
-        HttpServletResponse response = (HttpServletResponse) 
pageContext.getResponse();
+
+        HmvcServletResponse response = (HmvcServletResponse) 
pageContext.getResponse();
+        if (response == null) {
+            if (log.isDebugEnabled()) {
+                log.error("Response was null");
+            }
+            return EVAL_PAGE;
+        }
 
 
         try {
             JspWriter writer = pageContext.getOut();
             writer.flush();
-
         } catch (IOException e) {
+            if (log.isDebugEnabled()) {
+                log.error("Error including component: " + ref, e);
+            }
         }
 
         ref = null;

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/resources/META-INF/hmvc.tld
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/resources/META-INF/hmvc.tld?rev=1363268&r1=1363267&r2=1363268&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/resources/META-INF/hmvc.tld
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/resources/META-INF/hmvc.tld
 Thu Jul 19 09:12:51 2012
@@ -17,34 +17,31 @@
   specific language governing permissions and limitations
   under the License.
   -->
-
-<taglib xmlns="http://java.sun.com/xml/ns/javaee"; version="2.1"
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee";
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-  >
+        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd";
+        version="2.0">
 
+  <description>Rave Core Tag Library</description>
   <tlib-version>1.0</tlib-version>
-  <jsp-version>1.2</jsp-version>
   <short-name>hmvc-tags</short-name>
   <uri>http://www.apache-rave.org/jsp/core</uri>
-  <description>Rave Core Tag Library</description>
-
   <tag>
+    <description>Include component output</description>
     <name>include</name>
-    
<tag-class>org.apache.rave.portal.controller.tags.IncludeComponentTag</tag-class>
+    
<tag-class>org.apache.rave.portal.web.hmvc.tags.IncludeComponentTag</tag-class>
     <body-content>empty</body-content>
-    <description>Include component output</description>
     <attribute>
+      <description>The name of the component we are including</description>
       <name>ref</name>
       <required>true</required>
       <rtexprvalue>true</rtexprvalue>
       <type>java.lang.String</type>
-      <description>The name of the component</description>
     </attribute>
-    <example><![CDATA[
-
-                TODO
-                ]]></example>
+    <example>
+      <![CDATA[
+          <rave ref="footer" />
+      ]]>
+    </example>
   </tag>
-
-
 </taglib>
\ No newline at end of file


Reply via email to