diff -r fe49e33862e2 -r 04b7640f6fb5 themeinstaller/source/src/com/nokia/tools/themeinstaller/odtconverter/MimeTypeResolver.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/themeinstaller/source/src/com/nokia/tools/themeinstaller/odtconverter/MimeTypeResolver.java Wed Sep 01 12:32:13 2010 +0100 @@ -0,0 +1,265 @@ +/* +* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Gets the mime- and resource type using file's name extension + * +*/ + + +package com.nokia.tools.themeinstaller.odtconverter; + +import java.util.Hashtable; + +/** + * Resolves the MimeType and Resource type of the resource to match the file + * name used in the Symbian side. This class is following the behavior of the + * Symbian class XnInstallationHandler.cpp in ...Xuikon\UIManager\src\ + * + * In Symbian, MimeType is TDataType that has TBuf8 and TUid. The constructor + * taking a descriptor of TDataType is as follows: + * + * If descriptor begins with "x-epoc/x-app", identifying data as a native + * Symbian type, then the associated UID is set to the UID value which is + * expected to follow the characters "x-epoc/x-app". If no sensible UID can be + * extracted from the characters following: "x-epoc/x-app", then the associated + * UID is set to KNullUid. + * + * Else Uid is set to KNullDesc and the descriptor is the descriptor given in + * parameter. + * + * In ...Xuikon\UIManager\src\XnInstallationHandler.cpp + * (ImportCompatibleResourcesL) MimeType is constructed using the Descriptor + * that is parsed using file's name extension. Descriptors beginning with + * "x-epoc/x-app" aren't used so TUid part is not implemented. Some of the types + * are left empty in XnInstallationHandler.cpp. This represented as + * EMPTY_MIME_TYPE + * + * Resource types are defined in Symbian side class XnResource.h + * + */ +public class MimeTypeResolver + { + private static Hashtable iResourceTypeAndMimeType; + + public static final int E_RESOURCE_NONE = 0; + public static final int E_RESOURCERLB = 1; + public static final int E_RESOURCEODT = 2; + public static final int E_RESOURCEDTD = 3; + public static final int E_RESOURCEXML = 4; + public static final int E_RESOURCECSS = 5; + public static final int E_RESOURCEDAT = 6; + public static final int E_RESOURCERES = 7; + public static final int E_RESOURCEFBS = 8; + public static final int E_RESOURCEMBM = 9; + public static final int E_RESOURCEMIF = 10; + public static final int E_RESOURCEBMP = 11; + public static final int E_RESOURCEJPG = 12; + public static final int E_RESOURCEJPEG = 13; + public static final int E_RESOURCEPNG = 14; + public static final int E_RESOURCEGIF = 15; + public static final int E_RESOURCEAAC = 16; + public static final int E_RESOURCEWAV = 17; + public static final int E_RESOURCEMID = 18; + public static final int E_RESOURCEMP3 = 19; + public static final int E_RESOURCEM3G = 20; + public static final int E_RESOURCESVG = 21; + public static final int E_RESOURCESWF = 22; + public static final int E_RESOURCEMIME = 23; + public static final int E_RESOURCETXT = 24; + + public static final String KRLB_FILE_EXTENSION = ".r"; + public static final String KODT_FILE_EXTENSION = ".o"; + public static final String KDTD_FILE_EXTENSION = ".dtd"; + public static final String KXML_FILE_EXTENSION = ".xml"; + public static final String KCSS_FILE_EXTENSION = ".css"; + public static final String KDAT_FILE_EXTENSION = ".dat"; + public static final String KFBS_FILE_EXTENSION = ".fbs"; + public static final String KMBM_FILE_EXTENSION = ".mbm"; + public static final String KMIF_FILE_EXTENSION = ".mif"; + public static final String KBMP_FILE_EXTENSION = ".bmp"; + public static final String KJPG_FILE_EXTENSION = ".jpg"; + public static final String KJPEG_FILE_EXTENSION = ".jpeg"; + public static final String KPNG_FILE_EXTENSION = ".png"; + public static final String KGIF_FILE_EXTENSION = ".gif"; + public static final String KAAC_FILE_EXTENSION = ".aac"; + public static final String KWAV_FILE_EXTENSION = ".wav"; + public static final String KMID_FILE_EXTENSION = ".mid"; + public static final String KMP3_FILE_EXTENSION = ".mp3"; + public static final String KM3G_FILE_EXTENSION = ".m3g"; + public static final String KSVG_FILE_EXTENSION = ".svg"; + public static final String KSWF_FILE_EXTENSION = ".swf"; + public static final String KTXT_FILE_EXTENSION = ".txt"; + + public static final String KAPAAPPTYPEDES = "x-epoc/x-app"; + + public static final String TXT_MIME_TYPE = "text/xml"; + public static final String MBM_MIME_TYPE = "image/x-epoc-mbm"; + public static final String EMPTY_MIME_TYPE = ""; + public static final String EMPTY_FILE_EXTENSION = ""; + public static final String WAV_MIME_TYPE = "audio/x-wav"; + public static final String MIDI_MIME_TYPE = "audio/midi"; + public static final String UNKNOWN_MIME_TYPE = "unknown"; + + public static final String NAME_EXTENSION_SEPARATOR = "."; + + /** + * Instantiates a new mimetype resolver. + */ + public MimeTypeResolver() + { + iResourceTypeAndMimeType = new Hashtable(); + iResourceTypeAndMimeType.put( KRLB_FILE_EXTENSION, new ResourceTypeAndMimeType( UNKNOWN_MIME_TYPE, E_RESOURCERLB ) ); + iResourceTypeAndMimeType.put( KODT_FILE_EXTENSION, new ResourceTypeAndMimeType( UNKNOWN_MIME_TYPE, E_RESOURCEODT ) ); + iResourceTypeAndMimeType.put( KDTD_FILE_EXTENSION, new ResourceTypeAndMimeType( UNKNOWN_MIME_TYPE, E_RESOURCEDTD ) ); + iResourceTypeAndMimeType.put( KXML_FILE_EXTENSION, new ResourceTypeAndMimeType( UNKNOWN_MIME_TYPE, E_RESOURCEXML ) ); + iResourceTypeAndMimeType.put( KCSS_FILE_EXTENSION, new ResourceTypeAndMimeType( UNKNOWN_MIME_TYPE, E_RESOURCECSS ) ); + iResourceTypeAndMimeType.put( KDAT_FILE_EXTENSION, new ResourceTypeAndMimeType( UNKNOWN_MIME_TYPE, E_RESOURCEDAT ) ); + iResourceTypeAndMimeType.put( KFBS_FILE_EXTENSION, new ResourceTypeAndMimeType( UNKNOWN_MIME_TYPE, E_RESOURCEFBS ) ); + iResourceTypeAndMimeType.put( KMBM_FILE_EXTENSION, new ResourceTypeAndMimeType( MBM_MIME_TYPE, E_RESOURCEMBM ) ); + iResourceTypeAndMimeType.put( KMIF_FILE_EXTENSION, new ResourceTypeAndMimeType( EMPTY_MIME_TYPE, E_RESOURCEMIF ) ); + iResourceTypeAndMimeType.put( KBMP_FILE_EXTENSION, new ResourceTypeAndMimeType( EMPTY_MIME_TYPE, E_RESOURCEBMP ) ); + iResourceTypeAndMimeType.put( KJPG_FILE_EXTENSION, new ResourceTypeAndMimeType( EMPTY_MIME_TYPE, E_RESOURCEJPG ) ); + iResourceTypeAndMimeType.put( KJPEG_FILE_EXTENSION, new ResourceTypeAndMimeType( EMPTY_MIME_TYPE, E_RESOURCEJPEG ) ); + iResourceTypeAndMimeType.put( KPNG_FILE_EXTENSION, new ResourceTypeAndMimeType( EMPTY_MIME_TYPE, E_RESOURCEPNG ) ); + iResourceTypeAndMimeType.put( KGIF_FILE_EXTENSION, new ResourceTypeAndMimeType( EMPTY_MIME_TYPE, E_RESOURCEGIF ) ); + iResourceTypeAndMimeType.put( KAAC_FILE_EXTENSION, new ResourceTypeAndMimeType( EMPTY_MIME_TYPE, E_RESOURCEAAC ) ); + iResourceTypeAndMimeType.put( KWAV_FILE_EXTENSION, new ResourceTypeAndMimeType( WAV_MIME_TYPE, E_RESOURCEWAV ) ); + iResourceTypeAndMimeType.put( KMID_FILE_EXTENSION, new ResourceTypeAndMimeType( MIDI_MIME_TYPE, E_RESOURCEMID ) ); + iResourceTypeAndMimeType.put( KMP3_FILE_EXTENSION, new ResourceTypeAndMimeType( UNKNOWN_MIME_TYPE, E_RESOURCEMP3 ) ); + iResourceTypeAndMimeType.put( KM3G_FILE_EXTENSION, new ResourceTypeAndMimeType( UNKNOWN_MIME_TYPE, E_RESOURCEM3G ) ); + iResourceTypeAndMimeType.put( KSVG_FILE_EXTENSION, new ResourceTypeAndMimeType( UNKNOWN_MIME_TYPE, E_RESOURCESVG ) ); + iResourceTypeAndMimeType.put( KSWF_FILE_EXTENSION, new ResourceTypeAndMimeType( EMPTY_MIME_TYPE, E_RESOURCESWF ) ); + iResourceTypeAndMimeType.put( KTXT_FILE_EXTENSION, new ResourceTypeAndMimeType( EMPTY_MIME_TYPE, E_RESOURCETXT ) ); + } + + /** + * Gets the MimeType. + * + * @param aFileName The file name + * + * @return The MimeType + */ + public String getMimeType( String aFileName ) + { + return getMimeTypeValue( getFileExtension( aFileName ) ); + } + + /** + * Gets the resource type. + * + * @param aFileName The file name + * + * @return The Resource type + */ + public int getResourceType( String aFileName ) + { + return getResourceTypeValue( getFileExtension( aFileName ) ); + } + + /** + * Gets the mimetype value. + * + * @param aKey The hashtable key is filen name extension + * + * @return The mimetype value + */ + private String getMimeTypeValue( String aKey ) + { + if ( iResourceTypeAndMimeType.containsKey( aKey ) ) + { + ResourceTypeAndMimeType rtamt = ( ResourceTypeAndMimeType ) iResourceTypeAndMimeType.get( aKey ); + return rtamt.getMimeType(); + } + return EMPTY_MIME_TYPE; + } + + /** + * Gets the resource type value. + * + * @param aKey The hashtable key is file name extension + * + * @return The resource type value + */ + private int getResourceTypeValue( String aKey ) + { + if ( iResourceTypeAndMimeType.containsKey( aKey ) ) + { + ResourceTypeAndMimeType rtamt = ( ResourceTypeAndMimeType ) iResourceTypeAndMimeType.get( aKey ); + return rtamt.getResourceType(); + } + return E_RESOURCE_NONE; + } + + /** + * Gets the file extension. + * + * @param aFileName The file name + * + * @return The file extension + */ + private String getFileExtension( String aFileName ) + { + String fileExtension = ""; + if ( aFileName.contains( NAME_EXTENSION_SEPARATOR ) ) + { + fileExtension = aFileName.substring( + aFileName.lastIndexOf( NAME_EXTENSION_SEPARATOR ), + aFileName.length() ).toLowerCase(); + return fileExtension; + } + return EMPTY_FILE_EXTENSION; + } + + /** + * Inner class for containing mimetype - resource type pairs. + */ + private static class ResourceTypeAndMimeType + { + private String iMimeType; + private int iResourceType; + + /** + * Instantiates a new resource type and mime type pair. + * + * @param aMimeType The mime type + * @param aResourceType The resource type + */ + public ResourceTypeAndMimeType( String aMimeType, int aResourceType ) + { + iMimeType = aMimeType; + iResourceType = aResourceType; + } + + /** + * Gets the mimetype. + * + * @return The mimetype + */ + public String getMimeType() + { + return iMimeType; + } + + /** + * Gets the resource type. + * + * @return The resource type + */ + public int getResourceType() + { + return iResourceType; + } + + } + + }