You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2008/01/29 10:10:15 UTC
svn commit: r616222 - in /incubator/sling/trunk/launchpad:
launchpad-servlets/src/main/java/org/apache/sling/launchpad/servlets/
launchpad-webapp/src/main/webapp/WEB-INF/
launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/...
Author: bdelacretaz
Date: Tue Jan 29 01:10:14 2008
New Revision: 616222
URL: http://svn.apache.org/viewvc?rev=616222&view=rev
Log:
SLING-149 - serving static files works, corresponding tests activated
Added:
incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.js (with props)
incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.json
Modified:
incubator/sling/trunk/launchpad/launchpad-servlets/src/main/java/org/apache/sling/launchpad/servlets/LaunchpadDefaultServlet.java
incubator/sling/trunk/launchpad/launchpad-webapp/src/main/webapp/WEB-INF/web.xml
incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/StaticContentTest.java
incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/StreamServletTest.java
incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.html
Modified: incubator/sling/trunk/launchpad/launchpad-servlets/src/main/java/org/apache/sling/launchpad/servlets/LaunchpadDefaultServlet.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/launchpad-servlets/src/main/java/org/apache/sling/launchpad/servlets/LaunchpadDefaultServlet.java?rev=616222&r1=616221&r2=616222&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/launchpad-servlets/src/main/java/org/apache/sling/launchpad/servlets/LaunchpadDefaultServlet.java (original)
+++ incubator/sling/trunk/launchpad/launchpad-servlets/src/main/java/org/apache/sling/launchpad/servlets/LaunchpadDefaultServlet.java Tue Jan 29 01:10:14 2008
@@ -19,6 +19,8 @@
package org.apache.sling.launchpad.servlets;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
@@ -31,6 +33,7 @@
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.NonExistingResource;
import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.launchpad.renderers.DefaultHtmlRendererServlet;
import org.apache.sling.launchpad.renderers.JsonRendererServlet;
@@ -105,27 +108,77 @@
return;
}
- // use default renderer servlet if no extension, else lookup our getServlets
+ // render using a servlet or binary streaming
Servlet s = defaultGetServlet;
+ InputStream stream = null;
final String ext = request.getRequestPathInfo().getExtension();
if(ext!=null && ext.length() > 0) {
- s = getServlets.get(ext);
+ // if there is an extension, lookup our getServlets
+ s = getServlets.get(ext);
+ } else {
+ // no extension means we're addressing a static file directly
+ // check whether the resource adapts to a stream, spool then
+ stream = resource.adaptTo(InputStream.class);
}
- // render using s, or fail
- if(s==null) {
+ // render using stream, s, or fail
+ if(stream != null) {
+ stream(response, resource, stream);
+ } else if(s!=null) {
+ s.service(request, response);
+ } else {
response.sendError(
HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"No default renderer found for extension='" + ext + "'"
);
- } else {
- s.service(request, response);
}
}
-
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response)
throws ServletException,IOException {
postServlet.service(request, response);
+ }
+
+ /** Stream the Resource to response */
+ private void stream(HttpServletResponse response, Resource resource,
+ InputStream stream) throws IOException {
+
+ ResourceMetadata meta = resource.getResourceMetadata();
+
+ final String defaultContentType = "application/octet-stream";
+ String contentType = (String) meta.get(ResourceMetadata.CONTENT_TYPE);
+ if (contentType == null || defaultContentType.equals(contentType)) {
+ // if repository doesn't provide a content-type, or provides the default one,
+ // try to do better using our servlet context
+ final String ct = getServletContext().getMimeType(resource.getPath());
+ if(ct!=null) {
+ contentType = ct;
+ }
+ }
+ if (contentType != null) {
+ response.setContentType(contentType);
+ }
+
+ String encoding = (String) meta.get(ResourceMetadata.CHARACTER_ENCODING);
+ if (encoding != null) {
+ response.setCharacterEncoding(encoding);
+ }
+
+ try {
+ OutputStream out = response.getOutputStream();
+
+ byte[] buf = new byte[1024];
+ int rd;
+ while ( (rd=stream.read(buf)) >= 0) {
+ out.write(buf, 0, rd);
+ }
+
+ } finally {
+ try {
+ stream.close();
+ } catch (IOException ignore) {
+ // don't care
+ }
+ }
}
}
Modified: incubator/sling/trunk/launchpad/launchpad-webapp/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/launchpad-webapp/src/main/webapp/WEB-INF/web.xml?rev=616222&r1=616221&r2=616222&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/launchpad-webapp/src/main/webapp/WEB-INF/web.xml (original)
+++ incubator/sling/trunk/launchpad/launchpad-webapp/src/main/webapp/WEB-INF/web.xml Tue Jan 29 01:10:14 2008
@@ -29,20 +29,6 @@
<servlet-class>
org.apache.sling.launcher.webapp.SlingServlet
</servlet-class>
-
- <!-- TODO com.day stuff??
- <init-param>
- <param-name>java.naming.provider.url</param-name>
- <param-value>http://jcr.day.com</param-value>
- </init-param>
- <init-param>
- <param-name>java.naming.factory.initial</param-name>
- <param-value>
- com.day.util.jndi.provider.MemoryInitialContextFactory
- </param-value>
- </init-param>
- -->
-
<load-on-startup>100</load-on-startup>
</servlet>
@@ -57,5 +43,125 @@
<servlet-name>sling</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
+
+ <!-- ====================================================================== -->
+ <!-- M I M E T Y P E M A P P I N G -->
+ <!-- ====================================================================== -->
+ <mime-mapping>
+ <extension>doc</extension>
+ <mime-type>application/msword</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>bin</extension>
+ <mime-type>application/octet-stream</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>pdf</extension>
+ <mime-type>application/pdf</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>ai</extension>
+ <mime-type>application/postscript</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>eps</extension>
+ <mime-type>application/postscript</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>ps</extension>
+ <mime-type>application/postscript</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>rtf</extension>
+ <mime-type>application/rtf</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>mif</extension>
+ <mime-type>application/vnd.mif</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>ppt</extension>
+ <mime-type>application/vnd.ms-powerpoint</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>xls</extension>
+ <mime-type>application/vnd.ms-excel</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>vcd</extension>
+ <mime-type>application/x-cdlink</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>js</extension>
+ <mime-type>application/x-javascript</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>mp3</extension>
+ <mime-type>audio/mpeg</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>ram</extension>
+ <mime-type>audio/x-pn-realaudio</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>rm</extension>
+ <mime-type>audio/x-pn-realaudio</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>ra</extension>
+ <mime-type>audio/x-realaudio</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>gif</extension>
+ <mime-type>image/gif</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>jpeg</extension>
+ <mime-type>image/jpeg</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>jpg</extension>
+ <mime-type>image/jpeg</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>png</extension>
+ <mime-type>image/png</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>tiff</extension>
+ <mime-type>image/tiff</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>tif</extension>
+ <mime-type>image/tiff</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>css</extension>
+ <mime-type>text/css</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>asc</extension>
+ <mime-type>text/plain</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>txt</extension>
+ <mime-type>text/plain</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>xml</extension>
+ <mime-type>text/xml</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>html</extension>
+ <mime-type>text/html</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>htm</extension>
+ <mime-type>text/html</mime-type>
+ </mime-mapping>
+ <mime-mapping>
+ <extension>json</extension>
+ <mime-type>application/json</mime-type>
+ </mime-mapping>
</web-app>
Modified: incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/StaticContentTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/StaticContentTest.java?rev=616222&r1=616221&r2=616222&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/StaticContentTest.java (original)
+++ incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/StaticContentTest.java Tue Jan 29 01:10:14 2008
@@ -20,19 +20,8 @@
import javax.servlet.http.HttpServletResponse;
-/** Test static content served from the microsling webapp resources */
+/** Some tests about static content */
public class StaticContentTest extends HttpTestBase {
- public void TODO_FAILS_testContentTypeHtml() throws IOException {
- getContent(HTTP_BASE_URL + "/index.html", CONTENT_TYPE_HTML);
- }
-
- public void TODO_FAILS_testContentTypeCss() throws IOException {
- getContent(HTTP_BASE_URL + "/launchpad.css", CONTENT_TYPE_CSS);
- }
-
- public void TODO_FAILS_testContentTypeJs() throws IOException {
- getContent(HTTP_BASE_URL + "/ujax/ujax.js", CONTENT_TYPE_JS);
- }
public void testWebInfForbidden() throws IOException {
// if DefaultSlingServlet handled this we'd get an SC_FORBIDDEN, but it looks
Modified: incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/StreamServletTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/StreamServletTest.java?rev=616222&r1=616221&r2=616222&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/StreamServletTest.java (original)
+++ incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/StreamServletTest.java Tue Jan 29 01:10:14 2008
@@ -17,8 +17,7 @@
package org.apache.sling.launchpad.webapp.integrationtest;
-/** Test the StreamServlet by reading an uploaded file with a GET
- */
+/** Test the streaming of static files uploaded to the repository */
public class StreamServletTest extends RenderingTestBase {
@Override
@@ -29,42 +28,30 @@
testClient.mkdirs(WEBDAV_BASE_URL, scriptPath);
}
- public void testNothing() {
- // TODO remove this all TODO_FAILS_ are gone
- }
-
- /** TODO fails as files are currently served by the default renderer, as plain text */
- public void TODO_FAILS_testPlainTextFile() throws Exception {
- final String filename = "testfile.txt";
+ private void runTest(String filename, String expectedContentType, String expectedContent) throws Exception {
final String toDelete = uploadTestScript(filename,filename);
try {
final String url = displayUrl + "/" + filename;
- // TODO why don't we get a content-type here?
- final String content = getContent(url, null);
- assertTrue(
- "Content at " + url + " must include expected marker, got " + content,
- content.contains("This is just some text in an ASCII file.")
- );
+ final String content = getContent(url, expectedContentType);
+ assertEquals(expectedContent, content);
} finally {
testClient.delete(toDelete);
}
}
+
+ public void testPlainTextFile() throws Exception {
+ runTest("testfile.txt", CONTENT_TYPE_PLAIN, "This is just some text in an ASCII file.");
+ }
- /** TODO fails as files are currently served by the default renderer, as plain text */
- public void TODO_FAILS_testHtmlTextFile() throws Exception {
- final String filename = "testfile.html";
- final String toDelete = uploadTestScript(filename,filename);
- try {
- // TODO this should really be text/html, not sure why it is not
- final String url = displayUrl + "/" + filename;
- // TODO why don't we get a content-type here?
- final String content = getContent(url, null);
- assertTrue(
- "Content at " + url + " must include expected marker, got " + content,
- content.contains("This is <em>testfile.html</em>.")
- );
- } finally {
- testClient.delete(toDelete);
- }
+ public void testHtmlFile() throws Exception {
+ runTest("testfile.html", CONTENT_TYPE_HTML, "This is <em>testfile.html</em>");
+ }
+
+ public void testJavascriptFile() throws Exception {
+ runTest("testfile.js", CONTENT_TYPE_JS, "// This is testfile.js");
+ }
+
+ public void testJsonFile() throws Exception {
+ runTest("testfile.json", CONTENT_TYPE_JSON, "This is testfile.json");
}
}
Modified: incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.html
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.html?rev=616222&r1=616221&r2=616222&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.html (original)
+++ incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.html Tue Jan 29 01:10:14 2008
@@ -1,5 +1 @@
-<html>
-<body>
-This is <em>testfile.html</em>.
-</body>
-</html>
\ No newline at end of file
+This is <em>testfile.html</em>
\ No newline at end of file
Added: incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.js
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.js?rev=616222&view=auto
==============================================================================
--- incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.js (added)
+++ incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.js Tue Jan 29 01:10:14 2008
@@ -0,0 +1 @@
+// This is testfile.js
\ No newline at end of file
Propchange: incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.js
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.json
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.json?rev=616222&view=auto
==============================================================================
--- incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.json (added)
+++ incubator/sling/trunk/launchpad/launchpad-webapp/src/test/resources/integration-test/testfile.json Tue Jan 29 01:10:14 2008
@@ -0,0 +1 @@
+This is testfile.json
\ No newline at end of file