sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/NewPIWizardSettings.java
/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:
*
*/
package com.nokia.carbide.cpp.internal.pi.wizards.ui;
import java.util.ArrayList;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.dialogs.IDialogSettings;
import com.nokia.carbide.cdt.builder.CarbideBuilderPlugin;
import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.IPkgEntry;
import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.PkgEntryList;
import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.RofsObySymbolPair;
import com.nokia.carbide.cpp.pi.button.BupEventMapManager;
import com.nokia.carbide.cpp.pi.button.IBupEventMapProfile;
import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
/*
* Handles all import wizard's persist data
*/
public final class NewPIWizardSettings {
static NewPIWizardSettings instance = null;
static final int COMBO_MAX_ITEM_VALUES = 5;
//This means something on Windows and Unix, should be good enough for file path not having this
static final String PKG_SEPERATOR = "<SDK>"; //$NON-NLS-1$
static final String ROFS_SEPERATOR = "<ROFSPAIR>"; //$NON-NLS-1$
static final int CURRENT_VERSION = 5;
static final String IMPORTER_SETTING_VERSION = "version"; //$NON-NLS-1$
static final String SAMPLEFILENAME_KEY = "sampleFileName"; //$NON-NLS-1$
static final String ENABLE_APP_KEY = "enableApp"; //$NON-NLS-1$
static final String ENABLE_ROM_KEY = "enableRom"; //$NON-NLS-1$
static final String ENABLE_CUST_KEY = "enableCust"; //$NON-NLS-1$
static final String SELECTED_PKG_ENTRY_KEY = "selectedPkgEntry"; //$NON-NLS-1$
static final String UNSELECTED_PKG_ENTRY_KEY = "availablePkgEntry"; //$NON-NLS-1$
static final String PROJECT_KEY = "project"; //$NON-NLS-1$
static final String PROJECT_CONFIG_KEY = "projectConfig"; //$NON-NLS-1$
static final String ROM_SDK_KEY = "romSdk"; //$NON-NLS-1$
static final String ROM_SYMBOL_KEY = "romSymbol"; //$NON-NLS-1$
static final String ROM_OBY_KEY = "romOby"; //$NON-NLS-1$
static final String ROFS_SYMBOL_KEY = "rofsSymbol"; //$NON-NLS-1$
static final String ROFS_OBY_KEY = "romRofsOby"; //$NON-NLS-1$
static final String ROFS_OBY_SYMBOL_KEY = "romRofsObySymbol"; //$NON-NLS-1$
static final String CUST_SAMPLE_KEY = "custSample"; //$NON-NLS-1$
static final String CUST_VAL_BASED_KEY = "isValBased"; //$NON-NLS-1$
static final String CUST_NAME_BASED_KEY = "isNameBased"; //$NON-NLS-1$
static final String CUST_SEPARATOR_KEY = "separator"; //$NON-NLS-1$
static final String OUTPUT_PROJECT_KEY = "outputProject"; //$NON-NLS-1$
static final String OUTPUT_NPI_KEY = "piFileName"; //$NON-NLS-1$
static final String KEY_PROFILE_KEY = "keyProfile"; //$NON-NLS-1$
static final String SAMPLEFILENAMES_KEY = "sampleFileName"; //$NON-NLS-1$
private static final String DEFAULT_TRACE_PLUGINS = "defaultTracePlugins"; //$NON-NLS-1$
boolean haveAppOnly = false;
boolean haveRomOnly = false;
boolean haveAppRom = false;
boolean haveNothing = false;
boolean enableCust;
ArrayList<IPkgEntry> selectedAppFileList = new ArrayList<IPkgEntry>();
ArrayList<IPkgEntry> availableAppFileList = new ArrayList<IPkgEntry>();
ArrayList<IProject> selectedProjectList = new ArrayList<IProject>();
ArrayList<ICarbideBuildConfiguration> selectedBuildConfigList = new ArrayList<ICarbideBuildConfiguration>();
ISymbianSDK romSdk;
String romSymbolFile;
String romObyFile;
ArrayList <RofsObySymbolPair> rofsObySymbolPairList = new ArrayList<RofsObySymbolPair>();
String custSampleFile;
boolean custValBased;
boolean custNameBased;
String custSeparator;
IContainer outputContainer;
boolean profilerActivator;
// end version 2
// start version 3
String piFileName;
// end version 3
// start version 4
IBupEventMapProfile keyMapProfile;
// end version 4
// start internal states not saved
long sampleFileNameModifiedNanoTime; // timestamp java.lang.System.nanoTime()
long piFileNameModifiedNanoTime; // timestamp java.lang.System.nanoTime()
// end internal states not saved
public int[] defaultPlugins;
public void clear() {
haveAppOnly = false;
haveRomOnly = false;
haveAppRom = false;
haveNothing = false;
enableCust = false;
selectedAppFileList.clear();
availableAppFileList.clear();
selectedProjectList.clear();
selectedBuildConfigList.clear();
romSdk = null;
romSymbolFile = ""; //$NON-NLS-1$
romObyFile = ""; //$NON-NLS-1$
rofsObySymbolPairList.clear();
custSampleFile = ""; //$NON-NLS-1$
custValBased = false;
custNameBased = false;
custSeparator = ""; //$NON-NLS-1$
outputContainer = null;
piFileName= ""; //$NON-NLS-1$
keyMapProfile = null;
sampleFileNameModifiedNanoTime = 0;
piFileNameModifiedNanoTime = 0;
profilerActivator = false;
defaultPlugins = null;
}
private NewPIWizardSettings() {
clear();
}
public static NewPIWizardSettings getInstance() {
if (instance == null)
instance = new NewPIWizardSettings();
return instance;
}
public void saveState(IDialogSettings dialogSettings) {
try {
dialogSettings.put(IMPORTER_SETTING_VERSION, CURRENT_VERSION);
dialogSettings.put(ENABLE_CUST_KEY, enableCust);
{ // traverse all entries of app config and pkg file
ArrayList<String> projectStringArrayList = new ArrayList<String>();
for (IProject selectedProject: selectedProjectList) {
if (selectedProject.isOpen())
projectStringArrayList.add(selectedProject.getName());
}
dialogSettings.put(PROJECT_KEY, projectStringArrayList.toArray(new String[projectStringArrayList.size()]));
ArrayList<String> bcStringArrayList = new ArrayList<String>();
for (ICarbideBuildConfiguration currentConfig : selectedBuildConfigList) {
if (currentConfig.getCarbideProject().getProject().isOpen()) {
bcStringArrayList.add(currentConfig.getCarbideProject().getProject().getName() + PKG_SEPERATOR + currentConfig.getDisplayString());
}
}
dialogSettings.put(PROJECT_CONFIG_KEY, bcStringArrayList.toArray(new String[bcStringArrayList.size()]));
ArrayList<String> pkgStringArrayList = new ArrayList<String>();
for (IPkgEntry currentPkgEntry : selectedAppFileList) {
pkgStringArrayList.add(currentPkgEntry.getPkgFile() + PKG_SEPERATOR + currentPkgEntry.getSdk().getUniqueId());
}
dialogSettings.put(SELECTED_PKG_ENTRY_KEY, pkgStringArrayList.toArray(new String[pkgStringArrayList.size()]));
pkgStringArrayList.clear();
for (IPkgEntry currentPkgEntry : availableAppFileList) {
pkgStringArrayList.add(currentPkgEntry.getPkgFile() + PKG_SEPERATOR + currentPkgEntry.getSdk().getUniqueId());
}
dialogSettings.put(UNSELECTED_PKG_ENTRY_KEY, pkgStringArrayList.toArray(new String[pkgStringArrayList.size()]));
}
if (romSdk != null) {
dialogSettings.put(ROM_SDK_KEY, romSdk.getUniqueId());
}
dialogSettings.put(ROM_SYMBOL_KEY, romSymbolFile);
dialogSettings.put(ROM_OBY_KEY, romObyFile);
{
ArrayList<String> rofsObySymbolStringArrayList = new ArrayList<String>();
for (RofsObySymbolPair pair : rofsObySymbolPairList) {
String setting = ""; //$NON-NLS-1$
if (pair.haveObyFile()) {
setting += pair.getObyFile();
}
setting += ROFS_SEPERATOR;
if (pair.haveSymbolFile()) {
setting += pair.getSymbolFile();
}
rofsObySymbolStringArrayList.add(setting);
}
dialogSettings.put(ROFS_OBY_SYMBOL_KEY, rofsObySymbolStringArrayList.toArray(new String[rofsObySymbolStringArrayList.size()]));
}
dialogSettings.put(CUST_SAMPLE_KEY, custSampleFile);
dialogSettings.put(CUST_VAL_BASED_KEY, custValBased);
dialogSettings.put(CUST_NAME_BASED_KEY, custNameBased);
dialogSettings.put(CUST_SEPARATOR_KEY, custSeparator);
String outProject = outputContainer.getFullPath().toString();
dialogSettings.put(OUTPUT_PROJECT_KEY, outProject);
dialogSettings.put(OUTPUT_NPI_KEY, piFileName);
dialogSettings.put(KEY_PROFILE_KEY, keyMapProfile != null ? keyMapProfile.toString() : ""); //$NON-NLS-1$
String[] plugins = convertIntegerArrayToStringArray(defaultPlugins);
if(plugins != null){
dialogSettings.put(DEFAULT_TRACE_PLUGINS, plugins);
}
// newer members go here
} catch (Exception e) {
e.printStackTrace();
}
}
public void restoreState(IDialogSettings dialogSettings) {
try {
if (dialogSettings.get(IMPORTER_SETTING_VERSION) == null) {
return;
}
if (dialogSettings.getInt(IMPORTER_SETTING_VERSION) == CURRENT_VERSION) {
// if(!(new java.io.File(sampleFileName).exists()))
// sampleFileName = ""; //$NON-NLS-1$
enableCust = dialogSettings.getBoolean(ENABLE_CUST_KEY);
{ // traverse all entries of app config and pkg file
String selectedProjectStringArray[];
String projectConfigStringArray[];
String pkgStringArray[];
selectedProjectStringArray = dialogSettings.getArray(PROJECT_KEY);
selectedProjectList.clear();
for (String selectedProjectString : selectedProjectStringArray) {
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(selectedProjectString);
if (project != null) {
if (project.exists()) {
// project in persist data match one of the project in workspace
selectedProjectList.add(project);
}
}
}
projectConfigStringArray = dialogSettings.getArray(PROJECT_CONFIG_KEY);
selectedBuildConfigList.clear();
for (String projectConfig : projectConfigStringArray) {
// attempt to match workspace with <project>:<config> entry in setting
String projectConfigDetail[] = projectConfig.split(PKG_SEPERATOR);
if (projectConfigDetail.length == 2) {
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectConfigDetail[0]);
if (project != null) {
if (project.exists() && project.isOpen()) {
ICarbideProjectInfo cpi = CarbideBuilderPlugin.getBuildManager().getProjectInfo(project);
for (ICarbideBuildConfiguration currentConfig : cpi.getBuildConfigurations()) {
if (currentConfig.getDisplayString().equals(projectConfigDetail[1])) {
// Found Carbide.c++ config matching entry
selectedBuildConfigList.add(currentConfig);
break;
}
}
}
}
}
}
pkgStringArray = dialogSettings.getArray(SELECTED_PKG_ENTRY_KEY);
selectedAppFileList.clear();
for (String pkgString : pkgStringArray) {
// attempt to match file system with <PKG file>:<SDK> entry in setting
String pkgDetail[] = pkgString.split(PKG_SEPERATOR);
if (pkgDetail.length == 2) {
ISymbianSDK sdk = SDKCorePlugin.getSDKManager().getSDK(pkgDetail[1], true);
if (new java.io.File(pkgDetail[0]).exists() && sdk != null) {
IPkgEntry pkg = PkgEntryList.getInstance().getPkgEntry(pkgDetail[0], sdk);
selectedAppFileList.add(pkg);
}
}
}
pkgStringArray = dialogSettings.getArray(UNSELECTED_PKG_ENTRY_KEY);
availableAppFileList.clear();
for (String pkgString : pkgStringArray) {
// attempt to match file system with <PKG file>:<SDK> entry in setting
String pkgDetail[] = pkgString.split(PKG_SEPERATOR);
if (pkgDetail.length == 2) {
ISymbianSDK sdk = SDKCorePlugin.getSDKManager().getSDK(pkgDetail[1], true);
if (new java.io.File(pkgDetail[0]).exists() && sdk != null) {
IPkgEntry pkg = PkgEntryList.getInstance().getPkgEntry(pkgDetail[0], sdk);
availableAppFileList.add(pkg);
}
}
}
}
String romSdkId = dialogSettings.get(ROM_SDK_KEY);
if (romSdkId != null) {
romSdk = SDKCorePlugin.getSDKManager().getSDK(romSdkId, true);
}
romSymbolFile = dialogSettings.get(ROM_SYMBOL_KEY);
// if(!(new java.io.File(romSymbolFile).exists()))
// romSymbolFile = ""; //$NON-NLS-1$
romObyFile = dialogSettings.get(ROM_OBY_KEY);
// if(!(new java.io.File(romObyFile).exists()))
// romObyFile = ""; //$NON-NLS-1$
{
String rofsObySymbolStringArray[];
rofsObySymbolStringArray = dialogSettings.getArray(ROFS_OBY_SYMBOL_KEY);
rofsObySymbolPairList.clear();
for (String rofsObySymbolString : rofsObySymbolStringArray) {
int seperator = rofsObySymbolString.indexOf(ROFS_SEPERATOR);
RofsObySymbolPair pair = new RofsObySymbolPair();
pair.setObyFile(rofsObySymbolString.substring(0, seperator));
pair.setSymbolFile(rofsObySymbolString.substring(seperator + ROFS_SEPERATOR.length()));
rofsObySymbolPairList.add(pair);
}
}
custSampleFile = dialogSettings.get(CUST_SAMPLE_KEY);
// if(!(new java.io.File(custSampleFile).exists()))
// custSampleFile = ""; //$NON-NLS-1$
custValBased = dialogSettings.getBoolean(CUST_VAL_BASED_KEY);
custNameBased = dialogSettings.getBoolean(CUST_NAME_BASED_KEY);
custSeparator = dialogSettings.get(CUST_SEPARATOR_KEY);
String outputFolder = dialogSettings.get(OUTPUT_PROJECT_KEY);
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IResource resource = root.findMember(outputFolder);
if (resource instanceof IContainer) {
outputContainer = (IContainer) resource;
} else {
outputContainer = null;
}
piFileName = dialogSettings.get(OUTPUT_NPI_KEY);
String keyProfileString = dialogSettings.get(KEY_PROFILE_KEY);
ArrayList<IBupEventMapProfile> profiles = BupEventMapManager.getInstance().getAllProfiles();
keyMapProfile = null;
for (IBupEventMapProfile profile : profiles) {
if(profile.toString().equals(keyProfileString)) {
keyMapProfile = profile;
}
}
String[] plugins = dialogSettings.getArray(DEFAULT_TRACE_PLUGINS);
if(plugins != null){
defaultPlugins = convertStringArrayToIntegerArray(plugins);
}
} // if (dialogSettings.getInt(IMPORTER_SETTING_VERSION) == CURRENT_VERSION)
} catch (Exception e) {
e.printStackTrace();
}
}
private int[] convertStringArrayToIntegerArray(String[] strings){
if(strings == null){
return null;
}
int[] integers = new int[strings.length];
for(int i=0;i<strings.length;i++){
integers[i] = Integer.valueOf(strings[i]);
}
return integers;
}
private String[] convertIntegerArrayToStringArray(int[] integers){
if(integers == null){
return null;
}
String[] strings = new String[integers.length];
for(int i=0;i<integers.length;i++){
strings[i] = String.valueOf(integers[i]);
}
return strings;
}
}