You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2009/01/09 01:10:09 UTC
svn commit: r732879 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/internal/services/
main/java/org/apache/tapestry5/internal/test/
main/java/org/apache/tapestry5/services/
test/java/org/apache/tapestry5/internal/servi...
Author: hlship
Date: Thu Jan 8 16:10:08 2009
New Revision: 732879
URL: http://svn.apache.org/viewvc?rev=732879&view=rev
Log:
TAP5-411: Tapestry should be using ServletContext.getMimeType() to map from file extensions to MIME types
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterContext.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Context.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResourceStreamerImplTest.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextImpl.java?rev=732879&r1=732878&r2=732879&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ContextImpl.java Thu Jan 8 16:10:08 2009
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -86,7 +86,6 @@
if (match.endsWith("/")) queue.push(match);
else result.add(match);
}
-
}
Collections.sort(result);
@@ -104,4 +103,8 @@
return InternalUtils.toList(servletContext.getAttributeNames());
}
+ public String getMimeType(String file)
+ {
+ return servletContext.getMimeType(file);
+ }
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java?rev=732879&r1=732878&r2=732879&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java Thu Jan 8 16:10:08 2009
@@ -21,6 +21,7 @@
import org.apache.tapestry5.ioc.annotations.Symbol;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.ioc.util.TimeInterval;
+import org.apache.tapestry5.services.Context;
import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.services.Response;
import org.apache.tapestry5.services.ResponseCompressionAnalyzer;
@@ -40,23 +41,35 @@
private final Response response;
+ private final Context context;
+
private final ResponseCompressionAnalyzer analyzer;
private final Map<String, String> configuration;
private final int compressionCutoff;
- public ResourceStreamerImpl(Request request, Response response, ResourceCache resourceCache,
+ public ResourceStreamerImpl(Request request,
+
+ Response response,
+
+ Context context,
+
+ ResourceCache resourceCache,
+
Map<String, String> configuration,
+
ResponseCompressionAnalyzer analyzer,
@Symbol(SymbolConstants.MIN_GZIP_SIZE)
int compressionCutoff)
+
{
+ this.request = request;
this.response = response;
+ this.context = context;
this.resourceCache = resourceCache;
this.configuration = configuration;
- this.request = request;
this.analyzer = analyzer;
this.compressionCutoff = compressionCutoff;
}
@@ -115,21 +128,24 @@
if ("content/unknown".equals(contentType)) contentType = null;
- if (contentType == null)
- {
- String file = resource.getFile();
- int dotx = file.lastIndexOf('.');
+ if (contentType != null) return contentType;
- if (dotx > 0)
- {
- String extension = file.substring(dotx + 1);
+ contentType = context.getMimeType(resource.getPath());
- contentType = configuration.get(extension);
- }
+ if (contentType != null) return contentType;
+
+ String file = resource.getFile();
+ int dotx = file.lastIndexOf('.');
+
+ if (dotx > 0)
+ {
+ String extension = file.substring(dotx + 1);
- if (contentType == null) contentType = "application/octet-stream";
+ contentType = configuration.get(extension);
}
- return contentType;
+ return contentType != null
+ ? contentType
+ : "application/octet-stream";
}
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterContext.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterContext.java?rev=732879&r1=732878&r2=732879&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterContext.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/test/PageTesterContext.java Thu Jan 8 16:10:08 2009
@@ -1,4 +1,4 @@
-// Copyright 2007, 2008 The Apache Software Foundation
+// Copyright 2007, 2008, 2009 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -70,6 +70,11 @@
return Collections.emptyList();
}
+ public String getMimeType(String file)
+ {
+ return null;
+ }
+
/**
* Always returns null.
*/
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Context.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Context.java?rev=732879&r1=732878&r2=732879&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Context.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/Context.java Thu Jan 8 16:10:08 2009
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -69,4 +69,14 @@
* Returns the names of all attributes of the context, sorted alphabetically.
*/
List<String> getAttributeNames();
+
+ /**
+ * Returns the MIME content type of the specified file, or null if no content type is known. MIME types are built-in
+ * to servlet containers and may be futher specified via the web application deployment descriptor.
+ *
+ * @param file name of file
+ * @return the presumed MIME content type, or null if not known
+ * @since 5.1.0.0
+ */
+ String getMimeType(String file);
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResourceStreamerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResourceStreamerImplTest.java?rev=732879&r1=732878&r2=732879&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResourceStreamerImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ResourceStreamerImplTest.java Thu Jan 8 16:10:08 2009
@@ -18,9 +18,7 @@
import org.apache.tapestry5.internal.test.InternalBaseTestCase;
import org.apache.tapestry5.ioc.Resource;
import org.apache.tapestry5.ioc.internal.util.ClasspathResource;
-import org.apache.tapestry5.services.Request;
-import org.apache.tapestry5.services.RequestGlobals;
-import org.apache.tapestry5.services.Response;
+import org.apache.tapestry5.services.*;
import static org.easymock.EasyMock.*;
import org.testng.annotations.Test;
@@ -37,26 +35,27 @@
@Test
public void content_type_css() throws IOException
{
- content_type("text/css", "test.css");
+ content_type("text/css", "test.css", true);
}
@Test
public void content_type_js() throws IOException
{
- content_type("text/javascript", "test.js");
+ content_type("text/javascript", "test.js", true);
}
@Test
public void content_type_gif() throws IOException
{
- content_type("image/gif", "test.gif");
+ content_type("image/gif", "test.gif", false);
}
- private void content_type(String contentType, String fileName) throws IOException
+ private void content_type(String contentType, String fileName, boolean consultsContext) throws IOException
{
Request request = mockRequest();
HttpServletRequest hsRequest = mockHttpServletRequest();
HttpServletResponse hsResponse = mockHttpServletResponse();
+ Context context = mockContext();
request.setAttribute(InternalConstants.SUPPRESS_COMPRESSION, true);
@@ -70,6 +69,10 @@
train_setContentType(hsResponse, contentType);
train_getOutputStream(hsResponse, new TestServletOutputStream());
+ if (consultsContext)
+ expect(context.getMimeType(endsWith(fileName))).andReturn(null);
+
+
replay();
Response response = new ResponseImpl(hsResponse);
@@ -79,6 +82,8 @@
globals.storeServletRequestResponse(hsRequest, hsResponse);
globals.storeRequestResponse(request, response);
+ getService(ApplicationGlobals.class).storeContext(context);
+
String path = getClass().getPackage().getName().replace('.', '/') + "/" + fileName;
Resource resource = new ClasspathResource(path);