You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2007/01/08 13:46:21 UTC
svn commit: r494047 - in /harmony/enhanced/classlib/trunk: depends/files/
make/ modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/
modules/luni/src/test/java/tests/api/java/net/
Author: tellison
Date: Mon Jan 8 04:46:20 2007
New Revision: 494047
URL: http://svn.apache.org/viewvc?view=rev&rev=494047
Log:
Fix for URLConnection#getFileNameMap() which should look for a file located via a user defined property
otherwise load a set of defaults from lib/content-types.properties under java home.
Added:
harmony/enhanced/classlib/trunk/depends/files/content-types.properties (with props)
Modified:
harmony/enhanced/classlib/trunk/make/build-java.xml
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/MimeTable.java
harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/URLConnectionTest.java
Added: harmony/enhanced/classlib/trunk/depends/files/content-types.properties
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/depends/files/content-types.properties?view=auto&rev=494047
==============================================================================
--- harmony/enhanced/classlib/trunk/depends/files/content-types.properties (added)
+++ harmony/enhanced/classlib/trunk/depends/files/content-types.properties Mon Jan 8 04:46:20 2007
@@ -0,0 +1,179 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# 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.
+
+#
+# MIME-types properties file.
+#
+
+#
+# All these MIME types were taken from the Apache httpd mime.types file
+# which can be found here:
+# http://svn.apache.org/viewvc/httpd/httpd/branches/1.3.x/conf/mime.types?revision=106443&view=markup
+#
+
+ai=application/postscript
+aif=audio/x-aiff
+aifc=audio/x-aiff
+aiff=audio/x-aiff
+asc=text/plain
+atom=application/atom+xml
+au=audio/basic
+avi=video/x-msvideo
+bcpio=application/x-bcpio
+bin=application/octet-stream
+bmp=image/bmp
+cdf=application/x-netcdf
+cgm=image/cgm
+class=application/octet-stream
+cpio=application/x-cpio
+cpt=application/mac-compactpro
+csh=application/x-csh
+css=text/css
+dcr=application/x-director
+dir=application/x-director
+djv=image/vnd.djvu
+djvu=image/vnd.djvu
+dll=application/octet-stream
+dmg=application/octet-stream
+dms=application/octet-stream
+doc=application/msword
+dtd=application/xml-dtd
+dvi=application/x-dvi
+dxr=application/x-director
+eps=application/postscript
+etx=text/x-setext
+exe=application/octet-stream
+ez=application/andrew-inset
+gif=image/gif
+gram=application/srgs
+grxml=application/srgs+xml
+gtar=application/x-gtar
+hdf=application/x-hdf
+hqx=application/mac-binhex40
+htm=text/html
+html=text/html
+ice=x-conference/x-cooltalk
+ico=image/x-icon
+ics=text/calendar
+ief=image/ief
+ifb=text/calendar
+iges=model/iges
+igs=model/iges
+jpe=image/jpeg
+jpeg=image/jpeg
+jpg=image/jpeg
+js=application/x-javascript
+kar=audio/midi
+latex=application/x-latex
+lha=application/octet-stream
+lzh=application/octet-stream
+m3u=audio/x-mpegurl
+m4u=video/vnd.mpegurl
+man=application/x-troff-man
+mathml=application/mathml+xml
+me=application/x-troff-me
+mesh=model/mesh
+mid=audio/midi
+midi=audio/midi
+mif=application/vnd.mif
+mov=video/quicktime
+movie=video/x-sgi-movie
+mp2=audio/mpeg
+mp3=audio/mpeg
+mpe=video/mpeg
+mpeg=video/mpeg
+mpg=video/mpeg
+mpga=audio/mpeg
+ms=application/x-troff-ms
+msh=model/mesh
+mxu=video/vnd.mpegurl
+nc=application/x-netcdf
+oda=application/oda
+ogg=application/ogg
+pbm=image/x-portable-bitmap
+pdb=chemical/x-pdb
+pdf=application/pdf
+pgm=image/x-portable-graymap
+pgn=application/x-chess-pgn
+png=image/png
+pnm=image/x-portable-anymap
+ppm=image/x-portable-pixmap
+ppt=application/vnd.ms-powerpoint
+ps=application/postscript
+qt=video/quicktime
+ra=audio/x-pn-realaudio
+ram=audio/x-pn-realaudio
+ras=image/x-cmu-raster
+rdf=application/rdf+xml
+rgb=image/x-rgb
+rm=application/vnd.rn-realmedia
+roff=application/x-troff
+rtf=text/rtf
+rtx=text/richtext
+sgm=text/sgml
+sgml=text/sgml
+sh=application/x-sh
+shar=application/x-shar
+silo=model/mesh
+sit=application/x-stuffit
+skd=application/x-koan
+skm=application/x-koan
+skp=application/x-koan
+skt=application/x-koan
+smi=application/smil
+smil=application/smil
+snd=audio/basic
+so=application/octet-stream
+spl=application/x-futuresplash
+src=application/x-wais-source
+sv4cpio=application/x-sv4cpio
+sv4crc=application/x-sv4crc
+svg=image/svg+xml
+swf=application/x-shockwave-flash
+t=application/x-troff
+tar=application/x-tar
+tcl=application/x-tcl
+tex=application/x-tex
+texi=application/x-texinfo
+texinfo=application/x-texinfo
+tif=image/tiff
+tiff=image/tiff
+tr=application/x-troff
+tsv=text/tab-separated-values
+txt=text/plain
+ustar=application/x-ustar
+vcd=application/x-cdlink
+vrml=model/vrml
+vxml=application/voicexml+xml
+wav=audio/x-wav
+wbmp=image/vnd.wap.wbmp
+wbxml=application/vnd.wap.wbxml
+wml=text/vnd.wap.wml
+wmlc=application/vnd.wap.wmlc
+wmls=text/vnd.wap.wmlscript
+wmlsc=application/vnd.wap.wmlscriptc
+wrl=model/vrml
+xbm=image/x-xbitmap
+xht=application/xhtml+xml
+xhtml=application/xhtml+xml
+xls=application/vnd.ms-excel
+xml=application/xml
+xpm=image/x-xpixmap
+xsl=application/xml
+xslt=application/xslt+xml
+xul=application/vnd.mozilla.xul+xml
+xwd=image/x-xwindowdump
+xyz=chemical/x-xyz
+zip=application/zip
Propchange: harmony/enhanced/classlib/trunk/depends/files/content-types.properties
------------------------------------------------------------------------------
svn:eol-style = native
Modified: harmony/enhanced/classlib/trunk/make/build-java.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/make/build-java.xml?view=diff&rev=494047&r1=494046&r2=494047
==============================================================================
--- harmony/enhanced/classlib/trunk/make/build-java.xml (original)
+++ harmony/enhanced/classlib/trunk/make/build-java.xml Mon Jan 8 04:46:20 2007
@@ -234,6 +234,12 @@
</copy>
<!-- Copy across the support files -->
+ <copy todir="${hy.jdk}/jre/lib">
+ <fileset dir="${depends.files}">
+ <include name="content-types.properties" />
+ </fileset>
+ </copy>
+
<copy todir="${hy.jdk}/jre/lib/boot">
<fileset dir="${depends.files}">
<include name="bootclasspath.properties" />
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/MimeTable.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/MimeTable.java?view=diff&rev=494047&r1=494046&r2=494047
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/MimeTable.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/MimeTable.java Mon Jan 8 04:46:20 2007
@@ -17,6 +17,8 @@
package org.apache.harmony.luni.internal.net.www;
+import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.FileNameMap;
@@ -27,11 +29,10 @@
/**
* Instances of this class map file extensions to MIME content types based on a
* default MIME table.
- * <p>
+ *
* The default values can be overridden by modifying the contents of the file
- * "types.properties".
+ * "content-types.properties".
*/
-
public class MimeTable implements FileNameMap {
public static final String UNKNOWN = "content/unknown"; //$NON-NLS-1$
@@ -43,44 +44,81 @@
// Default mapping.
static {
- types.put("text", "text/plain"); //$NON-NLS-1$ //$NON-NLS-2$
- types.put("txt", "text/plain"); //$NON-NLS-1$ //$NON-NLS-2$
- types.put("htm", "text/html"); //$NON-NLS-1$ //$NON-NLS-2$
- types.put("html", "text/html"); //$NON-NLS-1$ //$NON-NLS-2$
+ types.setProperty("text", "text/plain"); //$NON-NLS-1$ //$NON-NLS-2$
+ types.setProperty("txt", "text/plain"); //$NON-NLS-1$ //$NON-NLS-2$
+ types.setProperty("htm", "text/html"); //$NON-NLS-1$ //$NON-NLS-2$
+ types.setProperty("html", "text/html"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* Contructs a MIME table using the default values defined in this class.
- * <p>
- * It then augments this table by reading pairs of extensions and matching
- * content types from the file "types.properties", which is represented in
- * standard java.util.Properties.load(...) format.
+ *
+ * It then augments this table by reading pairs of extensions and
+ * corresponding content types from the file "content-types.properties",
+ * which is represented in standard java.util.Properties.load(...) format.
*/
public MimeTable() {
InputStream str = AccessController
.doPrivileged(new PrivilegedAction<InputStream>() {
public InputStream run() {
- return MimeTable.this.getClass().getResourceAsStream(
- "types.properties"); //$NON-NLS-1$
+ return getContentTypes();
}
});
- try {
- if (str != null) {
- types.load(str);
+ if (str != null) {
+ try {
+ try {
+ types.load(str);
+ } finally {
+ str.close();
+ }
+ } catch (IOException ex) {
+ // Ignore
}
- } catch (IOException ex) {
- // Ignored
}
}
/**
+ * Answer an InputStream over an external properties file containing the
+ * MIME types.
+ *
+ * Looks in the location specified in the user property, and then in the
+ * expected location.
+ *
+ * @return the InputStream, or null if none.
+ */
+ private InputStream getContentTypes() {
+ // User override?
+ String userTable = System.getProperty("content.types.user.table"); //$NON-NLS-1$
+ if (userTable != null) {
+ try {
+ return new FileInputStream(userTable);
+ } catch (IOException e) {
+ // Ignore invalid values
+ }
+ }
+
+ // Standard location?
+ String javahome = System.getProperty("java.home"); //$NON-NLS-1$
+ File contentFile = new File(javahome, "lib" //$NON-NLS-1$
+ + File.separator + "content-types.properties"); //$NON-NLS-1$
+ try {
+ return new FileInputStream(contentFile);
+ } catch (IOException e) {
+ // Not found or can't read
+ }
+
+ return null;
+ }
+
+ /**
* Determines the MIME type for the given filename.
*
- * @return java.lang.String The mime type associated with the file's
- * extension or null if no mapping is known.
* @param filename
- * java.lang.String The file whose extension will be mapped.
+ * The file whose extension will be mapped.
+ *
+ * @return The mime type associated with the file's extension or null if no
+ * mapping is known.
*/
public String getContentTypeFor(String filename) {
if (filename.endsWith("/")) { //$NON-NLS-1$
@@ -96,7 +134,6 @@
if (firstCharInExtension > filename.lastIndexOf('/')) {
ext = filename.substring(firstCharInExtension, lastCharInExtension);
}
- return (String) types.get(ext.toLowerCase());
+ return types.getProperty(ext.toLowerCase());
}
-
}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/URLConnectionTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/URLConnectionTest.java?view=diff&rev=494047&r1=494046&r2=494047
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/URLConnectionTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/URLConnectionTest.java Mon Jan 8 04:46:20 2007
@@ -224,14 +224,28 @@
* @tests java.net.URLConnection#getFileNameMap()
*/
public void test_getFileNameMap() {
+ // Tests for the standard MIME types -- users may override these
+ // in their JRE
+ FileNameMap map = URLConnection.getFileNameMap();
+
+ // These types are defaulted
+ assertEquals("text/html", map.getContentTypeFor("htm"));
+ assertEquals("text/html", map.getContentTypeFor("html"));
+ assertEquals("text/plain", map.getContentTypeFor("text"));
+ assertEquals("text/plain", map.getContentTypeFor("txt"));
+
+ // These types come from the properties file
+ assertEquals("application/pdf", map.getContentTypeFor("pdf"));
+ assertEquals("application/zip", map.getContentTypeFor("zip"));
+
URLConnection.setFileNameMap(new FileNameMap() {
public String getContentTypeFor(String fileName) {
return "Spam!";
}
});
try {
- assertEquals("Incorrect FileNameMap returned", "Spam!", URLConnection.getFileNameMap()
- .getContentTypeFor(null));
+ assertEquals("Incorrect FileNameMap returned", "Spam!",
+ URLConnection.getFileNameMap().getContentTypeFor(null));
} finally {
// unset the map so other tests don't fail
URLConnection.setFileNameMap(null);