/*******************************************************************************
* Copyright (c) 2002-2006 Innoopract Informationssysteme GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Innoopract Informationssysteme GmbH - initial API and implementation
******************************************************************************/
package com.w4t.engine.service;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import org.eclipse.rwt.internal.resources.ResourceManagerImpl;
import org.eclipse.rwt.internal.service.AbstractServiceHandler;
import org.eclipse.rwt.internal.service.RequestParams;
// TODO [w4t] move back to org.eclipse.rap.w4t
class ResourceRequestServiceHandler extends AbstractServiceHandler {
/** <p>Map file extensions to MIME types.</p>*/
private Properties mimeTypes;
/** <p>creates a new instance of ResourceRequestServiceHandler.</p> */
public ResourceRequestServiceHandler() {
mimeTypes = new Properties();
initMap();
}
public void service() throws ServletException, IOException {
setExpirationHeader();
String name = getRequest().getParameter( RequestParams.RESOURCE );
Integer version = getResourceVersion();
int[] resource = ResourceManagerImpl.findResource( name, version );
if( resource != null ) {
getResponse().setContentType( getMIMEType( name ) );
ServletOutputStream out = getResponse().getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream( out );
try {
for( int i = 0; i < resource.length; i++ ) {
bos.write( resource[ i ] );
}
bos.flush();
} finally {
bos.close();
}
}
}
//////////////////
// helping methods
private void initMap() {
// TODO: read this from property file
mimeTypes.setProperty( "", "content/unknown" );
mimeTypes.setProperty( ".aif", "audio/x-aiff" );
mimeTypes.setProperty( ".mapaifc", "audio/x-aiff" );
mimeTypes.setProperty( ".aiff", "audio/x-aiff" );
mimeTypes.setProperty( ".au", "audio/basic" );
mimeTypes.setProperty( ".kar", "audio/midi" );
mimeTypes.setProperty( ".mid", "audio/midi" );
mimeTypes.setProperty( ".midi", "audio/midi" );
mimeTypes.setProperty( ".mp2", "audio/mpeg" ) ;
mimeTypes.setProperty( ".mp3", "audio/mpeg" );
mimeTypes.setProperty( ".mpga", "audio/mpeg" );
mimeTypes.setProperty( ".ra", "audio/x-realaudio" );
mimeTypes.setProperty( ".ram", "audio/x-pn-realaudio" );
mimeTypes.setProperty( ".rpm", "audio/x-pn-realaudio-plugin" );
mimeTypes.setProperty( ".snd", "audio/basic" );
mimeTypes.setProperty( ".vox", "audio/voxware" );
mimeTypes.setProperty( ".wav", "audio/x-wav" );
mimeTypes.setProperty( ".wax", "audio/x-ms-wax" );
mimeTypes.setProperty( ".wma", "audio/x-ms-wma" );
mimeTypes.setProperty( ".au", "audio/basic" );
mimeTypes.setProperty( ".wm", "video/x-ms-wm" );
mimeTypes.setProperty( ".mpe", "video/mpeg" );
mimeTypes.setProperty( ".mpeg", "video/mpeg" );
mimeTypes.setProperty( ".mpg", "video/mpeg" );
mimeTypes.setProperty( ".asf", "video/x-ms-asf" );
mimeTypes.setProperty( ".asx", "video/x-ms-asf" );
mimeTypes.setProperty( ".avi", "video/x-msvideo" );
mimeTypes.setProperty( ".mov", "video/quicktime" );
mimeTypes.setProperty( ".movie", "video/x-sgi-movie" );
mimeTypes.setProperty( ".qt", "video/quicktime" );
mimeTypes.setProperty( ".wmv", "video/x-ms-wmv" );
mimeTypes.setProperty( ".wmx", "video/x-ms-wmx" );
mimeTypes.setProperty( ".wvx", "video/x-ms-wvx" );
mimeTypes.setProperty( ".bin", "application/octet-stream" );
mimeTypes.setProperty( ".class", "application/octet-stream" );
mimeTypes.setProperty( ".dll", "application/octet-stream" );
mimeTypes.setProperty( ".exe", "application/octet-stream" );
mimeTypes.setProperty( ".uu", "application/octet-stream" );
mimeTypes.setProperty( ".ps", "application/postscript" );
mimeTypes.setProperty( ".sh", "application/x-shar" );
mimeTypes.setProperty( ".doc", "application/msword" );
mimeTypes.setProperty( ".pdf", "application/pdf" );
mimeTypes.setProperty( ".ppt", "application/powerpoint" );
mimeTypes.setProperty( ".ps", "application/postscript" );
mimeTypes.setProperty( ".etx", "text/x-setext" );
mimeTypes.setProperty( ".htm", "text/html" );
mimeTypes.setProperty( ".html", "text/html" );
mimeTypes.setProperty( ".rtx", "text/richtext" );
mimeTypes.setProperty( ".sgm", "text/x-sgml" );
mimeTypes.setProperty( ".sgml", "text/x-sgml" );
mimeTypes.setProperty( ".text", "text/plain" );
mimeTypes.setProperty( ".txt", "text/plain" );
mimeTypes.setProperty( ".xml", "text/xml" );
mimeTypes.setProperty( ".xsd", "text/xml" );
mimeTypes.setProperty( ".dtd", "text/xml" );
mimeTypes.setProperty( ".css", "text/css" );
mimeTypes.setProperty( ".js", "text/javascript" );
mimeTypes.setProperty( ".c", "text/plain" );
mimeTypes.setProperty( ".cc", "text/plain" );
mimeTypes.setProperty( ".c++", "text/plain" );
mimeTypes.setProperty( ".h", "text/plain" );
mimeTypes.setProperty( ".pl", "text/plain" );
mimeTypes.setProperty( ".java", "text/plain" );
mimeTypes.setProperty( ".gtar", "application/x-gtar" );
mimeTypes.setProperty( ".gz", "application/x-gzip" ) ;
mimeTypes.setProperty( ".zip", "application/zip" );
mimeTypes.setProperty( ".tar", "application/x-tar" );
mimeTypes.setProperty( ".jar", "application/x-compressed" );
mimeTypes.setProperty( ".bmp", "image/x-xbitmap" );
mimeTypes.setProperty( ".gif", "image/gif" );
mimeTypes.setProperty( ".ief", "image/ief" );
mimeTypes.setProperty( ".jpe", "image/jpeg" );
mimeTypes.setProperty( ".jpeg", "image/jpeg" );
mimeTypes.setProperty( ".jpg", "image/jpeg" );
mimeTypes.setProperty( ".xpm", "image/x-xpixmap" );
mimeTypes.setProperty( ".xwd", "image/x-xwindowdump" );
mimeTypes.setProperty( ".pgm", "image/x-portable-graymap" );
mimeTypes.setProperty( ".png", "image/png" );
mimeTypes.setProperty( ".pnm", "image/x-portable-anymap" );
mimeTypes.setProperty( ".ppm", "image/x-portable-pixmap" );
mimeTypes.setProperty( ".ras", "image/x-cmu-raster" );
mimeTypes.setProperty( ".rgb", "image/x-rgb" );
mimeTypes.setProperty( ".tif", "image/tiff" );
mimeTypes.setProperty( ".tiff", "image/tiff" );
mimeTypes.setProperty( ".xbm", "image/x-xbitmap" );
mimeTypes.setProperty( ".vrml", "model/vrml" );
mimeTypes.setProperty( ".wrl", "model/vrml" );
mimeTypes.setProperty( ".iges", "model/iges" );
mimeTypes.setProperty( ".igs", "model/iges" );
mimeTypes.setProperty( ".mesh", "model/mesh" );
mimeTypes.setProperty( ".silo", "model/mesh" );
}
private String getMIMEType( final String fileName ) {
String result = mimeTypes.getProperty( "" );
int pos = fileName.lastIndexOf( '.' );
if( pos != -1 ) {
String extension = fileName.substring( pos, fileName.length() );
String mime = mimeTypes.getProperty( extension );
if( mime != null && !mime.equals( "" ) ) {
result = mime;
}
}
return result;
}
private static Integer getResourceVersion() {
Integer result = null;
String paramValue
= getRequest().getParameter( RequestParams.RESOURCE_VERSION );
if( paramValue != null ) {
try {
result = new Integer( Integer.parseInt( paramValue ) );
} catch( NumberFormatException e ) {
// ignore - result remains null
}
}
return result;
}
}