sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/NewPIWizard.java
changeset 5 844b047e260d
parent 2 b9ab3b238396
child 12 ae255c9aa552
equal deleted inserted replaced
4:615035072f7e 5:844b047e260d
    16  */
    16  */
    17 
    17 
    18 package com.nokia.carbide.cpp.internal.pi.wizards.ui;
    18 package com.nokia.carbide.cpp.internal.pi.wizards.ui;
    19 
    19 
    20 import java.io.IOException;
    20 import java.io.IOException;
       
    21 import java.text.MessageFormat;
    21 import java.util.ArrayList;
    22 import java.util.ArrayList;
    22 import java.util.HashMap;
    23 import java.util.HashMap;
    23 import java.util.List;
    24 import java.util.List;
    24 import java.util.Map;
    25 import java.util.Map;
    25 import java.util.Set;
       
    26 import java.util.Map.Entry;
    26 import java.util.Map.Entry;
    27 
    27 
    28 import org.eclipse.core.resources.IFile;
    28 import org.eclipse.core.resources.IFile;
    29 import org.eclipse.core.resources.IProject;
    29 import org.eclipse.core.resources.IProject;
    30 import org.eclipse.core.runtime.CoreException;
    30 import org.eclipse.core.runtime.CoreException;
    31 import org.eclipse.core.runtime.IConfigurationElement;
    31 import org.eclipse.core.runtime.IConfigurationElement;
    32 import org.eclipse.core.runtime.IPath;
    32 import org.eclipse.core.runtime.IPath;
       
    33 import org.eclipse.core.runtime.IProgressMonitor;
       
    34 import org.eclipse.core.runtime.SubProgressMonitor;
    33 import org.eclipse.jface.dialogs.DialogSettings;
    35 import org.eclipse.jface.dialogs.DialogSettings;
    34 import org.eclipse.jface.dialogs.IDialogSettings;
    36 import org.eclipse.jface.dialogs.IDialogSettings;
       
    37 import org.eclipse.jface.operation.IRunnableWithProgress;
    35 import org.eclipse.jface.viewers.IStructuredSelection;
    38 import org.eclipse.jface.viewers.IStructuredSelection;
    36 import org.eclipse.jface.wizard.IWizardPage;
    39 import org.eclipse.jface.wizard.IWizardPage;
    37 import org.eclipse.jface.wizard.Wizard;
    40 import org.eclipse.jface.wizard.Wizard;
    38 import org.eclipse.swt.widgets.Composite;
    41 import org.eclipse.swt.widgets.Composite;
    39 import org.eclipse.swt.widgets.Display;
    42 import org.eclipse.swt.widgets.Display;
    40 import org.eclipse.ui.IImportWizard;
    43 import org.eclipse.ui.IImportWizard;
    41 import org.eclipse.ui.INewWizard;
    44 import org.eclipse.ui.INewWizard;
    42 import org.eclipse.ui.IWorkbench;
    45 import org.eclipse.ui.IWorkbench;
       
    46 import org.eclipse.ui.PlatformUI;
       
    47 import org.eclipse.ui.progress.IProgressService;
    43 
    48 
    44 import com.nokia.carbide.cdt.builder.builder.CarbideCPPBuilder;
    49 import com.nokia.carbide.cdt.builder.builder.CarbideCPPBuilder;
    45 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
    50 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
    46 import com.nokia.carbide.cdt.builder.project.ISISBuilderInfo;
    51 import com.nokia.carbide.cdt.builder.project.ISISBuilderInfo;
    47 import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContext;
    52 import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContext;
       
    53 import com.nokia.carbide.cpp.internal.pi.analyser.AnalyserDataProcessor;
       
    54 import com.nokia.carbide.cpp.internal.pi.utils.PIUtilities;
    48 import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.IPkgEntry;
    55 import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.IPkgEntry;
    49 import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.RofsObySymbolPair;
    56 import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.RofsObySymbolPair;
    50 import com.nokia.carbide.cpp.pi.button.BupEventMapManager;
    57 import com.nokia.carbide.cpp.pi.button.BupEventMapManager;
    51 import com.nokia.carbide.cpp.pi.button.ButtonPlugin;
    58 import com.nokia.carbide.cpp.pi.button.ButtonPlugin;
    52 import com.nokia.carbide.cpp.pi.importer.SampleImporter;
    59 import com.nokia.carbide.cpp.pi.importer.SampleImporter;
       
    60 import com.nokia.carbide.cpp.pi.util.GeneralMessages;
    53 import com.nokia.carbide.cpp.pi.wizards.WizardsPlugin;
    61 import com.nokia.carbide.cpp.pi.wizards.WizardsPlugin;
    54 import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
    62 import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
    55 import com.nokia.carbide.cpp.ui.CarbideUIPlugin;
    63 import com.nokia.carbide.cpp.ui.CarbideUIPlugin;
    56 import com.nokia.carbide.cpp.ui.ICarbideSharedImages;
    64 import com.nokia.carbide.cpp.ui.ICarbideSharedImages;
    57 import com.nokia.cpp.internal.api.utils.core.Check;
    65 import com.nokia.cpp.internal.api.utils.core.Check;
    74 	private NewPIWizardPageRomSubTask pageObySym;
    82 	private NewPIWizardPageRomSubTask pageObySym;
    75 	private NewPIWizardPageCustomTask pageCustom;
    83 	private NewPIWizardPageCustomTask pageCustom;
    76 	private NewPIWizardPageBupMapTask pageBupMap;
    84 	private NewPIWizardPageBupMapTask pageBupMap;
    77 	private NewPIWizardPageOutputTask pageOutput;
    85 	private NewPIWizardPageOutputTask pageOutput;
    78 	private ArrayList<IFile> tmpPkgList = new ArrayList<IFile>();
    86 	private ArrayList<IFile> tmpPkgList = new ArrayList<IFile>();
    79 	private Set<Integer> traceSet;
       
    80 	
    87 	
    81 	protected IProject piProject;
    88 	protected IProject piProject;
    82 	IWorkbench workbench;
    89 	IWorkbench workbench;
    83 	
    90 	
    84 	NewPIWizardSettings wizardSettings = NewPIWizardSettings.getInstance();
    91 	NewPIWizardSettings wizardSettings = NewPIWizardSettings.getInstance();
       
    92 
       
    93 	private List<ProfilerDataPlugins> profilerDataPlugins;
    85 
    94 
    86 	/**
    95 	/**
    87 	 * Constructor for NewPIWizard.
    96 	 * Constructor for NewPIWizard.
    88 	 */
    97 	 */
    89 	public NewPIWizard() {
    98 	public NewPIWizard() {
   143 	/**
   152 	/**
   144 	 * This method is called when 'Finish' button is pressed in the wizard. We
   153 	 * This method is called when 'Finish' button is pressed in the wizard. We
   145 	 * will create an operation and run it using wizard as execution context.
   154 	 * will create an operation and run it using wizard as execution context.
   146 	 */
   155 	 */
   147 	public boolean performFinish() {
   156 	public boolean performFinish() {
   148 		pageOutput.regenerateOutputIfIntputChanged(); // this must stay out of asyncExec() since it require treeviewer selection
       
   149 		Display.getDefault().asyncExec( new Runnable() {
   157 		Display.getDefault().asyncExec( new Runnable() {
   150 			public void run () {
   158 			public void run () {
   151 				//DialogSettings dialogSettings = (DialogSettings) WizardsPlugin.getDefault().getDialogSettings();
   159 				//DialogSettings dialogSettings = (DialogSettings) WizardsPlugin.getDefault().getDialogSettings();
   152 				IDialogSettings dialogSettings = getDialogSettings();
   160 				IDialogSettings dialogSettings = getDialogSettings();
   153 				if (dialogSettings != null) {
   161 				if (dialogSettings != null) {
   204 		}
   212 		}
   205 		tmpPkgList.clear();
   213 		tmpPkgList.clear();
   206 	}
   214 	}
   207 
   215 
   208 	private void createNewProject() {
   216 	private void createNewProject() {
   209 		SampleImporter sampleImporter = SampleImporter.getInstance();
   217 		
       
   218 		final SampleImporter sampleImporter = SampleImporter.getInstance();
   210 		NewPIWizardSettings wizardSettings = NewPIWizardSettings.getInstance();
   219 		NewPIWizardSettings wizardSettings = NewPIWizardSettings.getInstance();
   211 		Map<Object, IFile> preprocessedMap = new HashMap<Object, IFile>();
   220 		Map<Object, IFile> preprocessedMap = new HashMap<Object, IFile>();
   212 		sampleImporter.clear();
   221 		sampleImporter.clear();
   213 		
   222 		
   214 		sampleImporter.setDatFileName(wizardSettings.sampleFileName);
       
   215 		String container = wizardSettings.outputContainer.getFullPath().toString();
   223 		String container = wizardSettings.outputContainer.getFullPath().toString();
   216 		if (container.startsWith("/")) //$NON-NLS-1$
   224 		if (container.startsWith("/")) //$NON-NLS-1$
   217 			container = container.substring(1, container.length());
   225 			container = container.substring(1, container.length());
   218 		sampleImporter.setProjectName(container);
   226 		sampleImporter.setProjectName(container);
   219 		sampleImporter.setPiFileName(wizardSettings.piFileName);
   227 		sampleImporter.setPiFileName(wizardSettings.piFileName);
   303 				sampleImporter.setBupMapSymbianSDKId(""); //$NON-NLS-1$
   311 				sampleImporter.setBupMapSymbianSDKId(""); //$NON-NLS-1$
   304 				sampleImporter.setBupMapIsBuiltIn(false);
   312 				sampleImporter.setBupMapIsBuiltIn(false);
   305 				sampleImporter.setBupMapIsWorkspace(true);
   313 				sampleImporter.setBupMapIsWorkspace(true);
   306 			}			
   314 			}			
   307 		}
   315 		}
   308 
       
   309 		sampleImporter.importSamples(false);	// not waiting NPI save complete for responsive UI, save NPI on background
       
   310 		
   316 		
       
   317 
       
   318 		if(profilerDataPlugins.size() <= 1){
       
   319 			for(ProfilerDataPlugins pdp : profilerDataPlugins){
       
   320 				sampleImporter.setDatFileName(pdp.getProfilerDataPath().toString());	
       
   321 				// due to PI shortcomings (i.e. plugins that create pages have to come first)
       
   322 				// the plugins have to be sorted by trace id
       
   323 				sampleImporter.importSamples(false, PIUtilities.sortPlugins(pdp.getSelectedPlugins()), true, null, null);						
       
   324 				break;
       
   325 			}
       
   326 		}	
       
   327 		else{		
       
   328 			final int[] i={1};
       
   329 			final int count = profilerDataPlugins.size();
       
   330 			IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
       
   331 			IRunnableWithProgress runnable= new IRunnableWithProgress() {
       
   332 
       
   333 				public void run(IProgressMonitor progressMonitor) {					
       
   334 					progressMonitor.beginTask("", count*AnalyserDataProcessor.TOTAL_PROGRESS_COUNT); //$NON-NLS-1$
       
   335 					String suffixTaskName;
       
   336 					for (ProfilerDataPlugins pdp : profilerDataPlugins) {
       
   337 						if(progressMonitor.isCanceled()){
       
   338 							break;
       
   339 						}						
       
   340 						suffixTaskName = MessageFormat.format(Messages.getString("NewPIWizard.suffixTaskName"), i[0]++, count);						 //$NON-NLS-1$
       
   341 						sampleImporter.setDatFileName(pdp.getProfilerDataPath().toString());	
       
   342 						sampleImporter.importSamples(false, PIUtilities
       
   343 								.sortPlugins(pdp.getSelectedPlugins()), false, suffixTaskName,
       
   344 								new SubProgressMonitor(progressMonitor, AnalyserDataProcessor.TOTAL_PROGRESS_COUNT));
       
   345 					}		
       
   346 				}
       
   347 
       
   348 			};
       
   349 			try {
       
   350 				progressService.busyCursorWhile(runnable);
       
   351 			} catch (Exception e) {
       
   352 				GeneralMessages.showErrorMessage(e.getMessage());
       
   353 			}
       
   354 		}
   311 		cleanTempPkgFile();
   355 		cleanTempPkgFile();
   312 	}
   356 	}
   313 	
   357 	
   314 	public void init(IWorkbench workbench, IStructuredSelection selection) {
   358 	public void init(IWorkbench workbench, IStructuredSelection selection) {
   315 		this.workbench = workbench;
   359 		this.workbench = workbench;
   338 		}
   382 		}
   339 		// after ending page
   383 		// after ending page
   340 		return true;
   384 		return true;
   341 	}
   385 	}
   342 	
   386 	
   343 	// all trace ID, we can check this for trace specific handling
       
   344 	public Set<Integer> getTraceSet() {
       
   345 		return traceSet;
       
   346 	}
       
   347 	
       
   348 	// all trace ID, we can do trace specific handling later
       
   349 	public void setTraceSet(Set<Integer> myTraceSet) {
       
   350 		traceSet = myTraceSet;
       
   351 	}
       
   352 	
       
   353 	public IWizardPage getPreviousPage (IWizardPage page) {
   387 	public IWizardPage getPreviousPage (IWizardPage page) {
   354 		NewPIWizardSettings settings = NewPIWizardSettings.getInstance();
   388 		NewPIWizardSettings settings = NewPIWizardSettings.getInstance();
   355 		if (page == pageOutput && settings.enableCust == false) {
   389 		if (page == pageOutput && settings.enableCust == false) {
   356 			return getPreviousPage(pageCustom);
   390 			return getPreviousPage(pageCustom);
   357 		} else if (page == pageCustom && getTraceSet().contains(ButtonPlugin.getDefault().getTraceId()) == false){
   391 		} else if (page == pageCustom && isButtonPluginUsed() == false){
   358 			return getPreviousPage(pageBupMap);
   392 			return getPreviousPage(pageBupMap);
   359 		} else if (page == pageBupMap && wizardSettings.haveRomOnly == false && wizardSettings.haveAppRom == false) {
   393 		} else if (page == pageBupMap && wizardSettings.haveRomOnly == false && wizardSettings.haveAppRom == false) {
   360 			return getPreviousPage(pageObySym);
   394 			return getPreviousPage(pageObySym);
   361 		} else if (page == pageObySym && wizardSettings.haveAppOnly == false && wizardSettings.haveAppRom == false) {
   395 		} else if (page == pageObySym && wizardSettings.haveAppOnly == false && wizardSettings.haveAppRom == false) {
   362 			return getPreviousPage(pagePkgList);
   396 			return getPreviousPage(pagePkgList);
   368 	public IWizardPage getNextPage (IWizardPage page) {
   402 	public IWizardPage getNextPage (IWizardPage page) {
   369 		if (page == pageConfigSelector && wizardSettings.haveAppOnly == false && wizardSettings.haveAppRom == false) {
   403 		if (page == pageConfigSelector && wizardSettings.haveAppOnly == false && wizardSettings.haveAppRom == false) {
   370 			return getNextPage(pagePkgList);
   404 			return getNextPage(pagePkgList);
   371 		} else if (page == pagePkgList && wizardSettings.haveRomOnly == false && wizardSettings.haveAppRom == false) {
   405 		} else if (page == pagePkgList && wizardSettings.haveRomOnly == false && wizardSettings.haveAppRom == false) {
   372 			return getNextPage(pageObySym);
   406 			return getNextPage(pageObySym);
   373 		} else if (page == pageObySym && getTraceSet().contains(ButtonPlugin.getDefault().getTraceId()) == false) {
   407 		} else if (page == pageObySym && isButtonPluginUsed() == false) {
   374 			return getNextPage(pageBupMap);
   408 			return getNextPage(pageBupMap);
   375 		} else if (page == pageBupMap && wizardSettings.enableCust == false) {
   409 		} else if (page == pageBupMap && wizardSettings.enableCust == false) {
   376 			return getNextPage(pageCustom);
   410 			return getNextPage(pageCustom);
   377 		}
   411 		}
   378 		return super.getNextPage(page);
   412 		return super.getNextPage(page);
   379 	}
   413 	}
       
   414 	
       
   415 	public void setProfilerDataFiles(List<ProfilerDataPlugins> profilerDataPlugins){
       
   416 		this.profilerDataPlugins = profilerDataPlugins;
       
   417 	}
       
   418 	
       
   419 	private boolean isButtonPluginUsed(){
       
   420 		if(profilerDataPlugins != null){
       
   421 			for(ProfilerDataPlugins pdp : profilerDataPlugins){
       
   422 				if(pdp.getSelectedPlugins().contains(ButtonPlugin.getDefault())){
       
   423 					return true;
       
   424 				}
       
   425 			}
       
   426 		}
       
   427 		return false;
       
   428 	}
   380 
   429 
   381 }
   430 }