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; + } +}
