themeinstaller/source/src/com/nokia/tools/themeinstaller/installationmanager/LanguageInstaller.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/themeinstaller/source/src/com/nokia/tools/themeinstaller/installationmanager/LanguageInstaller.java Tue Feb 02 00:15:44 2010 +0200
@@ -0,0 +1,257 @@
+/*
+* 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: Uses ODTConverter for parsing the source files.
+ *
+*/
+
+
+package com.nokia.tools.themeinstaller.installationmanager;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Vector;
+
+import com.nokia.tools.themeinstaller.localisation.Localisation;
+import com.nokia.tools.themeinstaller.localisation.LocalisationStore;
+import com.nokia.tools.themeinstaller.odtconverter.IParseOperationListener;
+import com.nokia.tools.themeinstaller.odtconverter.ODTConverter;
+import com.nokia.tools.themeinstaller.odtconverter.ODTDocument;
+import com.nokia.tools.themeinstaller.odtconverter.ODTHeader;
+import com.nokia.tools.themeinstaller.odtconverter.ODTResource;
+
+/**
+ * Language Installer uses the ODTConverter for parsing the source files of
+ * a language variant.
+ */
+public class LanguageInstaller
+ extends Observable implements IParseOperationListener
+ {
+
+ // ODT Document
+ private ODTDocument iODTDocument;
+
+ // ODT Converter
+ private ODTConverter iConverter;
+
+ // Theme manifest
+ private IThemeManifest iManifest;
+
+ // Language variant
+ private LanguageSpecificData iLanguage;
+
+ // Resource files
+ private Vector iResources;
+
+ // Resource installer
+ private IResourceInstaller iResourceInstaller;
+
+ // Localisation settings file
+ private File iLocSettings;
+
+ /**
+ * Constructor.
+ * @param aListener Listener for the parsing operation conversion
+ * @param aManifest Theme manifest
+ * @param aLanguage Language variant to to install
+ * @param
+ */
+ public LanguageInstaller( Observer aListener,
+ IThemeManifest aManifest,
+ LanguageSpecificData aLanguage,
+ File aLocSettings,
+ IResourceInstaller aResourceInstaller )
+ {
+ iODTDocument = new ODTDocument();
+ iConverter = new ODTConverter();
+ iConverter.addListener( this );
+ iManifest = aManifest;
+ iLanguage = aLanguage;
+ iLocSettings = aLocSettings;
+ iResources = new Vector();
+ iResourceInstaller = aResourceInstaller;
+ addObserver( aListener );
+ }
+
+ /**
+ * Add ODT Resources. This method can be used i.e. for adding language
+ * independent ODT Resources.
+ * @param aODTResources a list of resources to add
+ */
+ public void addResources( Vector aResources )
+ {
+ iResources.addAll( aResources );
+ }
+
+ /**
+ * Start the installation process of the language.
+ * @throws IOException if parse operation fails
+ */
+ public void install() throws IOException
+ {
+ ODTHeader header = createHeader( iManifest, iLanguage );
+ iODTDocument.setODTHeader( header );
+
+ // Install and add language specific resources
+ Vector langResources = iLanguage.getResources();
+ Vector odtLangResources = iResourceInstaller
+ .installResources( langResources, header );
+ odtLangResources.addAll( iResources );
+
+ // Add ODT file as resource
+ ODTResource langODTResource = iResourceInstaller
+ .createODTResource( header, iManifest.getNameSpace() );
+ odtLangResources.add( langODTResource );
+ iODTDocument.setODTResources( odtLangResources );
+
+ String dataDir = iManifest.getDataDir();
+ String dtdName = null;
+ File dtdFile = null;
+
+ // Determine the DTD file to use
+ if( iLanguage.getDTDFile() != null )
+ {
+ // Language specific DTD
+ dtdName = iLanguage.getDTDFile();
+ }
+ else if( iManifest.getDTDFile() != null )
+ {
+ // Language independent DTD
+ dtdName = iManifest.getDTDFile();
+ }
+
+ // Check if enhanced localisation support is enabled
+ if( iLocSettings != null && dtdName != null )
+ {
+ // Use enhanced localisation: Find and compose the DTD file
+ LocalisationStore ls = LocalisationStore.getInstance( iLocSettings );
+ Localisation l = ls.getLocalisation(
+ iManifest.getApplicationUid().longValue(),
+ iManifest.getProviderUid().longValue(),
+ iManifest.getThemeUid().longValue() );
+ dtdFile = l.composeDTD( dtdName, iLanguage.getLanguageId().intValue() );
+ }
+ else if( dtdName != null )
+ {
+ // Use the standard localisation
+ dtdFile = new File( dataDir + dtdName );
+ }
+
+ // Add XML to the converter
+ if( dtdFile != null )
+ {
+ // External DTD file found
+ iConverter.addXML( dataDir + iManifest.getXMLFile(),
+ dtdFile.getPath() );
+ }
+ else
+ {
+ // Do not use external DTD
+ iConverter.addXML( dataDir + iManifest.getXMLFile() );
+ }
+
+ // Add CSS to the converter, if available
+ if( iLanguage.getCSSFile() != null )
+ {
+ // Use language specific CSS
+ iConverter.addCSS( dataDir + iLanguage.getCSSFile() );
+ }
+ else if( iManifest.getCSSFile() != null )
+ {
+ // Use theme specific CSS
+ iConverter.addCSS( dataDir + iManifest.getCSSFile() );
+ }
+
+ // Start the installation process
+ try
+ {
+ iConverter.parse();
+ }
+ catch ( Exception e )
+ {
+ throw new IllegalArgumentException( "Failed to read resource files" );
+ }
+ }
+
+ /**
+ * Creates ODTHeader from manifest data
+ * @param aManifest Theme manifest
+ * @param aLanguage Language. If language is null, no language
+ * specific data is processed.
+ * @return new ODT Header
+ */
+ public static ODTHeader createHeader( IThemeManifest aManifest,
+ LanguageSpecificData aLanguage )
+ {
+ ODTHeader header = new ODTHeader();
+ if(null!=aManifest.getApplicationUid())
+ header.put( ODTHeader.ApplicationUID, aManifest.getApplicationUid() );
+
+ if(null!=aManifest.getProviderUid())
+ header.put( ODTHeader.ProviderUID, aManifest.getProviderUid() );
+
+ if(null!=aManifest.getThemeUid())
+ header.put( ODTHeader.ThemeUID, aManifest.getThemeUid() );
+
+ if(null!=aManifest.getProviderName())
+ header.put( ODTHeader.ProviderName, aManifest.getProviderName() );
+
+ if(null!=aManifest.getThemeFullName())
+ header.put( ODTHeader.ThemeFullName, aManifest.getThemeFullName() );
+
+ if(null!=aManifest.getThemeShortName())
+ header.put( ODTHeader.ThemeShortName, aManifest.getThemeShortName() );
+
+ if(null!=aManifest.getThemeVersion())
+ header.put( ODTHeader.ThemeVersion, aManifest.getThemeVersion() );
+
+ if(null!=aManifest.getScreenSizeX())
+ header.put( ODTHeader.ScreenSizeX, aManifest.getScreenSizeX() );
+
+ if(null!=aManifest.getScreenSizeY())
+ header.put( ODTHeader.ScreenSizeY, aManifest.getScreenSizeY() );
+
+ if(null!=aManifest.getThemeStatus())
+ header.put( ODTHeader.Flags, aManifest.getThemeStatus() );
+
+ // Set language specific data to the header
+ if( aLanguage != null )
+ {
+ // Mandatory fields
+ header.put( ODTHeader.Language, aLanguage.getLanguageId() );
+
+ // Optional fields
+ String locFullName = aLanguage.getThemeFullName();
+ if( locFullName != null )
+ {
+ header.put( ODTHeader.ThemeFullName, locFullName );
+ }
+ }
+
+ return header;
+ }
+
+ /* (non-Javadoc)
+ * @see com.nokia.tools.odtconverter.IParseOperationListener#OperationCompleted(int, java.lang.String)
+ */
+ public void parseOperationCompleted( int aErr, String aReason )
+ {
+ iODTDocument.setDOMDocument( iConverter.getDOMDocument() );
+ super.setChanged();
+ super.notifyObservers(
+ new LanguageInstallEvent( iODTDocument, aErr, aReason ) );
+ }
+
+ }