sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/NewPIWizard.java
changeset 12 ae255c9aa552
parent 5 844b047e260d
--- a/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/NewPIWizard.java	Wed Jun 23 14:49:59 2010 +0300
+++ b/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/NewPIWizard.java	Wed Jun 23 15:05:09 2010 +0300
@@ -21,6 +21,7 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -34,6 +35,7 @@
 import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.jface.dialogs.DialogSettings;
 import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.IWizardPage;
@@ -42,7 +44,11 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IImportWizard;
 import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewReference;
 import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.progress.IProgressService;
 
@@ -51,15 +57,26 @@
 import com.nokia.carbide.cdt.builder.project.ISISBuilderInfo;
 import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContext;
 import com.nokia.carbide.cpp.internal.pi.analyser.AnalyserDataProcessor;
+import com.nokia.carbide.cpp.internal.pi.analyser.NpiInstanceRepository;
+import com.nokia.carbide.cpp.internal.pi.model.GenericSampledTrace;
+import com.nokia.carbide.cpp.internal.pi.model.GenericTrace;
+import com.nokia.carbide.cpp.internal.pi.model.ParsedTraceData;
+import com.nokia.carbide.cpp.internal.pi.model.TraceDataRepository;
+import com.nokia.carbide.cpp.internal.pi.plugin.model.ITrace;
 import com.nokia.carbide.cpp.internal.pi.utils.PIUtilities;
+import com.nokia.carbide.cpp.internal.pi.wizards.model.SessionHandler;
+import com.nokia.carbide.cpp.internal.pi.wizards.model.TraceFile;
 import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.IPkgEntry;
 import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.RofsObySymbolPair;
+import com.nokia.carbide.cpp.internal.pi.wizards.ui.views.PIView;
+import com.nokia.carbide.cpp.pi.PiPlugin;
 import com.nokia.carbide.cpp.pi.button.BupEventMapManager;
 import com.nokia.carbide.cpp.pi.button.ButtonPlugin;
 import com.nokia.carbide.cpp.pi.importer.SampleImporter;
 import com.nokia.carbide.cpp.pi.util.GeneralMessages;
 import com.nokia.carbide.cpp.pi.wizards.WizardsPlugin;
 import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
 import com.nokia.carbide.cpp.ui.CarbideUIPlugin;
 import com.nokia.carbide.cpp.ui.ICarbideSharedImages;
 import com.nokia.cpp.internal.api.utils.core.Check;
@@ -224,7 +241,6 @@
 		if (container.startsWith("/")) //$NON-NLS-1$
 			container = container.substring(1, container.length());
 		sampleImporter.setProjectName(container);
-		sampleImporter.setPiFileName(wizardSettings.piFileName);
 		if (wizardSettings.haveRomOnly || wizardSettings.haveAppRom) {
 			if (wizardSettings.romSdk != null && wizardSettings.romSdk.getEPOCROOT() != null) {
 				sampleImporter.setRomEpocroot(wizardSettings.romSdk.getEPOCROOT());
@@ -314,13 +330,16 @@
 			}			
 		}
 		
+		sampleImporter.setProfilerActivator(wizardSettings.profilerActivator);
 
 		if(profilerDataPlugins.size() <= 1){
 			for(ProfilerDataPlugins pdp : profilerDataPlugins){
 				sampleImporter.setDatFileName(pdp.getProfilerDataPath().toString());	
 				// due to PI shortcomings (i.e. plugins that create pages have to come first)
 				// the plugins have to be sorted by trace id
+				sampleImporter.setPiFileName(""); //$NON-NLS-1$
 				sampleImporter.importSamples(false, PIUtilities.sortPlugins(pdp.getSelectedPlugins()), true, null, null);						
+				logImportedFile(pdp);
 				break;
 			}
 		}	
@@ -339,9 +358,11 @@
 						}						
 						suffixTaskName = MessageFormat.format(Messages.getString("NewPIWizard.suffixTaskName"), i[0]++, count);						 //$NON-NLS-1$
 						sampleImporter.setDatFileName(pdp.getProfilerDataPath().toString());	
+						sampleImporter.setPiFileName(""); //$NON-NLS-1$
 						sampleImporter.importSamples(false, PIUtilities
 								.sortPlugins(pdp.getSelectedPlugins()), false, suffixTaskName,
 								new SubProgressMonitor(progressMonitor, AnalyserDataProcessor.TOTAL_PROGRESS_COUNT));
