sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/TraceHandler.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/TraceHandler.java Wed Jun 23 15:05:09 2010 +0300
@@ -0,0 +1,308 @@
+/*
+ * Copyright (c) 2010 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.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.wizard.IWizardContainer;
+import org.eclipse.swt.widgets.Display;
+
+import com.nokia.carbide.cpp.internal.pi.plugin.model.ITrace;
+import com.nokia.carbide.cpp.pi.PiPlugin;
+import com.nokia.carbide.cpp.pi.export.ITraceClientNotificationsIf;
+import com.nokia.carbide.cpp.pi.wizards.WizardsPlugin;
+
+/**
+ * Helper class to handle traces
+ */
+public class TraceHandler implements ITraceClientNotificationsIf {
+
+ private NewPIWizardPage wizardPage;
+ private IWizardContainer wizardContainer;
+ private ProfilerActivatorGroup profilerActivatorGroup;
+
+ /**
+ * Constructor
+ *
+ * @param profilerActivatorGroup
+ * instance of the ProfilerActivatorGroup
+ */
+ public TraceHandler(ProfilerActivatorGroup profilerActivatorGroup) {
+ this.profilerActivatorGroup = profilerActivatorGroup;
+ this.wizardPage = profilerActivatorGroup.getWizardPage();
+ this.wizardContainer = profilerActivatorGroup.getWizardContainer();
+
+ }
+
+ /**
+ * Update current connection
+ *
+ */
+ public void updateCurrenConnection() {
+ try {
+ IRunnableWithProgress runnableWithProgress = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor)
+ throws InvocationTargetException, InterruptedException {
+ monitor.beginTask(Messages.getString("TraceHandler.resolvingCurrentConnection"), //$NON-NLS-1$
+ IProgressMonitor.UNKNOWN);
+ try {
+ String currenConnection = PiPlugin.getTraceProvider()
+ .getDisplayNameForCurrentConnection(monitor);
+ profilerActivatorGroup
+ .setCurrentConnection(currenConnection);
+ } catch (CoreException e) {
+ throw new InvocationTargetException(e);
+ } finally {
+ monitor.done();
+ }
+ }
+ };
+ wizardContainer.run(true, true, runnableWithProgress);
+ } catch (InvocationTargetException e) {
+ if(e.getCause() instanceof CoreException){
+ updateStatus(((CoreException)e.getCause()).getStatus());
+ }else{
+ notifyError(e.getMessage());
+ }
+ } catch (InterruptedException e) {
+ notifyError(e.getMessage());
+ }
+ }
+
+ /**
+ * Fetch available plug-ins list
+ *
+ */
+ public List<ITrace> fetchAvailablePlugins() {
+ final List<ITrace> plugins = new ArrayList<ITrace>();
+ try {
+ IRunnableWithProgress runnableWithProgress = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor)
+ throws InvocationTargetException, InterruptedException{
+ monitor.beginTask(Messages.getString("TraceHandler.fetchingPluginsList"), //$NON-NLS-1$
+ IProgressMonitor.UNKNOWN);
+ try {
+ plugins.addAll(PiPlugin.getTraceProvider()
+ .getAvailableSamplers(TraceHandler.this, monitor));
+ } catch (CoreException e) {
+ throw new InvocationTargetException(e);
+ } finally {
+ monitor.done();
+ }
+
+ }
+ };
+ wizardContainer.run(true, false, runnableWithProgress);
+ if(wizardPage instanceof INewPIWizardSettings){
+ ((INewPIWizardSettings)wizardPage).validatePage();
+ }
+
+ return plugins;
+ }catch (InvocationTargetException e) {
+ if(e.getCause() instanceof CoreException){
+ updateStatus(((CoreException)e.getCause()).getStatus());
+ }else{
+ notifyError(e.getMessage());
+ }
+ } catch (InterruptedException e) {
+ notifyError(e.getMessage());
+ }
+ return null;
+ }
+
+ /**
+ * Start trace
+ *
+ * @param fileName
+ * for new profiler data file
+ * @param traceIDs
+ * selected plug-ins to be profiling
+ */
+ public void startTrace(final String fileName, final int[] traceIDs) {
+
+ try {
+ IRunnableWithProgress runnableWithProgress = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor)
+ throws InvocationTargetException, InterruptedException {
+ monitor.beginTask(Messages.getString("TraceHandler.preparingTracing"), //$NON-NLS-1$
+ IProgressMonitor.UNKNOWN);
+ try {
+
+ PiPlugin.getTraceProvider().startTrace(
+ fileName,
+ traceIDs,
+ TraceHandler.this,
+ new SubProgressMonitor(monitor,
+ IProgressMonitor.UNKNOWN));
+ } catch (CoreException e) {
+ throw new InvocationTargetException(e);
+ } finally {
+ monitor.done();
+ }
+
+ }
+ };
+ wizardContainer.run(true, false, runnableWithProgress);
+
+ } catch (InvocationTargetException e) {
+ if(e.getCause() instanceof CoreException){
+ updateStatus(((CoreException)e.getCause()).getStatus());
+ }else{
+ notifyError(e.getMessage());
+ }
+ } catch (InterruptedException e) {
+ notifyError(e.getMessage());
+ }
+ }
+
+ /**
+ * Stop trace
+ *
+ * @return
+ */
+ public IPath stopTrace() {
+ final IPath[] path = new Path[1];
+ try {
+ IRunnableWithProgress runnableWithProgress = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor)
+ throws InvocationTargetException, InterruptedException {
+ monitor.beginTask(Messages.getString("TraceHandler.creatingProfilerDataFile"), //$NON-NLS-1$
+ IProgressMonitor.UNKNOWN);
+ try {
+ path[0] = PiPlugin.getTraceProvider().stopTrace(false);
+ } catch (CoreException e) {
+ throw new InvocationTargetException(e);
+ } finally {
+ monitor.done();
+ }
+ }
+ };
+ wizardContainer.run(true, false, runnableWithProgress);
+ return path[0];
+ } catch (InvocationTargetException e) {
+ if(e.getCause() instanceof CoreException){
+ updateStatus(((CoreException)e.getCause()).getStatus());
+ }else{
+ notifyError(e.getMessage());
+ }
+
+ } catch (InterruptedException e) {
+ notifyError(e.getMessage());
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.nokia.carbide.cpp.pi.export.ITraceClientNotificationsIf#notifyError
+ * (java.lang.String)
+ */
+ public void notifyError(String message) {
+ updateStatus(createStatus(IStatus.ERROR, message));
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.nokia.carbide.cpp.pi.export.ITraceClientNotificationsIf#notifyInformation
+ * (java.lang.String)
+ */
+ public void notifyInformation(String message) {
+ updateStatus(createStatus(IStatus.INFO, message));
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.nokia.carbide.cpp.pi.export.ITraceClientNotificationsIf#notifyWarning
+ * (java.lang.String)
+ */
+ public void notifyWarning(String message) {
+ updateStatus(createStatus(IStatus.WARNING, message));
+
+ }
+
+ /**
+ * Update status for the wizard
+ *
+ * @param status
+ */
+ private void updateStatus(final IStatus status) {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ wizardPage.setErrorMessage(null);
+ profilerActivatorGroup.updateButtons();
+ if (status.getSeverity() == IStatus.OK) {
+ wizardPage.setMessage(status.getMessage());
+ wizardPage.setPageComplete(true);
+ } else if (status.getSeverity() == IStatus.ERROR) {
+ wizardPage.setErrorMessage(status.getMessage());
+ wizardPage.setPageComplete(false);
+ } else if (status.getSeverity() == IStatus.INFO) {
+ wizardPage.setMessage(status.getMessage());
+ wizardPage.setPageComplete(false);
+ } else if (status.getSeverity() == IStatus.WARNING) {
+ wizardPage.setMessage(status.getMessage());
+ wizardPage.setPageComplete(true);
+ }else if (status.getSeverity() == IStatus.CANCEL) {
+ wizardPage.setMessage(status.getMessage());
+ wizardPage.setPageComplete(false);
+ }
+
+ }
+ });
+ }
+
+ /**
+ * Create a status
+ *
+ * @param severity
+ * of the status
+ * @param message
+ * of the status
+ * @return created status
+ */
+ private IStatus createStatus(int severity, String message) {
+ return new Status(severity, WizardsPlugin.PLUGIN_ID, message);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.nokia.carbide.cpp.pi.export.ITraceClientNotificationsIf#updateTraceDataFile(org.eclipse.core.runtime.IPath, long, long)
+ */
+ public void updateTraceDataFile(IPath path, long time, long size) {
+ profilerActivatorGroup.updateTraceDataFile(path, time, size);
+
+ }
+}