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