Author: fpunt
Date: 2010-06-14 16:34:43 +0200 (Mon, 14 Jun 2010)
New Revision: 42545

Added:
   
CMSContainer/trunk/CMSContainer/cmsc/portal/src/java/com/finalist/cmsc/filter/
   
CMSContainer/trunk/CMSContainer/cmsc/portal/src/java/com/finalist/cmsc/filter/CharResponseWrapper.java
   
CMSContainer/trunk/CMSContainer/cmsc/portal/src/java/com/finalist/cmsc/filter/ContentUrlServerFilter.java
   CMSContainer/trunk/CMSContainer/migration/migration_1.8.2_to_1.8.3.txt
Modified:
   
CMSContainer/trunk/CMSContainer/cmsc/richtext/src/java/com/finalist/cmsc/richtext/RichTextGetProcessor.java
   
CMSContainer/trunk/CMSContainer/cmsc/taglib/src/java/com/finalist/cmsc/taglib/editors/VersionTag.java
   
CMSContainer/trunk/CMSContainer_Demo/demo.cmscontainer.org/war-staging/src/webapp/WEB-INF/web.xml
   
CMSContainer/trunk/CMSContainer_Templates/double/war-staging/src/webapp/WEB-INF/web.xml
Log:
[CMSC-1703] Let the content URL work properly between sites on the staging 
server

Added: 
CMSContainer/trunk/CMSContainer/cmsc/portal/src/java/com/finalist/cmsc/filter/CharResponseWrapper.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer/cmsc/portal/src/java/com/finalist/cmsc/filter/CharResponseWrapper.java
                              (rev 0)
+++ 
CMSContainer/trunk/CMSContainer/cmsc/portal/src/java/com/finalist/cmsc/filter/CharResponseWrapper.java
      2010-06-14 14:34:43 UTC (rev 42545)
@@ -0,0 +1,24 @@
+package com.finalist.cmsc.filter;
+
+import java.io.CharArrayWriter;
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+public class CharResponseWrapper extends HttpServletResponseWrapper {
+       private CharArrayWriter output;
+
+       public String toString() {
+               return output.toString();
+       }
+
+       public CharResponseWrapper(HttpServletResponse response) {
+               super(response);
+               output = new CharArrayWriter();
+       }
+
+       public PrintWriter getWriter() {
+               return new PrintWriter(output);
+       }
+}

Added: 
CMSContainer/trunk/CMSContainer/cmsc/portal/src/java/com/finalist/cmsc/filter/ContentUrlServerFilter.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer/cmsc/portal/src/java/com/finalist/cmsc/filter/ContentUrlServerFilter.java
                           (rev 0)
+++ 
CMSContainer/trunk/CMSContainer/cmsc/portal/src/java/com/finalist/cmsc/filter/ContentUrlServerFilter.java
   2010-06-14 14:34:43 UTC (rev 42545)
@@ -0,0 +1,123 @@
+/*
+
+ This software is OSI Certified Open Source Software.
+ OSI Certified is a certification mark of the Open Source Initiative.
+
+ The license (Mozilla version 1.0) can be read at the MMBase site.
+ See http://www.MMBase.org/license
+
+ */
+package com.finalist.cmsc.filter;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.finalist.pluto.portalImpl.core.PortalEnvironment;
+import com.finalist.pluto.portalImpl.core.PortalURL;
+
+/**
+ * 
+ */
+public class ContentUrlServerFilter implements Filter {
+
+   private static final Log log = 
LogFactory.getLog(ContentUrlServerFilter.class);
+    
+   private static final String CONTENTURL_PATTERN = 
"\"(/[-a-zA-Z0-9/]*?/content/[0-9]*?/[-_a-zA-Z0-9]*?)\"";
+   private static final int REPLACE_GROUP = 1;
+   private static final String SERVER_URL_PARAMETER = "?server=";
+   
+   private static final Pattern PATTERN = Pattern.compile(CONTENTURL_PATTERN);
+   
+   private Pattern excludePattern;
+   
+   /**
+    * 
+    */
+   public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException,
+         ServletException {
+
+      String path = getPath((HttpServletRequest)request);
+      if (path == null || excludePattern == null || 
!excludePattern.matcher(path).find()) {
+
+               PrintWriter out = response.getWriter();
+
+               CharResponseWrapper wrapper = new 
CharResponseWrapper((HttpServletResponse)response);
+               chain.doFilter(request, wrapper);
+               if(wrapper.getContentType() != null && 
wrapper.getContentType().startsWith("text/html")) {
+                  String output = wrapper.toString(); 
+                  Matcher m = PATTERN.matcher(output);
+                  
+                  int lastIndex = 0;
+                  StringBuilder newOutput = null;
+                  while(m.find()) {
+                       if(newOutput == null) {
+                               newOutput = new StringBuilder();
+                       }
+                       String contentUrl = m.group(REPLACE_GROUP);
+                       int to = m.start(REPLACE_GROUP);
+                       newOutput.append(output.substring(lastIndex, to));
+                       newOutput.append(contentUrl);
+                       newOutput.append(SERVER_URL_PARAMETER);
+                       
newOutput.append(getServer((HttpServletRequest)request));
+                       lastIndex = m.end(REPLACE_GROUP);
+                  }
+                  
+                  if(newOutput != null) {
+                       newOutput.append(output.substring(lastIndex, 
output.length()));
+                       output = newOutput.toString();
+                  }
+                  response.setContentLength(output.length());
+                  out.write(output);
+               } else {
+                  out.write(wrapper.toString());
+               }
+               out.close();
+       }
+       else {
+               chain.doFilter(request, response);
+       }
+   }
+
+       private String getServer(HttpServletRequest request) {
+               PortalEnvironment env = 
PortalEnvironment.getPortalEnvironment(request);
+               PortalURL currentURL = env.getRequestedPortalURL();
+               String path = currentURL.getGlobalNavigationAsString();
+               return (path.indexOf("/") != -1)?(path.substring(0, 
path.indexOf("/"))):path;
+       }
+
+       public void destroy() {
+               // Do nothing
+       }
+
+       public void init(FilterConfig config) throws ServletException {
+      String excludes = config.getInitParameter("excludes");
+      if (excludes != null && excludes.length() > 0) {
+          excludePattern = Pattern.compile(excludes);
+      }
+       }
+       
+   /**
+    * Get path part of request.
+    * @param request servlet request
+    * @return the path part of request or <tt>null</tt> when it cannot
+    * be determined
+    */
+   private static String getPath (HttpServletRequest request) {
+       String path = request.getServletPath();
+       return path != null ? path : request.getPathInfo();
+   }
+}
\ No newline at end of file