+						logImportedFile(pdp);
 					}		
 				}
 
@@ -352,7 +373,51 @@
 				GeneralMessages.showErrorMessage(e.getMessage());
 			}
 		}
-		cleanTempPkgFile();
+		cleanTempPkgFile();	
+		showPIViewer();
+	}
+	
+	/**
+	 * Log given imported file to show it on the PI view
+	 * 
+	 * @param pdp instance of the ProfilerDataPlugins
+	 */
+	private void logImportedFile(ProfilerDataPlugins pdp){
+		SampleImporter sampleImporter = SampleImporter.getInstance();
+		ISymbianSDK sdk = NewPIWizardSettings.getInstance().romSdk;
+		String sdkName = "";
+		if(sdk != null && (NewPIWizardSettings.getInstance().haveRomOnly || NewPIWizardSettings.getInstance().haveAppRom)){
+			sdkName = NewPIWizardSettings.getInstance().romSdk.getUniqueId();
+		}
+		long sampleTime = -1;
+
+		Iterator<ParsedTraceData> traces = TraceDataRepository.getInstance().getTraceCollectionIter(NpiInstanceRepository.getInstance().activeUid());
+		while(traces.hasNext()){
+			ParsedTraceData ptd = traces.next();
+			GenericTrace gt = ptd.traceData;
+			if(gt instanceof GenericSampledTrace){
+				GenericSampledTrace gst = (GenericSampledTrace)gt;
+				long lastSampleTime = gst.getLastSampleTime();
+				if(sampleTime < lastSampleTime){
+					sampleTime = lastSampleTime;
+				}
+			}
+		}
+		List<ITrace> plugins = pdp.getSelectedPlugins();
+		int[] pluginIds = new int[plugins.size()];
+		int i=0;
+		for(ITrace plugin : plugins){
+			pluginIds[i++] = plugin.getTraceId();
+		}
+		IPath filePath = sampleImporter.getPiFile().getFullPath();
+		SessionHandler.getInstance().addTraceFile(new TraceFile(filePath, sampleImporter.getProjectName(), sdkName, filePath.toFile().length(), sampleTime, pluginIds));
+		Display.getDefault().asyncExec(new Runnable() {
+			
+			public void run() {
+				showPIViewer();
+				
+			}
+		});
 	}
 	
 	public void init(IWorkbench workbench, IStructuredSelection selection) {
@@ -427,4 +492,65 @@
 		return false;
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.wizard.Wizard#performCancel()
+	 */
+	@Override
+	public boolean performCancel() {
+		if(PiPlugin.isTraceProviderAvailable() && PiPlugin.getTraceProvider().isListening()){
+			showInformationDialog();
+			return false;
+		}
+		pageInput.handleTemporaryProfilerDataFiles(false);
+		return super.performCancel();
+	}
+	
+	/**
+	 * Show information dialog about to stop tracing in order to go back or
+	 * close the wizard page
+	 */
+	public void showInformationDialog(){
+		MessageDialog.openInformation(getShell(), Messages.getString("NewPIWizard.informationDialogTitle"), Messages.getString("NewPIWizard.informationDialogMessage")); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * Show PI view
+	 */
+	private void showPIViewer(){
+	   	try {
+    		IWorkbenchWindow workbenchWindow = PiPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
+    		if (workbenchWindow == null)
+    			return;
+    		IWorkbenchPage page = workbenchWindow.getActivePage();
+    		// Checking if view is already open
+    		IViewReference[] viewRefs = page.getViewReferences();
+    		for (int i = 0; i < viewRefs.length; i++) {
+				IViewReference reference = viewRefs[i];
+				String id = reference.getId();
+				if(PIView.ID.equalsIgnoreCase(id)){
+					// Found, restoring the view
+					IViewPart viewPart = reference.getView(true);
+					page.activate(viewPart);			
+					((PIView)viewPart).updateView();
+					return;
+				}
+			}
+    		
+    		// View was not found, opening it up as a new view.
+    		IViewPart viewPart = page.showView(PIView.ID);
+    		((PIView)viewPart).updateView();
+    	} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.wizard.Wizard#dispose()
+	 */
+	@Override
+	public void dispose() {
+		showPIViewer();
+		super.dispose();
+	}
+	
 }