Author: snoopdave
Date: Mon Sep  7 15:36:06 2009
New Revision: 812198

URL: http://svn.apache.org/viewvc?rev=812198&view=rev
Log:
Changing things so that media resources are served from the same root URL
as the blog itself (as we did with file uploads), instead of /roller-ui which
is reserved for the Editor/Admin UI only. Media resource URLs now take form:

   http://hostname/<context>/<weblog-handle>/mediaresource/<id>

Added:
    
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java
Modified:
    
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java
    
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/URLStrategy.java
    
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFile.java
    
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java
    
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java

Modified: 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java?rev=812198&r1=812197&r2=812198&view=diff
==============================================================================
--- 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java
 (original)
+++ 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/MultiWeblogURLStrategy.java
 Mon Sep  7 15:36:06 2009
@@ -99,6 +99,7 @@
      * Get url for a single weblog media file on a given weblog.
      */
     public String getMediaFileURL(
+            Weblog weblog,
             String fileAnchor,
             boolean absolute) {
         
@@ -114,7 +115,10 @@
             url.append(WebloggerRuntimeConfig.getRelativeContextURL());
         }
         
-        
url.append("/roller-ui/rendering/media-resources/").append(URLUtilities.encode(fileAnchor));
+        url.append("/mediaresource/");
+        url.append(weblog.getHandle());
+        url.append("/");
+        url.append(URLUtilities.encode(fileAnchor));
         
         return url.toString();
     }

Modified: 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/URLStrategy.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/URLStrategy.java?rev=812198&r1=812197&r2=812198&view=diff
==============================================================================
--- 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/URLStrategy.java
 (original)
+++ 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/URLStrategy.java
 Mon Sep  7 15:36:06 2009
@@ -152,7 +152,7 @@
     /**
      * Get url for a single mediafile on a given weblog.
      */
-    public String getMediaFileURL(String entryAnchor,
+    public String getMediaFileURL(Weblog weblog, String fileAnchor,
                                                  boolean absolute);
 
     /**

Modified: 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFile.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFile.java?rev=812198&r1=812197&r2=812198&view=diff
==============================================================================
--- 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFile.java
 (original)
+++ 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFile.java
 Mon Sep  7 15:36:06 2009
@@ -234,7 +234,7 @@
      */
     public String getPermalink() {
         return 
WebloggerFactory.getWeblogger().getUrlStrategy().getMediaFileURL(
-                this.id, true);
+                this.weblog, this.id, true);
     }
 
     public String getCreatorUserName() {

Modified: 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java?rev=812198&r1=812197&r2=812198&view=diff
==============================================================================
--- 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java
 (original)
+++ 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/WeblogRequestMapper.java
 Mon Sep  7 15:36:06 2009
@@ -51,6 +51,7 @@
     private static final String PAGE_SERVLET = "/roller-ui/rendering/page";
     private static final String FEED_SERVLET = "/roller-ui/rendering/feed";
     private static final String RESOURCE_SERVLET = 
"/roller-ui/rendering/resources";
+    private static final String MEDIA_SERVLET = 
"/roller-ui/rendering/media-resources";
     private static final String SEARCH_SERVLET = "/roller-ui/rendering/search";
     private static final String RSD_SERVLET = "/roller-ui/rendering/rsd";
     
@@ -345,7 +346,7 @@
                 
                 // requests handled by ResourceServlet
             } else if(context.equals("resource")) {
-                
+
                 forwardUrl.append(RESOURCE_SERVLET);
                 forwardUrl.append("/");
                 forwardUrl.append(handle);
@@ -353,7 +354,18 @@
                     forwardUrl.append("/");
                     forwardUrl.append(data);
                 }