Modified: 
CMSContainer/trunk/CMSContainer/cmsc/richtext/src/java/com/finalist/cmsc/richtext/RichTextGetProcessor.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer/cmsc/richtext/src/java/com/finalist/cmsc/richtext/RichTextGetProcessor.java
 2010-06-14 11:23:33 UTC (rev 42544)
+++ 
CMSContainer/trunk/CMSContainer/cmsc/richtext/src/java/com/finalist/cmsc/richtext/RichTextGetProcessor.java
 2010-06-14 14:34:43 UTC (rev 42545)
@@ -9,12 +9,16 @@
  */
 package com.finalist.cmsc.richtext;
 
-import java.net.URLEncoder;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
 
 import org.apache.commons.lang.StringUtils;
-import org.mmbase.bridge.*;
+import org.mmbase.bridge.Cloud;
+import org.mmbase.bridge.Field;
 import org.mmbase.bridge.Node;
+import org.mmbase.bridge.Relation;
+import org.mmbase.bridge.RelationList;
 import org.mmbase.datatypes.processors.ParameterizedProcessorFactory;
 import org.mmbase.datatypes.processors.Processor;
 import org.mmbase.security.Rank;
@@ -22,11 +26,11 @@
 import org.mmbase.util.functions.Parameters;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
-import org.w3c.dom.*;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
 import com.finalist.cmsc.mmbase.ResourcesUtil;
-import com.finalist.cmsc.util.ServerUtil;
 
 @SuppressWarnings("serial")
 public class RichTextGetProcessor implements ParameterizedProcessorFactory {
@@ -261,11 +265,6 @@
                         name = destinationNode.getStringValue("name");
                      }
                   }
-                  url = getContentUrl(destinationNode);
-                  if(!ServerUtil.useServerName() && url.contains("/content/")) 
{
-//                     NavigationInfo info = 
NavigationUtil.getNavigationInfo(cloud);
-//                     url += 
"?server="+URLEncoder.encode(request.getServerName());
-                  }
                }
             }
 

Modified: 
CMSContainer/trunk/CMSContainer/cmsc/taglib/src/java/com/finalist/cmsc/taglib/editors/VersionTag.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer/cmsc/taglib/src/java/com/finalist/cmsc/taglib/editors/VersionTag.java
       2010-06-14 11:23:33 UTC (rev 42544)
+++ 
CMSContainer/trunk/CMSContainer/cmsc/taglib/src/java/com/finalist/cmsc/taglib/editors/VersionTag.java
       2010-06-14 14:34:43 UTC (rev 42545)
@@ -13,6 +13,8 @@
    private static String TYPE_CMSC = "cmsc";
    private static String TYPE_MMBASE = "mmbase";
    private static String TYPE_LIBS = "libs";
+   
+   private static String UNKNOWN = "unknown/mixed";
 
    private String type = TYPE_APPLICATION;
    private String var;
