flex2.compiler.util.MimeMappings Maven / Gradle / Ivy
/*
*
* 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.
*
*/
package flex2.compiler.util;
import java.util.*;
/**
* Map MIME types to file extensions
*
* @author Clement Wong
*/
public final class MimeMappings
{
public static final String MXML = "text/mxml";
public static final String AS = "text/as";
public static final String FXG = "text/fxg";
public static final String ABC = "application/x-actionscript-bytecode";
public static final String CSS = "text/css";
public static final String PROPERTIES = "text/properties";
public static final String JPEG = "image/jpeg";
public static final String JPG = "image/jpg";
public static final String PNG = "image/png";
public static final String GIF = "image/gif";
public static final String SVG = "image/svg";
public static final String SVG_XML = "image/svg-xml";
public static final String MP3 = "audio/mpeg";
public static final String FLASH = "application/x-shockwave-flash";
public static final String XML = "text/xml";
public static final String TTF = "application/x-font-truetype";
public static final String TTC = "application/x-font-truetype-collection";
public static final String OTF = "application/x-font-opentype";
public static final String FONT = "application/x-font";
public static final String DFONT = "application/x-dfont";
public static final String PBJ = "application/x-pbj";
public static final String TIFF = "image/tiff";
public static final String SKIN = "skin";
public MimeMappings()
{
mimeMappings = new HashMap();
set(MXML, ".mxml");
set(AS, ".as");
set(FXG, ".fxg");
set(ABC, ".abc");
set(CSS, ".css");
set(PROPERTIES, ".properties");
set(JPEG, new String[] { ".jpg", ".jpeg" });
set(JPG, new String[] { ".jpg", ".jpeg" });
set(PNG, ".png");
set(GIF, ".gif");
set(SVG, new String[] { ".svg", ".svgz" });
set(MP3, ".mp3");
set(FLASH, ".swf");
set(XML, ".xml");
set(TTF, ".ttf");
set(TTC, ".ttc");
set(OTF, ".otf");
set(DFONT, ".dfont");
set(PBJ, ".pbj");
set(TIFF, new String[] { ".tiff", ".tif" });
}
/**
* String->{String,String[]}
*/
private Map mimeMappings;
/**
* set file extensions. existing file extensions will be overriden.
*
* @param mimeType
* @param extensions
*/
public void set(String mimeType, String[] extensions)
{
mimeMappings.put(mimeType, extensions);
}
/**
* set file extensions. existing file extensions will be overriden.
*
* @param mimeType
* @param extension
*/
public void set(String mimeType, String extension)
{
mimeMappings.put(mimeType, extension);
}
/**
* add file extensions. keep the existing file extensions.
*
* @param mimeType
* @param extensions
*/
public void add(String mimeType, String[] extensions)
{
if (extensions == null)
{
return;
}
Object value = mimeMappings.get(mimeType);
String[] a = null;
if (value instanceof String[])
{
String[] old = (String[]) value;
a = new String[old.length + extensions.length];
System.arraycopy(old, 0, a, 0, old.length);
System.arraycopy(extensions, 0, a, a.length, extensions.length);
}
else if (value instanceof String)
{
a = new String[1 + extensions.length];
a[0] = (String) value;
System.arraycopy(extensions, 0, a, 1, extensions.length);
}
else
{
a = new String[extensions.length];
System.arraycopy(extensions, 0, a, 0, extensions.length);
}
mimeMappings.put(mimeType, a);
}
/**
* add file extension. keep the existing file extensions.
*
* @param mimeType
* @param extensions
*/
public void add(String mimeType, String extension)
{
if (extension == null)
{
return;
}
Object value = mimeMappings.get(mimeType);
String[] a = null;
if (value instanceof String[])
{
String[] old = (String[]) value;
a = new String[old.length + 1];
System.arraycopy(old, 0, a, 0, old.length);
a[a.length - 1] = extension;
mimeMappings.put(mimeType, a);
}
else if (value instanceof String)
{
a = new String[2];
a[0] = (String) value;
a[1] = extension;
mimeMappings.put(mimeType, a);
}
else
{
mimeMappings.put(mimeType, extension);
}
}
/**
* remove file extensions.
*
* @param mimeType
*/
public void remove(String mimeType)
{
mimeMappings.remove(mimeType);
}
/**
* find a MIME type based on the specified name.
*
* @param name
* @return
*/
public String findMimeType(String name)
{
for (Iterator i = mimeMappings.keySet().iterator(); i.hasNext();)
{
String mimeType = i.next();
Object value = mimeMappings.get(mimeType);
if (value instanceof String[])
{
String[] extensions = (String[]) value;
for (int j = 0, size = extensions.length; j < size; j++)
{
int nlen = name.length();
int elen = extensions[j].length();
if (nlen > elen && name.regionMatches(true, nlen - elen, extensions[j], 0, elen))
{
return mimeType;
}
}
}
else if (value instanceof String)
{
int nlen = name.length();
int elen = ((String) value).length();
if (nlen > elen && name.regionMatches(true, nlen - elen, (String) value, 0, elen))
{
return mimeType;
}
}
}
return null;
}
/**
* find a file extension based on the specified MIME type.
*
* @param mimeType
* @return
*/
public String findExtension(String mimeType)
{
Object value = mimeMappings.get(mimeType);
if (value instanceof String[])
{
// C: should really return a list of extensions...
return ((String[]) value)[0];
}
else if (value instanceof String)
{
return (String) value;
}
else
{
return null;
}
}
// By default, the static methods use ThreacLocal. if the ThreadLocal isn't available,
// the methods will use the static version...
private static MimeMappings statics = new MimeMappings();
public static String getMimeType(String name)
{
// AJH skip threading safety for now
//MimeMappings mappings = ThreadLocalToolkit.getMimeMappings();
//if (mappings == null)
//{
// synchronized(statics)
// {
return statics.findMimeType(name);
// }
//}
//else
//{
// return mappings.findMimeType(name);
//}
}
public static String getExtension(String mimeType)
{
// AJH skip threading safety for now
//MimeMappings mappings = ThreadLocalToolkit.getMimeMappings();
//if (mappings == null)
//{
// synchronized(statics)
// {
return statics.findExtension(mimeType);
// }
//}
//else
//{
// return mappings.findExtension(mimeType);
//}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy