diff -r 000000000000 -r 05da4621cfb2 themeinstaller/source/src/com/nokia/tools/themeinstaller/ui/ThemeInstaller.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/themeinstaller/source/src/com/nokia/tools/themeinstaller/ui/ThemeInstaller.java Tue Feb 02 00:15:44 2010 +0200 @@ -0,0 +1,313 @@ +/* +* 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: Standalone UI + * +*/ + + +package com.nokia.tools.themeinstaller.ui; + +import java.io.File; +import java.io.IOException; +import com.nokia.tools.themeinstaller.installationmanager.IInstallationListener; +import com.nokia.tools.themeinstaller.installationmanager.InstallationManager; +import com.nokia.tools.themeinstaller.installationmanager.InstallationParameters; +import com.nokia.tools.themeinstaller.installationmanager.Lock; +import com.nokia.tools.themeinstaller.installationmanager.ProgressEvent; +import com.nokia.tools.themeinstaller.logger.LogWriter; + +public class ThemeInstaller + { + + // CONSTANTS + // Error message prefix + private final static String ERROR_PREFIX = "*** ERROR: "; + + // Usage instructions + private final static String USAGE = + "\nUSAGE: ThemeInstaller manifest_file [destination_dir] [-option_1] [-option_n]\n" + + "\nOptions:" + + "\n -loc: Enable localisation enhancements" + + "\n -prop: Use external properties file instead of the default one" + + "\n -log: Path for log file" + + "\n -log If no path given, the log is printed to console\n"; + //"\n -fixDTD Use if tool should attempt to fix errors in dtd\n"; + + + // Command line options + private final static String OPTION_PREFIX = "-"; + private final static String LOC_OPTION = "loc:"; + private final static String PROP_OPTION = "prop:"; + private final static String LOG_PATH_OPTION = "log:"; + private final static String LOG_PATH_OPTION_NO_PATH = "log"; + private final static String FIX_INVALID_DTD_PARAMS = "fixDTD"; + + // Lock object for waiting the install to complete + private Lock iLock; + + // Manifest file + protected String iManifest; + + // Destination directory + protected String iDestination; + + // Localisation settings file + protected String iLocSettings; + + // External properties file + protected String iPropertiesFile; + + // Logging directory + protected String iLogDir; + + /** + * Application entry point + * @param aArgs application arguments + */ + public static void main( String[] aArgs ) + { + ThemeInstaller instance = new ThemeInstaller(); + instance.install( aArgs ); + } + + /** + * Constructor. + */ + protected ThemeInstaller() + { + iLock = new Lock(); + } + + /** + * Starts the installation process. Parses the arguments before + * staring the installation. + * @param aArgs Application arguments + */ + protected void install( String[] aArgs ) + { + try + { + parseArgs( aArgs ); + } + catch( IllegalArgumentException iae ) + { + //System.out.println( ERROR_PREFIX + iae.getMessage() ); + System.out.println("ThemeInstaller version 2.0.0"); + System.out.println("Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved"); + System.out.println(""); + System.out.println( USAGE ); + return; + } + catch ( IOException e ) + { + System.out.println( ERROR_PREFIX + e.getMessage() ); + } + + try + { + doInstall(); + } + catch ( Exception e ) + { + String error = ERROR_PREFIX + "Installation failed: " + + e.getMessage(); + if ( !LogWriter.getInstance().inConsoleMode() ) + { + System.out.println( error ); + } + LogWriter.getInstance().logSevere( error ); + } + finally + { + LogWriter.closeInstance(); + } + } + + /** + * Execute the installation + * @param aManifest theme manifest file name + * @param aDestination destination directory + * @throws Exception if installation fails + */ + protected void doInstall() throws Exception + { + InstallationParameters params = new InstallationParameters( + new File( iManifest ), new File( iDestination ) ); + + LogWriter.getInstance().logInfo( "Starting Installer" ); + LogWriter.getInstance().logInfo( "Manifest file : " + iManifest ); + LogWriter.getInstance().logInfo( "Destination directory : " + iDestination ); + + if( iLocSettings != null ) + { + params.setLocSettings( new File( iLocSettings ) ); + LogWriter.getInstance().logInfo( "Settings file : " + params.getLocSettings().getPath() ); + } + if( iPropertiesFile != null ) + { + params.setPropFile( new File ( iPropertiesFile ) ); + LogWriter.getInstance().logInfo( "Properties file : " + params.getPropFile().getPath() ); + } + + IInstallationListener listener = new IInstallationListener() + { + public void installationCompleted( ProgressEvent aEvent ) + { + if( aEvent.getError() == IInstallationListener.NO_ERROR ) + { + if ( !LogWriter.getInstance().inConsoleMode() ) + { + System.out.println( "Installation done." ); + } + LogWriter.getInstance().logInfo( "Installation done" ); + } + else + { + String error = ERROR_PREFIX + + "Installation failed, error: " + + aEvent.getError() + ", " + + aEvent.getMessage(); + if ( !LogWriter.getInstance().inConsoleMode() ) + { + System.out.println( error ); + } + LogWriter.getInstance().logSevere( error ); + } + + // release lock + iLock.unLock(); + } + + public void installationProgress( ProgressEvent aEvent ) + { + if( aEvent.getState() == IInstallationListener.STATE_PARSED ) + { + String message = "Resource files parsing done,"; + if( aEvent.getError() != IInstallationListener.NO_ERROR ) { + message += " error: " + aEvent.getError() + ","; + } + message += " theme: " + + aEvent.getName() + ", language: " + + aEvent.getLanguage(); + + + if ( !LogWriter.getInstance().inConsoleMode() ) + { + System.out.println( message ); + } + LogWriter.getInstance().logInfo( message ); + } + else if ( aEvent.getState() == IInstallationListener.STATE_WRITED ) + { + String message = "Installed ODT: " + + aEvent.getFileName(); + if ( !LogWriter.getInstance().inConsoleMode() ) + { + System.out.println( message ); + } + LogWriter.getInstance().logInfo( message ); + } + } + }; + + InstallationManager i = new InstallationManager( params, listener ); + i.startInstallation(); + + // wait for finalization + iLock.lock(); + } + + /** + * Parse command line arguments. + * @param aArgs Command line arguments + * @throws IllegalArgumentException if mandatory command line parameters + * are not defined + * @throws IOException Signals that an I/O exception has occurred. + */ + protected void parseArgs( String[] aArgs ) throws IllegalArgumentException, + IOException + { + // Print usage information if mandatory arguments were not specified + if( aArgs.length == 0 ) + { + throw new IllegalArgumentException( "No command line arguments" ); + } + + // Resolve manifest file name and destination directory + iManifest = aArgs[ 0 ]; + if( aArgs.length > 1 && + !aArgs[ 1 ].startsWith( OPTION_PREFIX ) ) + { + iDestination = aArgs[ 1 ]; + } + else + { + // If no destination directory is specified, use the current dir + iDestination = System.getProperty( "user.dir" ); + } + + // Parse the options + for( int i = 1; i < aArgs.length; i++ ) + { + //fix DTD + String opt = OPTION_PREFIX + FIX_INVALID_DTD_PARAMS; + if ( aArgs[ i ].toLowerCase().startsWith( opt.toLowerCase() )) { + InstallationManager.setFixDTD(true); + } + + // Localisation settings + opt = OPTION_PREFIX + LOC_OPTION; + if( aArgs[ i ].startsWith( opt ) ) + { + iLocSettings = aArgs[ i ].substring( opt.length() ); + if( iLocSettings.length() == 0 ) + { + throw new IllegalArgumentException( "No localisation settings file defined with the option" ); + } + } + // External properties file + opt = OPTION_PREFIX + PROP_OPTION; + if( aArgs[ i ].startsWith( opt ) ) + { + iPropertiesFile = aArgs[ i ].substring( opt.length() ); + if( iPropertiesFile.length() == 0 ) + { + throw new IllegalArgumentException( "No external properties file name defined with the option" ); + } + } + // Logging without path (option "-log") + opt = OPTION_PREFIX + LOG_PATH_OPTION_NO_PATH; + if ( aArgs[ i ].equals( opt ) ) + { + // No logging file defined + LogWriter.initialize( null ); + } + // Logging with path or with option "-log:" + opt = OPTION_PREFIX + LOG_PATH_OPTION; + if ( aArgs[ i ].startsWith( opt ) ) + { + iLogDir = aArgs[ i ].substring( opt.length() ); + if ( iLogDir.length() == 0 ) + { + // No logging file defined + LogWriter.initialize( null ); + } + else + { + LogWriter.initialize( new File( iLogDir ) ); + } + } + } + } + }