You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2007/06/08 01:20:38 UTC

svn commit: r545344 - in /roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui: core/filters/ core/util/ struts2/util/

Author: agilliland
Date: Thu Jun  7 16:20:37 2007
New Revision: 545344

URL: http://svn.apache.org/viewvc?view=rev&rev=545344
Log:
a slight bit of code cleanup.

- moved the core.util byte array response caching stuff directly into the CompressionFilter since that is the only thing using it.

- moved the UIUtils class into the ui.struts2.util package since it's really only used to support the struts2 ui.


Added:
    roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/util/UIUtils.java
      - copied, changed from r544591, roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/util/UIUtils.java
Removed:
    roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/util/ByteArrayOutputStreamWrapper.java
    roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/util/ByteArrayResponseWrapper.java
    roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/util/UIUtils.java
    roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/util/package.html
Modified:
    roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/CompressionFilter.java
    roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/CompressionFilter.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/CompressionFilter.java?view=diff&rev=545344&r1=545343&r2=545344
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/CompressionFilter.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/filters/CompressionFilter.java Thu Jun  7 16:20:37 2007
@@ -20,20 +20,23 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
 import java.util.zip.GZIPOutputStream;
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.config.RollerConfig;
-import org.apache.roller.weblogger.ui.core.util.ByteArrayOutputStreamWrapper;
-import org.apache.roller.weblogger.ui.core.util.ByteArrayResponseWrapper;
 
 
 /** 
@@ -42,13 +45,10 @@
  * Taken from More Servlets and JavaServer Pages from Prentice Hall and 
  * Sun Microsystems Press, http://www.moreservlets.com/.
  * © 2002 Marty Hall; may be freely used or adapted.
- *
- * @web.filter name="CompressionFilter"
  */
-
 public class CompressionFilter implements Filter {
     
-    private static Log mLogger = LogFactory.getLog(CompressionFilter.class);
+    private static Log log = LogFactory.getLog(CompressionFilter.class);
     
     private boolean enabled = true;
     
@@ -82,7 +82,7 @@
             ByteArrayOutputStream outputStream = responseWrapper.getByteArrayOutputStream();
             
             // Get character array representing output.
-            mLogger.debug("Pre-zip size:" + outputStream.size());
+            log.debug("Pre-zip size:" + outputStream.size());
             
             // Make a writer that compresses data and puts
             // it into a byte array.
@@ -95,7 +95,7 @@
             // Gzip streams must be explicitly closed.
             zipOut.close();
             
-            mLogger.debug("Gzip size:" + byteStream.size());
+            log.debug("Gzip size:" + byteStream.size());
             
             // Update the Content-Length header.
             res.setContentLength(byteStream.size());
@@ -118,10 +118,10 @@
         // is compression enabled?
         if(RollerConfig.getBooleanProperty("compression.gzipResponse.enabled")) {
             this.enabled = true;
-            mLogger.info("Compressed Output ENABLED");
+            log.info("Compressed Output ENABLED");
         } else {
             this.enabled = false;
-            mLogger.info("Compressed Output DISABLED");
+            log.info("Compressed Output DISABLED");
         }
     }
     
@@ -135,4 +135,110 @@
                     && (browserEncodings.indexOf("gzip") != -1));
     }
     
+    
+    /**
+     * Implementation of HttpServletResponseWrapper that supports caching.
+     */
+    private class ByteArrayResponseWrapper extends HttpServletResponseWrapper {
+        
+        private PrintWriter tpWriter;
+        private ByteArrayOutputStreamWrapper tpStream;
+        
+        
+        public ByteArrayResponseWrapper(ServletResponse inResp) throws IOException {
+            super((HttpServletResponse) inResp);
+            tpStream = new ByteArrayOutputStreamWrapper(inResp.getOutputStream());
+            tpWriter = new PrintWriter(new OutputStreamWriter(tpStream,"UTF-8"));
+        }
+        
+        
+        public ServletOutputStream getOutputStream() throws IOException {
+            return tpStream;
+        }
+        
+        public PrintWriter getWriter() throws IOException {
+            return tpWriter;
+        }
+        
+        /**
+         * Get a String representation of the entire buffer.
+         */
+        public String toString() {
+            return tpStream.getByteArrayStream().toString();
+        }
+        
+        public ByteArrayOutputStream getByteArrayOutputStream() throws IOException {
+            return tpStream.getByteArrayStream();
+        }
+        
+    }
+    
+    
+    /**
+     * Implementation of ServletOutputStream that allows the filter to hold the
+     * Response content for insertion into the cache.
+     */
+    private class ByteArrayOutputStreamWrapper extends ServletOutputStream {
+        
+        protected OutputStream intStream;
+        protected ByteArrayOutputStream baStream;
+        protected boolean finallized = false;
+        protected boolean flushOnFinalizeOnly = true;
+        
+        
+        public ByteArrayOutputStreamWrapper(OutputStream outStream) {
+            intStream = outStream;
+            baStream = new ByteArrayOutputStream();
+        }
+        
+        public ByteArrayOutputStreamWrapper() {
+            intStream = System.out;
+            baStream = new ByteArrayOutputStream();
+        }
+        
+        
+        public ByteArrayOutputStream getByteArrayStream() {
+            return baStream;
+        }
+        
+        public void setFinallized() {
+            finallized = true;
+        }
+        
+        public boolean isFinallized() {
+            return finallized;
+        }
+        
+        
+        public void write(int i) throws java.io.IOException {
+            baStream.write(i);
+        }
+        
+        public void close() throws java.io.IOException {
+            if (finallized) {
+                processStream();
+                intStream.close();
+            }
+        }
+        
+        public void flush() throws java.io.IOException {
+            if (baStream.size() != 0) {
+                if (!flushOnFinalizeOnly || finallized) {
+                    processStream();
+                    baStream = new ByteArrayOutputStream();
+                }
+            }
+        }
+        
+        protected void processStream() throws java.io.IOException {
+            intStream.write(baStream.toByteArray());
+            intStream.flush();
+        }
+        
+        public void clear() {
+            baStream = new ByteArrayOutputStream();
+        }
+        
+    }
+
 }

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java?view=diff&rev=545344&r1=545343&r2=545344
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java Thu Jun  7 16:20:37 2007
@@ -27,7 +27,7 @@
 import org.apache.roller.weblogger.config.RollerRuntimeConfig;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.pojos.Weblog;
-import org.apache.roller.weblogger.ui.core.util.UIUtils;
+import org.apache.roller.weblogger.ui.struts2.util.UIUtils;
 import org.apache.roller.weblogger.ui.core.util.menu.Menu;
 import org.apache.roller.weblogger.ui.core.util.menu.MenuHelper;
 

Copied: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/util/UIUtils.java (from r544591, roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/util/UIUtils.java)
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/util/UIUtils.java?view=diff&rev=545344&p1=roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/util/UIUtils.java&r1=544591&p2=roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/util/UIUtils.java&r2=545344
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/util/UIUtils.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/util/UIUtils.java Thu Jun  7 16:20:37 2007
@@ -16,7 +16,7 @@
  * directory of this distribution.
  */
 
-package org.apache.roller.weblogger.ui.core.util;
+package org.apache.roller.weblogger.ui.struts2.util;
 
 import java.util.Arrays;
 import java.util.Collections;