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 2006/09/15 20:38:07 UTC

svn commit: r446678 - in /incubator/roller/trunk/src/org/apache/roller/ui/rendering/velocity/deprecated: OldCommentsRequest.java RedirectServlet.java

Author: agilliland
Date: Fri Sep 15 11:38:06 2006
New Revision: 446678

URL: http://svn.apache.org/viewvc?view=rev&rev=446678
Log:
fixing lost redirect for very old comments links which used to function as permalinks.


Added:
    incubator/roller/trunk/src/org/apache/roller/ui/rendering/velocity/deprecated/OldCommentsRequest.java
Modified:
    incubator/roller/trunk/src/org/apache/roller/ui/rendering/velocity/deprecated/RedirectServlet.java

Added: incubator/roller/trunk/src/org/apache/roller/ui/rendering/velocity/deprecated/OldCommentsRequest.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/velocity/deprecated/OldCommentsRequest.java?view=auto&rev=446678
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/velocity/deprecated/OldCommentsRequest.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/velocity/deprecated/OldCommentsRequest.java Fri Sep 15 11:38:06 2006
@@ -0,0 +1,217 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.ui.rendering.velocity.deprecated;
+
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Locale;
+import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * Represents an *old* request for a Roller weblog comments permalink.
+ * 
+ * any url from ... /comments/*
+ * 
+ * While these urls are no longer used we do provide redirect support for them
+ * for users who have upgraded from earlier versions.  We keep this class to
+ * help with parsing these urls since they are fairly complex.
+ */
+public class OldCommentsRequest {
+    
+    private static Log log = LogFactory.getLog(OldCommentsRequest.class);
+    
+    // various page types
+    public static final String MAIN = "main";
+    public static final String PERMALINK = "permalink";
+    public static final String ARCHIVE = "archive";
+    
+    private String context = null;
+    private String pageType = null;
+    private String weblogHandle = null;
+    private String weblogAnchor = null;
+    private String weblogPage = null;
+    private String weblogCategory = null;
+    private String weblogDate = null;
+    
+    
+    /**
+     * Construct the WeblogPageRequest by parsing the incoming url
+     */
+    public OldCommentsRequest(HttpServletRequest request) throws Exception {
+        
+        // parse the request object and figure out what we've got
+        log.debug("parsing url "+request.getRequestURL());
+        
+        String servlet = request.getServletPath();
+        String pathInfo = request.getPathInfo();
+        
+        // make sure this request was destined for the comments servlet
+        if(servlet != null) {
+            // strip off the leading slash
+            servlet = servlet.substring(1);
+            
+            if("comments".equals(servlet)) {
+                this.context = "weblog";
+            } else {
+                // not a request to the page servlet
+                throw new Exception("not a weblog page request, "+request.getRequestURL());
+            }
+        } else {
+            throw new Exception("not a weblog page request, "+request.getRequestURL());
+        }
+        
+        
+        /*
+         * parse path info
+         *
+         * we expect one of the following forms of urls ...
+         *
+         * [handle] - get default page for user for today's date
+         * [handle]/[date] - get default page for user for specified date
+         * [handle]/[pagelink] - get specified page for today's date
+         * [handle]/[pagelink]/[date] - get specified page for specified date
+         * [handle]/[pagelink]/[anchor] - get specified page & entry (by anchor)
+         * [handle]/[pagelink]/[date]/[anchor] - get specified page & entry (by anchor)
+         */
+        if(pathInfo != null && pathInfo.trim().length() > 1) {
+            // strip off the leading slash
+            pathInfo = pathInfo.substring(1);
+            String[] pathElements = pathInfo.split("/");
+            
+            if ( pathElements.length == 1 ) {
+                
+                // /handle
+                this.weblogHandle = pathElements[0];
+                this.weblogPage = "Weblog";
+                this.pageType = MAIN;
+                
+            } else if ( pathElements.length == 2 ) {
+                
+                // /handle/date or /handle/page
+                this.weblogHandle = pathElements[0];
+                this.weblogPage = "Weblog";
+                
+                if(this.isValidDateString(pathElements[1])) {
+                    this.weblogDate = pathElements[1];
+                    this.pageType = ARCHIVE;
+                } else {
+                    this.weblogPage = pathElements[1];
+                    this.pageType = MAIN;
+                }
+                
+            } else if ( pathElements.length == 3 ) {
+                
+                // /handle/page/date or /handle/page/anchor
+                this.weblogHandle = pathElements[0];
+                this.weblogPage = pathElements[1];
+                
+                if(this.isValidDateString(pathElements[2])) {
+                    this.weblogDate = pathElements[2];
+                    this.pageType = ARCHIVE;
+                } else {
+                    this.weblogAnchor = pathElements[2];
+                    this.pageType = PERMALINK;
+                }
+                
+            } else if ( pathElements.length == 4 ) {
+                
+                // /handle/page/date/anchor
+                this.weblogHandle = pathElements[0];
+                this.weblogPage = pathElements[1];
+                this.weblogDate = pathElements[2];
+                this.weblogAnchor = pathElements[3];
+                this.pageType = PERMALINK;
+            }
+            
+        } else {
+            // invalid request ... path info is empty
+            throw new Exception("not a weblog page request, "+request.getRequestURL());
+        }
+        
+        
+        /*
+         * parse request parameters
+         *
+         * the only params we currently care about are:
+         *   anchor - specifies a weblog entry
+         *   entry - specifies a weblog entry
+         *   catname - specifies a weblog category
+         */
+        if(request.getParameter("anchor") != null) {
+            this.weblogAnchor = request.getParameter("anchor");
+            this.pageType = PERMALINK;
+        }
+        
+        if(request.getParameter("entry") != null) {
+            this.weblogAnchor = request.getParameter("entry");
+            this.pageType = PERMALINK;
+        }
+        
+        if(request.getParameter("catname") != null) {
+            String cat = request.getParameter("catname");
+            
+            this.weblogCategory = cat;
+            this.pageType = ARCHIVE;
+        }
+
+        // comments only supported permalinks, so if anchor is null then error
+        if(this.weblogAnchor == null) {
+            throw new Exception("invalid comments request, no anchor");
+        }
+    }
+    
+    
+    private boolean isValidDateString(String dateString) {
+        return (dateString != null && dateString.length() > 3 && StringUtils.isNumeric(dateString));
+    }
+
+    public String getContext() {
+        return context;
+    }
+
+    public String getWeblogHandle() {
+        return weblogHandle;
+    }
+
+    public String getWeblogAnchor() {
+        return weblogAnchor;
+    }
+
+    public String getWeblogPage() {
+        return weblogPage;
+    }
+
+    public String getWeblogCategory() {
+        return weblogCategory;
+    }
+
+    public String getWeblogDate() {
+        return weblogDate;
+    }
+
+    public String getPageType() {
+        return pageType;
+    }
+    
+}

Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/velocity/deprecated/RedirectServlet.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/velocity/deprecated/RedirectServlet.java?view=diff&rev=446678&r1=446677&r2=446678
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/velocity/deprecated/RedirectServlet.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/velocity/deprecated/RedirectServlet.java Fri Sep 15 11:38:06 2006
@@ -104,9 +104,7 @@
             
         // comments servlet
         } else if(CommentsServlet.equals(servlet)) {
-            // old comments page was an extension of page servlet
-            // so redirects are the same
-            redirectUrl = figurePageRedirect(request);
+            redirectUrl = figureCommentsRedirect(request);
             
         // resource servlet
         } else if(ResourceServlet.equals(servlet)) {
@@ -176,6 +174,35 @@
         
         String[] pathElements = pathInfo.split("/", 2);
         return newUrl+"/"+pathElements[0]+"/";
+    }
+    
+    
+    // old comments were a form of permalink, so redirect to new permalinks
+    private String figureCommentsRedirect(HttpServletRequest request) {
+        
+        OldCommentsRequest commentsRequest = null;
+        try {
+            // get parsed version of old page request
+            commentsRequest = new OldCommentsRequest(request);
+        } catch (Exception ex) {
+            return null;
+        }
+        
+        StringBuffer url = new StringBuffer();
+        
+        url.append(RollerRuntimeConfig.getRelativeContextURL());
+        url.append("/").append(commentsRequest.getWeblogHandle()).append("/");
+        
+        if(commentsRequest.getWeblogAnchor() != null) {
+            
+            // permalink url
+            url.append("entry/").append(URLUtilities.encode(commentsRequest.getWeblogAnchor()));
+            
+        } else {
+            return null;
+        }
+        
+        return url.toString();
     }