@@ -38,7 +40,9 @@
       else {
          throw new IllegalArgumentException("No type not found, see tld for 
list of types.");
       }
-
+      if(version == null) {
+       version = UNKNOWN;
+      }
       if (var == null) {
          ctx.getOut().write(version.toString());
       }

Added: CMSContainer/trunk/CMSContainer/migration/migration_1.8.2_to_1.8.3.txt
===================================================================
--- CMSContainer/trunk/CMSContainer/migration/migration_1.8.2_to_1.8.3.txt      
                        (rev 0)
+++ CMSContainer/trunk/CMSContainer/migration/migration_1.8.2_to_1.8.3.txt      
2010-06-14 14:34:43 UTC (rev 42545)
@@ -0,0 +1,28 @@
+MMigration document:
+
+Part: core
+From version: 1.8.2
+To version: 1.8.3
+
+Name: Let the content URL work properly between sites on the staging server
+Goal: Add a new filter to the web.xml of the staging server, only when there 
are multiple sites in the CMS container
+Type:  manual action
+--- Start script ---
+Add above the ControllerFilter <filter>:
+       <filter>
+               <filter-name>ContentUrlServerFilter</filter-name>
+               
<filter-class>com.finalist.cmsc.filter.ContentUrlServerFilter</filter-class>
+               <init-param>
+                       <param-name>excludes</param-name>
+                       
<param-value>([.]jpg$|[.]gif$|[.]png$|[.]css$|[.]js$|[.]jsp$|[.]html$|[.]do$|[.]ico$)|robots.txt|/mmbase|/editors</param-value>
+               </init-param>           
+       </filter>
+       
+Add above the ControllerFilter <filter-mapping>:
+   <filter-mapping>
+      <filter-name>ControllerFilter</filter-name>
+      <url-pattern>/*</url-pattern>
+   </filter-mapping>
+
+--- End script ---
+

Modified: 
CMSContainer/trunk/CMSContainer_Demo/demo.cmscontainer.org/war-staging/src/webapp/WEB-INF/web.xml
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Demo/demo.cmscontainer.org/war-staging/src/webapp/WEB-INF/web.xml
   2010-06-14 11:23:33 UTC (rev 42544)
+++ 
CMSContainer/trunk/CMSContainer_Demo/demo.cmscontainer.org/war-staging/src/webapp/WEB-INF/web.xml
   2010-06-14 14:34:43 UTC (rev 42545)
@@ -102,6 +102,15 @@
       </init-param>
     </filter>
 
+       <filter>
+               <filter-name>ContentUrlServerFilter</filter-name>
+               
<filter-class>com.finalist.cmsc.filter.ContentUrlServerFilter</filter-class>
+               <init-param>
+                       <param-name>excludes</param-name>
+                       
<param-value>([.]jpg$|[.]gif$|[.]png$|[.]css$|[.]js$|[.]jsp$|[.]html$|[.]do$|[.]ico$)|robots.txt|/mmbase|/editors</param-value>
+               </init-param>           
+       </filter>
+
    <!-- navigation controller -->
    <filter>
       <description>Filter catch all requests.</description>
@@ -140,6 +149,11 @@
    </filter-mapping>
 
    <filter-mapping>
+      <filter-name>ContentUrlServerFilter</filter-name>
+      <url-pattern>/*</url-pattern>
+   </filter-mapping>
+   
+   <filter-mapping>
       <filter-name>ControllerFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>

Modified: 
CMSContainer/trunk/CMSContainer_Templates/double/war-staging/src/webapp/WEB-INF/web.xml
===================================================================
--- 
CMSContainer/trunk/CMSContainer_Templates/double/war-staging/src/webapp/WEB-INF/web.xml
     2010-06-14 11:23:33 UTC (rev 42544)
+++ 
CMSContainer/trunk/CMSContainer_Templates/double/war-staging/src/webapp/WEB-INF/web.xml
     2010-06-14 14:34:43 UTC (rev 42545)
@@ -102,6 +102,15 @@
       </init-param>
     </filter>
 
+       <filter>
+               <filter-name>ContentUrlServerFilter</filter-name>
+               
<filter-class>com.finalist.cmsc.filter.ContentUrlServerFilter</filter-class>
+               <init-param>
+                       <param-name>excludes</param-name>
+                       
<param-value>([.]jpg$|[.]gif$|[.]png$|[.]css$|[.]js$|[.]jsp$|[.]html$|[.]do$|[.]ico$)|robots.txt|/mmbase|/editors</param-value>
+               </init-param>           
+       </filter>
+
    <!-- navigation controller -->
    <filter>
       <description>Filter catch all requests.</description>
@@ -161,6 +170,11 @@
    </filter-mapping>
 
    <filter-mapping>
+      <filter-name>ContentUrlServerFilter</filter-name>
+      <url-pattern>/*</url-pattern>
+   </filter-mapping>
+       
+   <filter-mapping>
       <filter-name>ControllerFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to