diff -r 5b9d4d8641ce -r ae255c9aa552 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 fetchAvailablePlugins() { + final List plugins = new ArrayList(); + 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); + + } +}