-                
+
+                // requests handled by MediaResourceServlet
+            } else if(context.equals("mediaresource")) {
+
+                forwardUrl.append(MEDIA_SERVLET);
+                forwardUrl.append("/");
+                forwardUrl.append(handle);
+                if(data != null) {
+                    forwardUrl.append("/");
+                    forwardUrl.append(data);
+                }
+
                 // requests handled by SearchServlet
             } else if(context.equals("search")) {
                 

Modified: 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java?rev=812198&r1=812197&r2=812198&view=diff
==============================================================================
--- 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java
 (original)
+++ 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/servlets/MediaResourceServlet.java
 Mon Sep  7 15:36:06 2009
@@ -30,10 +30,13 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.roller.weblogger.WebloggerException;
 import org.apache.roller.weblogger.business.MediaFileManager;
 import org.apache.roller.weblogger.business.WebloggerFactory;
 import org.apache.roller.weblogger.pojos.MediaFile;
+import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.ui.rendering.util.ModDateHeaderUtil;
+import 
org.apache.roller.weblogger.ui.rendering.util.WeblogMediaResourceRequest;
 
 
 /**
@@ -65,31 +68,37 @@
         
         MediaFileManager mfMgr = 
WebloggerFactory.getWeblogger().getMediaFileManager();
 
-        String fileId = request.getPathInfo();
-        
-        log.debug("parsing file id -  " + fileId);
-        
-        // first, cleanup extra slashes and extract the weblog weblogHandle
-        if(fileId != null && fileId.trim().length() > 1) {
-            
-            // strip off the leading slash
-               fileId = fileId.substring(1);
-            
-            // strip off trailing slash if needed
-            if(fileId.endsWith("/")) {
-               fileId = fileId.substring(0, fileId.length() - 1);
+        Weblog weblog = null;
+        String ctx = request.getContextPath();
+        String servlet = request.getServletPath();
+        String reqURI = request.getRequestURI();
+
+        WeblogMediaResourceRequest resourceRequest = null;
+        try {
+            // parse the incoming request and extract the relevant data
+            resourceRequest = new WeblogMediaResourceRequest(request);
+
+            weblog = resourceRequest.getWeblog();
+            if(weblog == null) {
+                throw new WebloggerException("unable to lookup weblog: "+
+                        resourceRequest.getWeblogHandle());
             }
-        }
 
-        log.debug("File requested [" + fileId + "]");
+        } catch(Exception e) {
+            // invalid resource request or weblog doesn't exist
+            log.debug("error creating weblog resource request", e);
+            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+            return;
+        }
     
         long resourceLastMod = 0;
         InputStream resourceStream = null;
         MediaFile mediaFile = null;
         
         try {
-            mediaFile = mfMgr.getMediaFile(fileId, true);
+            mediaFile = mfMgr.getMediaFile(resourceRequest.getResourceId(), 
true);
             resourceLastMod = mediaFile.getLastModified();
+            
         } catch (Exception ex) {
             // still not found? then we don't have it, 404.
             log.debug("Unable to get resource", ex);

Added: 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java?rev=812198&view=auto
==============================================================================
--- 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java
 (added)
+++ 
roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/ui/rendering/util/WeblogMediaResourceRequest.java
 Mon Sep  7 15:36:06 2009
@@ -0,0 +1,94 @@
+/*
+ * 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.weblogger.ui.rendering.util;
+
+import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * Represents a request for a weblog resource file.
+ *
+ * /roller-ui/rendering/resources/*
+ */
+public class WeblogMediaResourceRequest extends WeblogRequest {
+    
+    private static Log log = 
LogFactory.getLog(WeblogMediaResourceRequest.class);
+        
+    // lightweight attributes
+    private String resourceId = null;
+    
+    
+    public WeblogMediaResourceRequest() {}
+    
+    
+    /**
+     * Construct the WeblogResourceRequest by parsing the incoming url
+     */
+    public WeblogMediaResourceRequest(HttpServletRequest request) 
+            throws InvalidRequestException {
+        
+        // let our parent take care of their business first
+        // parent determines weblog handle and locale if specified
+        super(request);
+        
+        String servlet = request.getServletPath();
+        
+        // we only want the path info left over from after our parents parsing
+        String pathInfo = this.getPathInfo();
+        
+        // parse the request object and figure out what we've got
+        log.debug("parsing path "+pathInfo);
+                
+        
+        /* 
+         * any id is okay...
+         */
+        if (pathInfo != null && pathInfo.trim().length() > 1) {
+            
+            this.resourceId = pathInfo;
+            if (pathInfo.startsWith("/")) {
+                this.resourceId = pathInfo.substring(1);
+            }
+        
+        } else {
+            throw new InvalidRequestException("invalid resource path info, "+
+                    request.getRequestURL());
+        }
+        
+        if(log.isDebugEnabled()) {
+            log.debug("resourceId = "+this.resourceId);
+        }
+    }
+    
+    public String getResourceId() {
+        return resourceId;
+    }
+
+    public void setResourceId(String resourceId) {
+        this.resourceId = resourceId;
+    }
+            
+    protected boolean isLocale(String potentialLocale) {
+        // We don't support locales in the resource Servlet so we've got to 
+        // keep parent from treating upload sub-directory name as a locale.
+        return false;
+    }
+}


Reply via email to