--- /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:<loc_settings_filename.xml> Enable localisation enhancements" +
+ "\n -prop:<properties_filename.prop> Use external properties file instead of the default one" +
+ "\n -log:<path> 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 ) );
+ }
+ }
+ }
+ }
+ }