You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2009/09/07 17:36:06 UTC
svn commit: r812198 - in
/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger:
business/ pojos/ ui/rendering/ ui/rendering/servlets/ ui/rendering/util/
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;
+ }
+}