srcanaapps/depexplorer/com.nokia.s60tools.appdep/src/com/nokia/s60tools/appdep/core/AppDepCoreFacade.java
author noe\swadi
Sat, 09 Jan 2010 10:04:11 +0530
changeset 0 a02c979e8dfd
permissions -rw-r--r--
1. Copyrights changed to EPL 2. Feature updates mentioned in release notes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     1
/*
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     2
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     3
* All rights reserved.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     4
* This component and the accompanying materials are made available
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     6
* which accompanies this distribution, and is available
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     8
*
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
     9
* Initial Contributors:
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    11
*
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    12
* Contributors:
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    13
*
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    14
* Description:
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    15
*
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    16
*/
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    17
 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    18
 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    19
package com.nokia.s60tools.appdep.core;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    20
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    21
import java.io.File;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    22
import java.io.IOException;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    23
import java.util.ArrayList;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    24
import java.util.Vector;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    25
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    26
import org.eclipse.core.runtime.jobs.Job;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    27
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    28
import com.nokia.s60tools.appdep.common.ProductInfoRegistry;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    29
import com.nokia.s60tools.appdep.core.data.CacheDataConstants;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    30
import com.nokia.s60tools.appdep.exceptions.InvalidCmdLineToolSettingException;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    31
import com.nokia.s60tools.appdep.resources.Messages;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    32
import com.nokia.s60tools.appdep.util.AppDepConsole;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    33
import com.nokia.s60tools.util.cmdline.CmdLineCommandExecutorFactory;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    34
import com.nokia.s60tools.util.cmdline.ICmdLineCommandExecutor;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    35
import com.nokia.s60tools.util.cmdline.ICmdLineCommandExecutorObserver;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    36
import com.nokia.s60tools.util.cmdline.ICustomLineReader;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    37
import com.nokia.s60tools.util.cmdline.UnsupportedOSException;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    38
import com.nokia.s60tools.util.console.IConsolePrintUtility;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    39
import com.nokia.s60tools.util.debug.DbgUtility;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    40
import com.nokia.s60tools.util.resource.FileUtils;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    41
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    42
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    43
/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    44
 * The purpose of this class is offer as a facade for
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    45
 * the appdep core services (command line tool).
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    46
 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    47
