diff -r b4183b61e0c7 -r 58764cb313d3 themeinstaller/source/src/com/nokia/tools/themeinstaller/defrep/DefinitionRepository.java --- a/themeinstaller/source/src/com/nokia/tools/themeinstaller/defrep/DefinitionRepository.java Tue Jan 26 13:19:36 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,237 +0,0 @@ -/* - * 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: Definition Repository implementation - * - */ - -package com.nokia.tools.themeinstaller.defrep; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.Observer; - -import com.nokia.tools.themeinstaller.odtconverter.ConverterProperties; -import com.nokia.tools.themeinstaller.odtconverter.ODTHeader; -import com.nokia.tools.themeinstaller.odtconverter.ThemeStatusResolver; -import com.nokia.tools.themeinstaller.defrep.operations.CopyOperation; -import com.nokia.tools.themeinstaller.defrep.operations.FileOperation; -import com.nokia.tools.themeinstaller.defrep.operations.StoreOperation; - -/** - * Definition repository class. - */ -public class DefinitionRepository implements IDefinitionRepository { - - // CONSTANTS - // Property keys - private static final String THEMES_ROOT_ROM = "themes_datacage_rom"; - private static final String THEMES_ROOT_USER_DISC = "themes_datacage_user_disc"; - private static final String ODT_FILE_EXT_FORMAT = "odt_file_ext_format"; - private static final String ODT_RESOURCES_FOLDER = "odt_resources_folder"; - private static final String ODT_LANG_RESOURCES_FOLDER = "odt_lang_resources_folder"; - - // Singleton instance - private static DefinitionRepository sInstance = null; - - /** - * Definition repository private constructor. - */ - private DefinitionRepository() { - } - - /** - * Get a Definition Repository instance (singleton). - * - * @return Definition Repository instance - */ - public static DefinitionRepository getInstance() { - if (sInstance == null) { - sInstance = new DefinitionRepository(); - } - - return sInstance; - } - - /* - * (non-Javadoc) - * - * @see - * com.nokia.tools.odtconverter.defrep.IDefinitionRepository#copy(java.lang - * .String, java.util.Observer) - */ - public void copy(File aSource, File aDestination, boolean aAppend, - Observer aListener) { - CopyOperation operation = new CopyOperation(aSource, aDestination, - aAppend); - operation.addObserver(aListener); - performOperation(operation); - } - - /* - * (non-Javadoc) - * - * @see - * com.nokia.tools.odtconverter.defrep.IDefinitionRepository#store(java. - * lang.String, java.io.InputStream, java.util.Observer) - */ - public void store(File aDestination, InputStream aStream, Observer aListener) { - StoreOperation operation = new StoreOperation(aDestination, aStream); - operation.addObserver(aListener); - performOperation(operation); - } - - /* - * (non-Javadoc) - * - * @see - * com.nokia.tools.odtconverter.defrep.IDefinitionRepository#storeODT(java - * .io.File, com.nokia.tools.odtconverter.ODTDocument, java.util.Observer) - */ - public void storeODT(File aDestination, ODTHeader aHeader, - InputStream aStream, Observer aListener) throws IOException { - File destination = new File(createODTPath(aDestination, aHeader)); - store(destination, aStream, aListener); - } - - /* - * (non-Javadoc) - * - * @see - * com.nokia.tools.odtconverter.defrep.IDefinitionRepository#copyResource - * (java.io.File, java.io.File, com.nokia.tools.odtconverter.ODTHeader, - * java.util.Observer) - */ - public void copyResource(File aSource, File aDestination, - ODTHeader aHeader, Observer aListener) throws IOException { - ConverterProperties properties = ConverterProperties.getInstance(); - StringBuffer odtPath = combineDirectory(aDestination, aHeader, - properties); - - // Get the language to resolve the destination directory - Integer language = (Integer) aHeader.get(ODTHeader.Language); - if (language != null) { - // Location for language specific resources - String template = properties.getProperty(ODT_LANG_RESOURCES_FOLDER); - - Integer[] formatArguments = { language }; - odtPath.append(String.format(template, formatArguments)); - } else { - // Location for language independent resources - odtPath.append(properties.get(ODT_RESOURCES_FOLDER)); - } - - odtPath.append(aSource.getName()); - File destFile = new File(odtPath.toString()); - copy(aSource, destFile, false, aListener); - } - - /* - * (non-Javadoc) - * - * @see - * com.nokia.tools.odtconverter.defrep.IDefinitionRepository#createODTPath - * (java.lang.String, com.nokia.tools.odtconverter.ODTHeader, - * com.nokia.tools.odtconverter.ConverterProperties) - */ - public String createODTPath(File aDestination, ODTHeader aHeader) { - // Get themes installation directory from the properties - ConverterProperties properties = ConverterProperties.getInstance(); - - StringBuffer odtPath = combineDirectory(aDestination, aHeader, - properties); - - // Append ODT file name - odtPath.append(aHeader.get(ODTHeader.ThemeShortName)); - - // Append extension according to the language - String format = properties.getProperty(ODT_FILE_EXT_FORMAT); - Integer[] formatArguments = { (Integer) aHeader.get(ODTHeader.Language) }; - odtPath.append(String.format(format, formatArguments)); - - return odtPath.toString(); - } - - /** - * Combine the installation directory structure. According to the Xuikon, - * the destination directory for locked themes is ROM location. Other themes - * are stored to the user disk. Rest of the path is determined by theme - * details: Application UID, Provider UID, Theme UID and Theme Version. - * - * @param aDestination - * destination root directory, usually the epoc root - * @param aHeader - * ODT file header - * @param aProperties - * converter properties instance - * @return complete destination path name for the installed theme - */ - private StringBuffer combineDirectory(File aDestination, ODTHeader aHeader, - ConverterProperties aProperties) { - StringBuffer odtPath = new StringBuffer(); - odtPath.append(aDestination.getPath()); - - // Add file separator only if the destination directory does not - // already end with the separator - if (!aDestination.getPath().endsWith(File.separator)) { - odtPath.append(File.separator); - } - - // if EXnThemeStatusLicenceeDefault flag is set, - // theme is installed to ROM (z:\) otherwise to user disc (c:\) - if ((((Integer) aHeader.get(ODTHeader.Flags)).intValue() & ThemeStatusResolver.E_XN_THEME_STATUS_LICENCEE_DEFAULT) != 0) { - odtPath.append(aProperties.getProperty(THEMES_ROOT_ROM)); - } else { - odtPath.append(aProperties.getProperty(THEMES_ROOT_USER_DISC)); - } - - //Bypass adding appuid etc, if we don't have these properties - if (aHeader.get(ODTHeader.ApplicationUID) != null && aHeader.get(ODTHeader.ProviderUID)!= null - && aHeader.get(ODTHeader.ThemeUID) != null && aHeader.get(ODTHeader.ThemeVersion) != null){ - // Append Application UID - odtPath.append(((Long) aHeader.get(ODTHeader.ApplicationUID)) - .longValue()); - - odtPath.append(File.separator); - - // Append Provider UID - odtPath.append(((Long) aHeader.get(ODTHeader.ProviderUID)) - .longValue()); - odtPath.append(File.separator); - - // Append Theme UID - odtPath - .append(((Long) aHeader.get(ODTHeader.ThemeUID)) - .longValue()); - odtPath.append(File.separator); - - // Append Theme version - odtPath.append(aHeader.get(ODTHeader.ThemeVersion)); - odtPath.append(File.separator); - } - return odtPath; - } - - /** - * Start a file operation in a new thread. - * - * @param aOperation - * The operation to start. - */ - private void performOperation(FileOperation aOperation) { - Thread thread = new Thread(aOperation); - thread.start(); - } - -}