public class AppDepCoreFacade implements ICmdLineCommandExecutorObserver {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    48
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    49
	private String options = null;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    50
	private String commands = null;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    51
	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    52
    private ICmdLineCommandExecutor cmdLineExecutor = null;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    53
    private AppDepSettings settings = null;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    54
    private ICmdLineCommandExecutorObserver observer = null;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    55
    private Job currentJobContext = null;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    56
    
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    57
    /**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    58
     * Separator character used between targets platforms when generating
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    59
     * cache for multiple targets in single command.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    60
     */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    61
    private static final String TARGET_SEPARATOR = "+"; //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    62
    
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    63
    /**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    64
     * folder where SIS cache files is located under cache base dir 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    65
     */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    66
	private static final String SIS_PATH = "sis";//$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    67
    
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    68
    /**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    69
     * Stroring list of targets that is currentlu selected 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    70
     */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    71
    private ITargetPlatform[] currentlySelectedTargets = null;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    72
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    73
    /**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    74
     * This flag is <code>true</code> when the settings should to be
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    75
	 * checked from cache generation options instead from default settings.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    76
     */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    77
    private boolean checkFromCacheGenerOpts = false;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    78
            
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    79
	public AppDepCoreFacade(AppDepSettings settings,
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    80
							ICmdLineCommandExecutorObserver observer
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    81
							) throws UnsupportedOSException{		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    82
        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    83
		// Storing the client observer
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    84
		this.observer = observer;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    85
		// And passing ourselves as real observers
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    86
		cmdLineExecutor = CmdLineCommandExecutorFactory.CreateOsDependentCommandLineExecutor(this, AppDepConsole.getInstance());
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    87
        this.settings = settings;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    88
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    89
        options = new String(""); //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    90
        commands = new String(""); //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    91
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    92
	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    93
	/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    94
	 * Constructs command line tool parameters based on the current settings and given arguments. 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    95
	 * @param targetPlatformIdentifiers Id of the used target platform(s) separated 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    96
	 *                                  with TARGET_SEPARATOR character.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    97
	 * @return Parameters for the commoand.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    98
	 * @throws InvalidCmdLineToolSettingException
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
    99
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   100
	private String prepareParameters(String targetPlatformIdentifiers) throws InvalidCmdLineToolSettingException{
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   101
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   102
		CacheGenerationOptions cacheGenerOpts = settings.getCacheGenerOptions();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   103
		String toolchainNameStr = null;	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   104
		String parameters = new String(""); //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   105
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   106
		if(checkFromCacheGenerOpts && cacheGenerOptionsAreSet()){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   107
			toolchainNameStr = cacheGenerOpts.getUsedToolchain().getToolchainName();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   108
		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   109
		else{
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   110
			toolchainNameStr = settings.getCurrentlyUsedToolChain().getToolchainName();			
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   111
		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   112
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   113
		if( toolchainNameStr.compareToIgnoreCase( "RVCT" ) == 0 ){ //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   114
			
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   115
			// An example RVCT command line
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   116
	        //  set CMD_LINE=appdep RVCT -cfilt %CFILT_DIR%\cfilt.exe 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   117
	        //  -tools %RVCT_TOOLS% -cache %CACHE_DIR% -release %SDK_ROOT% 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   118
	        //  -targets ARMV5 %OPT% %COMMAND% %COMPONENT%
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   119
			
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   120
	        parameters = "-tools " + "\"" + settings.getRvctToolsDir() + "\""  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   121
						 + " -cfilt " + "\"" + settings.getCfiltProgramPathName() + "\"" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   122
						 + " -cache " + "\"" + settings.getCacheBaseDirForCurrentlyUsedSdk() + "\"" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   123
						 + " -release " + "\"" + settings.getSdkRootDir() + "\"" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   124
	        			 + " -targets " + targetPlatformIdentifiers;			 //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   125
		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   126
		else if( toolchainNameStr.compareToIgnoreCase( "GCCE" ) == 0 ){ //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   127
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   128
			// An example GCCE command line
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   129
			// appdep GCCE -tools %GCCE_TOOLS% -cache %CACHE_DIR% -release %SDK_ROOT% 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   130
			// -targets GCCE %OPT% %COMMAND% %COMPONENT%
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   131
			
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   132
	        parameters = "-tools " + "\"" + settings.getGcceToolsDir() + "\""  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   133
	        			 + " -cache " + "\"" + settings.getCacheBaseDirForCurrentlyUsedSdk() + "\"" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   134
	        			 + " -release " + "\"" + settings.getSdkRootDir() + "\"" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   135
	        			 + " -targets " + targetPlatformIdentifiers;			 //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   136
		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   137
		else if( toolchainNameStr.compareToIgnoreCase( "GCC" ) == 0 ){ //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   138
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   139
			// An example GCC command line
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   140
			// appdep GCC -tools %GCC_TOOLS% -cache %CACHE_DIR% -release %SDK_ROOT% 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   141
			// -targets THUMB %OPT% %COMMAND% %COMPONENT%
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   142
			
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   143
	        parameters = "-tools " + "\"" + settings.getGccToolsDir() + "\""  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   144
	        			 + " -cache " + "\"" + settings.getCacheBaseDirForCurrentlyUsedSdk() + "\"" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   145
	        			 + " -release " + "\"" + settings.getSdkRootDir() + "\"" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   146
	        			 + " -targets " + targetPlatformIdentifiers;			 //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   147
		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   148
		else{
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   149
			// This is an internal error if we ever get into here
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   150
			throw new InvalidCmdLineToolSettingException( 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   151
					Messages.getString("AppDepCoreFacade.UnexpectedException_In_prepareParameters_Method")  //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   152
					+ ". "  //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   153
					+ Messages.getString("AppDepCoreFacade.Toolchain_Str")  //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   154
					+ "'"  //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   155
					+ toolchainNameStr  
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   156
					+ "' "  //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   157
					+ Messages.getString("AppDepCoreFacade.Is_Not_Supported_Msg_End")  //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   158
					+ "!" );			 //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   159
		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   160
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   161
		if(settings.getBuildType() instanceof BuildTypeDebug){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   162
			parameters += " --useudeb "; //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   163
		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   164
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   165
		if(checkFromCacheGenerOpts && cacheGenerOptionsAreSet()){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   166
			if(cacheGenerOpts.getUsedLibraryType() == CacheGenerationOptions.USE_LIB_FILES
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   167
					&&
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   168
			    // This option is unnecessary for GCC toolchain
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   169
			   ! toolchainNameStr.equalsIgnoreCase(AppDepSettings.STR_GCC)){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   170
				parameters += " --uselibs ";				 //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   171
			}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   172
		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   173
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   174
		return parameters;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   175
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   176
	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   177
	/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   178
	 * Guard for accessing cache generation options.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   179
	 * @return <code>true</code> if options can be accessed safely, otherwise <code>false</code>.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   180
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   181
	private boolean cacheGenerOptionsAreSet() {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   182
		return (settings.getCacheGenerOptions() != null);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   183
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   184
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   185
	public void generateCache(Job jobContext) throws InvalidCmdLineToolSettingException{
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   186
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   187
		// Enabling the check from cache generation options
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   188
        checkFromCacheGenerOpts = true;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   189
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   190
        ICustomLineReader stdErrReader = null;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   191
        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   192
        ITargetPlatform[] toStripTargetList = settings.getCurrentlyUsedTargetPlatforms();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   193
		// Stripping away SIS target
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   194
		ArrayList<ITargetPlatform> strippedTargetList = new ArrayList<ITargetPlatform>();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   195
        for (int i = 0; i < toStripTargetList.length; i++) {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   196
			ITargetPlatform platform = toStripTargetList[i];
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   197
			if(! platform.getId().equalsIgnoreCase(AppDepSettings.TARGET_TYPE_ID_SIS)){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   198
		        checkCacheDirectoryExistenceAndCreateIfNeeded(platform.getId());
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   199
		        strippedTargetList.add(platform);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   200
			}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   201
		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   202
        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   203
		currentlySelectedTargets = strippedTargetList.toArray(new TargetPlatform[0]);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   204
        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   205
        // Setting up fields that are used to build the command 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   206
        options = "--refresh";	// Forcing cache refres	 //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   207
        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   208
        stdErrReader = new CacheCreationProgressLineReader();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   209
        if(settings.isInSISFileAnalysisMode()){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   210
        	String sisOptions = getSISGenerationOptions();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   211
        	commands = sisOptions;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   212
        }else{        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   213
        	commands = ""; // No command is needed, generating only cache //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   214
        }
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   215
        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   216
        executeCommand(null, stdErrReader, jobContext);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   217
        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   218
		// Disabling the check from cache generation options
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   219
        checkFromCacheGenerOpts = false;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   220
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   221
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   222
	/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   223
	 * Get -sisfiles "<files user has been selected>" -options for SIS cache generation.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   224
	 * @return -sisfiles "<files user has been selected>". User selected files are semi
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   225
	 * comma separated.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   226
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   227
	private String getSISGenerationOptions(){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   228
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   229
		String[] sisFiles = settings.getSISFilesForAnalysis();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   230
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   231
		StringBuffer sisCommand = new StringBuffer();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   232
		sisCommand.append("-sisfiles \""); //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   233
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   234
		for (int i = 0; i < sisFiles.length; i++) {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   235
			sisCommand.append(sisFiles[i]);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   236
			if(i != sisFiles.length -1){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   237
				sisCommand.append(";"); //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   238
			}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   239
		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   240
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   241
		sisCommand.append("\""); //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   242
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   243
		return sisCommand.toString();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   244
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   245
	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   246
	public void getComponentsThatUsesComponent(String componentName, 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   247
			                                   ArrayList<String> resultLinesArrayList,
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   248
			                                   Job jobContext) throws InvalidCmdLineToolSettingException{
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   249
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   250
        ICustomLineReader stdOutReader = null;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   251
        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   252
		currentlySelectedTargets = settings.getCurrentlyUsedTargetPlatforms();		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   253
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   254
        options = "";	// No special options are needed //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   255
        stdOutReader = new LinesToStringArrayListCustomLineReader(resultLinesArrayList);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   256
        commands = "-dependson " + componentName; //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   257
        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   258
        executeCommand(stdOutReader, null, jobContext);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   259
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   260
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   261
	public void getComponentsThatUsesFunction(String componentName, 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   262
											  String functionOrdinal,
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   263
									          ArrayList<String> resultLinesArrayList,
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   264
									          Job jobContext) throws InvalidCmdLineToolSettingException{
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   265
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   266
		ICustomLineReader stdOutReader = null;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   267
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   268
		currentlySelectedTargets = settings.getCurrentlyUsedTargetPlatforms();		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   269
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   270
		options = "";	// No special options are needed //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   271
		stdOutReader = new LinesToStringArrayListCustomLineReader(resultLinesArrayList);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   272
		commands = "-usesfunction " + componentName + "@" + functionOrdinal; //$NON-NLS-1$ //$NON-NLS-2$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   273
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   274
		executeCommand(stdOutReader, null, jobContext);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   275
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   276
	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   277
	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   278
	/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   279
	 * Check the existence of cache directory, and creates 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   280
	 * a new directory (whole path) if needed.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   281
	 * @param targetPlatformId Target plaform to check cache existence from.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   282
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   283
	private void checkCacheDirectoryExistenceAndCreateIfNeeded(String targetPlatformId) {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   284
		String cacheDirCreateFailedMsg = Messages.getString("AppDepCoreFacade.Cache_Dir_Create_Failed_Msg"); //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   285
        File cacheDir = new File(settings.getCacheDirForTarget(targetPlatformId));
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   286
        if(cacheDir.exists()&& cacheDir.isFile()){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   287
        	// If there already exists a file with same name => deleting it
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   288
        	deleteFile(cacheDir, false);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   289
        }
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   290
        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   291
        if(!cacheDir.exists()){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   292
        	// If cache directory does not exist, creating it
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   293
        	if(!cacheDir.mkdirs()){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   294
        		AppDepConsole.getInstance().println(cacheDirCreateFailedMsg, IConsolePrintUtility.MSG_ERROR);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   295
        		throw new RuntimeException(cacheDirCreateFailedMsg);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   296
        	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   297
        }
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   298
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   299
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   300
	/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   301
	 * Deletes the file given as argument.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   302
	 * @param fileToBeDeleted File to be deleted.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   303
	 * @param ignoreDeleteFailure If this is set to <code>false</code> an exception is raised 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   304
	 * when delete attempt has failed, if set to <code>true</code> raises and exception if
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   305
	 * delete has failed.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   306
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   307
	private void deleteFile(File fileToBeDeleted, boolean ignoreDeleteFailure) {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   308
    	if(!fileToBeDeleted.delete()){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   309
    		if(!ignoreDeleteFailure){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   310
        		String fileDeleteFailedMsg = Messages.getString("AppDepCoreFacade.File_Delete_Failed_Msg") + ": " + fileToBeDeleted.getAbsolutePath(); //$NON-NLS-1$ //$NON-NLS-2$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   311
        		AppDepConsole.getInstance().println(fileDeleteFailedMsg, IConsolePrintUtility.MSG_ERROR);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   312
        		throw new RuntimeException(fileDeleteFailedMsg);    			
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   313
    		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   314
    	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   315
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   316
	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   317
	private String[] buildCommandLine() throws InvalidCmdLineToolSettingException{
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   318
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   319
		Vector<String> cmdLineVector = new Vector<String>();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   320
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   321
		try {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   322
			// Executable
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   323
			cmdLineVector.add(settings.getAppDepProgramPathName());
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   324
			// Toolchain
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   325
			if(checkFromCacheGenerOpts  && cacheGenerOptionsAreSet()){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   326
				CacheGenerationOptions opt = settings.getCacheGenerOptions();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   327
				IToolchain toolchain = opt.getUsedToolchain();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   328
				cmdLineVector.add(toolchain.getToolchainName());											
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   329
			}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   330
			else{
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   331
				//Using current settings
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   332
				cmdLineVector.add(settings.getCurrentlyUsedToolChain().getToolchainName());			
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   333
			}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   334
			// Parameters		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   335
			String targetPlatformIds = currentlySelectedTargets[0].getId();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   336
			// Combining targets ids with separateor character TARGET_SEPARATOR
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   337
			for (int i = 1; i < currentlySelectedTargets.length; i++) {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   338
				targetPlatformIds = targetPlatformIds 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   339
									+ TARGET_SEPARATOR 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   340
									+ currentlySelectedTargets[i].getId();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   341
			}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   342
			cmdLineVector.add(prepareParameters(targetPlatformIds));
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   343
			
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   344
			// Options
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   345
			cmdLineVector.add(options);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   346
			// Commands
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   347
			cmdLineVector.add(commands);								
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   348
		} catch (Exception e) {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   349
			e.printStackTrace();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   350
		}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   351
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   352
		return cmdLineVector.toArray(new String[0]);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   353
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   354
	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   355
	 /**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   356
	 * Builds the command line and runs the given command.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   357
	 * The current version support only one command to be executed
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   358
	 * at a time. Therefore we are using flag that prevents
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   359
	 * the execution of two commands at the same time.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   360
	 * @param cmdLineArray Command line in an array form.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   361
	 * @param stdOutReader Reference to custom stdout reader, or null if the usage 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   362
	 * 					   of the default reader is what is wanted.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   363
	 * @param stdErrReader Reference to custom stderr reader, or null if the usage 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   364
	 * 					   of the default reader is what is wanted.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   365
	 * @throws InvalidCmdLineToolSettingException 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   366
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   367
	private void executeCommand(ICustomLineReader stdOutReader,
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   368
	 		  					ICustomLineReader stdErrReader) throws InvalidCmdLineToolSettingException{
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   369
		String[] cmdLineArr = buildCommandLine();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   370
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   371
		//If we are in SIS Analysis mode, an empty symbolics cache file must be generated
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   372
        if(settings.isInSISFileAnalysisMode()){
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   373
        	try {        		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   374
				generateEmptyCacheSymbolFile();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   375
			} catch (Exception e) {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   376
				//If an error occurs throwing runtime message and cache generation will not be started
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   377
				e.printStackTrace();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   378
				AppDepConsole.getInstance().println(Messages.getString("AppDepCoreFacade.EmptySymbolCahceFileCreation_ErrMsg")  //$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   379
						+e.getMessage(), AppDepConsole.MSG_ERROR);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   380
				throw new RuntimeException(e.getMessage());
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   381
			}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   382
        }
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   383
        
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   384
		cmdLineExecutor.runCommand(cmdLineArr, stdOutReader, stdErrReader, currentJobContext);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   385
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   386
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   387
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   388
	/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   389
	 * Create an empty code>appdep-cache_symbol_tables.txt</code> -file
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   390
	 * because <code>appdep.exe</code> in SIS mode does not create one 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   391
	 * and other cache handling logic requires one. 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   392
	 * 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   393
	 * @throws IOException if on error occurs
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   394
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   395
	 private void generateEmptyCacheSymbolFile() throws Exception {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   396
		String filePath = settings.getCacheBaseDirForCurrentlyUsedSdk() +
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   397
			File.separatorChar + SIS_PATH + 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   398
			File.separatorChar + ProductInfoRegistry.getCacheSymbolsFileName();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   399
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   400
		DbgUtility.println(DbgUtility.PRIORITY_OPERATION,"Generating empty symbol cache file to: " +filePath);//$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   401
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   402
		StringBuffer b = new StringBuffer();
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   403
		b.append(ProductInfoRegistry.getCacheSymbolTablesFileContentPrefix());
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   404
		b.append(" ");//$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   405
		b.append(ProductInfoRegistry.getSupportedCacheFileVersionInfoString());
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   406
		b.append("\n");//$NON-NLS-1$
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   407
		b.append(CacheDataConstants.CACHE_FILE_END_MARK);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   408
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   409
		FileUtils.writeToFile(filePath, b.toString());
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   410
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   411
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   412
	/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   413
	 * Wrapper to to the referenced executeComman. Just stores
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   414
	 * job context that enables to add created worker thread 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   415
	 * to the job context.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   416
	 * @param cmdLineArray Command line in an array form.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   417
	 * @param stdOutReader Reference to custom stdout reader, or null if the usage 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   418
	 * 					   of the default reader is what is wanted.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   419
	 * @param stdErrReader Reference to custom stderr reader, or null if the usage 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   420
	 * 					   of the default reader is what is wanted.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   421
	 * @param jobContext   Job object under which the command will be executed.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   422
	 * @throws InvalidCmdLineToolSettingException 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   423
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   424
	private void executeCommand(ICustomLineReader stdOutReader,
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   425
	 		  					ICustomLineReader stdErrReader, 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   426
	 		  					Job jobContext) throws InvalidCmdLineToolSettingException{
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   427
		currentJobContext = jobContext;
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   428
		executeCommand(stdOutReader,
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   429
					   stdErrReader);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   430
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   431
	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   432
	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   433
	/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   434
	 * Just delegating the call further to the real observer.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   435
	 * @see com.nokia.s60tools.util.cmdline.ICmdLineCommandExecutorObserver#progress(int)
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   436
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   437
	public void progress(int percentage) {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   438
		observer.progress(percentage);		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   439
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   440
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   441
	/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   442
	 * Setting down execution flag and delegating 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   443
	 * the call further to the real observer. 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   444
	 * @see com.nokia.s60tools.util.cmdline.ICmdLineCommandExecutorObserver#completed(int)
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   445
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   446
	public void interrupted(String reasonMsg) {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   447
		observer.interrupted(reasonMsg);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   448
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   449
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   450
	/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   451
	 * Just delegating the call further to the real observer.
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   452
	 * @see com.nokia.s60tools.util.cmdline.ICmdLineCommandExecutorObserver#progress(int)
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   453
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   454
	public void processCreated(Process proc) {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   455
		observer.processCreated(proc);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   456
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   457
	
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   458
	/**
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   459
	 * Setting down execution flag and delegating 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   460
	 * the call further to the real observer. 
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   461
	 * @see com.nokia.s60tools.util.cmdline.ICmdLineCommandExecutorObserver#completed(int)
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   462
	 */
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   463
	public void completed(int exitValue) {
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   464
		observer.completed(exitValue);
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   465
	}
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   466
		
a02c979e8dfd 1. Copyrights changed to EPL
noe\swadi
parents:
diff changeset
   467
}