From 498704b3abf6750fec33fb11a0a8f9c2abc62902 Mon Sep 17 00:00:00 2001 From: Bernd Hufmann Date: Tue, 28 Feb 2012 15:50:33 -0500 Subject: [PATCH] Add further support for enabling kernel events --- .../plugin.properties | 5 +- org.eclipse.linuxtools.lttng.ui/plugin.xml | 205 ++++++-- .../lttng/ui/views/control/Messages.java | 25 +- .../control/dialogs/CreateChannelDialog.java | 4 +- .../control/dialogs/CreateSessionDialog.java | 2 +- .../dialogs/EnableKernelEventDialog.java | 469 ++++++++++++++++++ .../control/dialogs/GetEventInfoDialog.java | 9 +- .../dialogs/IEnableKernelEventsDialog.java | 70 +++ .../control/dialogs/NewConnectionDialog.java | 17 +- .../control/handlers/AssignEventHandler.java | 4 +- .../handlers/BaseControlViewHandler.java | 54 ++ .../handlers/BaseEnableEventHandler.java | 163 ++++++ .../control/handlers/BaseNodeHandler.java | 26 +- .../handlers/ChangeChannelStateHandler.java | 21 +- .../handlers/ChangeEventStateHandler.java | 21 +- .../handlers/ChangeSessionStateHandler.java | 21 +- .../CreateChannelOnDomainHandler.java | 23 +- .../CreateChannelOnSessionHandler.java | 20 +- .../handlers/CreateSessionHandler.java | 22 +- .../handlers/DestroySessionHandler.java | 22 +- .../control/handlers/EnableEventHandler.java | 2 +- .../handlers/EnableEventOnChannelHandler.java | 107 ++++ .../handlers/EnableEventOnDomainHandler.java | 114 +++++ .../handlers/EnableEventOnSessionHandler.java | 109 ++++ .../handlers/NewConnectionHandler.java | 22 +- .../ui/views/control/messages.properties | 18 +- .../model/impl/TraceChannelComponent.java | 74 ++- .../model/impl/TraceDomainComponent.java | 81 ++- .../model/impl/TraceSessionComponent.java | 72 ++- .../control/model/impl/TraceSessionGroup.java | 7 + .../control/service/ILttngControlService.java | 39 +- .../control/service/LTTngControlService.java | 116 ++++- 32 files changed, 1735 insertions(+), 229 deletions(-) create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableKernelEventDialog.java create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableKernelEventsDialog.java create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseControlViewHandler.java create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseEnableEventHandler.java create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnChannelHandler.java create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnDomainHandler.java create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnSessionHandler.java diff --git a/org.eclipse.linuxtools.lttng.ui/plugin.properties b/org.eclipse.linuxtools.lttng.ui/plugin.properties index fd0743ebdc..2e51a180a1 100644 --- a/org.eclipse.linuxtools.lttng.ui/plugin.properties +++ b/org.eclipse.linuxtools.lttng.ui/plugin.properties @@ -95,9 +95,12 @@ commands.control.stop.description=Stop Trace Session #commands.control.enable.event=Enable commands.control.enable.assign.description=Assign Event to Session and Channel and Enable Event -commands.control.enable.event=Enable +commands.control.enable.event=Enable Event commands.control.enable.event.description=Enable Event +commands.control.enable.eventOnDomain=Enable Event (default channel) +commands.control.enable.eventOnDomain.description=Enable Event on Default Channel + commands.control.disable.event=Disable commands.control.disable.event.description=Disable Event diff --git a/org.eclipse.linuxtools.lttng.ui/plugin.xml b/org.eclipse.linuxtools.lttng.ui/plugin.xml index ddf2340079..9d5d38d1e6 100644 --- a/org.eclipse.linuxtools.lttng.ui/plugin.xml +++ b/org.eclipse.linuxtools.lttng.ui/plugin.xml @@ -218,6 +218,25 @@ id="org.eclipse.linuxtools.lttng.ui.commands.control.disable.event" name="%commands.control.disable.event"> + + + + + + + @@ -267,7 +286,7 @@ @@ -347,6 +366,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + @@ -464,9 +551,9 @@ @@ -475,16 +562,17 @@ + value="org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceChannelComponent"> + @@ -493,7 +581,7 @@ + value="org.eclipse.linuxtools.lttng.ui.views.control.model.impl.BaseEventComponent"> @@ -501,7 +589,7 @@ @@ -512,7 +600,7 @@ + value="org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceEventComponent"> @@ -520,9 +608,9 @@ @@ -539,24 +627,31 @@ - - - - + + + + + + + + + + @@ -789,7 +884,53 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/Messages.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/Messages.java index e96da01d05..bb2f695ff1 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/Messages.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/Messages.java @@ -82,7 +82,7 @@ final public class Messages extends NLS { public static String TraceControl_EnableChannelDialogTitle; public static String TraceControl_EnableChannelNameLabel; - public static String TraceControl_EnableChannelNameLabelTooltip; + public static String TraceControl_EnableChannelNameTooltip; public static String TraceControl_EnableChannelSubBufferSizeTooltip; public static String TraceControl_EnableChannelNbSubBuffersTooltip; public static String TraceControl_EnableChannelSwitchTimerTooltip; @@ -101,15 +101,24 @@ final public class Messages extends NLS { public static String TraceControl_EnableEventsNoSessionError; public static String TraceControl_EnableEventsNoChannelError; - -// public static String TraceControl_CreateSessionPathLabel; -// public static String TraceControl_CreateSessionPathTooltip; -// public static String TraceControl_SessionAlreadyExistsError; -// public static String TraceControl_SessionPathAlreadyExistsError; -// public static String TraceControl_InvalidSessionPathError; -// public static String TraceControl_FileSubSystemError; + public static String TraceControl_EnableKernelEventsDialogTitle; + public static String TraceControl_EnableEventsTracepointGroupName; + public static String TraceControl_EnableEventsTracepointTreeTooltip; + public static String TraceControl_EnableEventsTracepointTreeAllLabel; + public static String TraceControl_EnableEventsSyscallName; + public static String TraceControl_EnableEventsSyscallTooltip; + public static String TraceControl_EnableEventsProbeGroupName; + public static String TraceControl_EnableEventsProbeEventNameLabel; + public static String TraceControl_EnableEventsProbeEventNameTooltip; + public static String TraceControl_EnableEventsProbeNameLabel; + public static String TraceControl_EnableEventsProbeNameTooltip; + public static String TraceControl_EnableEventsFucntionGroupName; + public static String TraceControl_EnableEventsFunctionEventNameTooltip; + public static String TraceControl_EnableEventsFunctionNameLabel; + public static String TraceControl_InvalidProbeNameError; + // Tree structure strings public static String TraceControl_KernelDomainDisplayName; public static String TraceControl_UstDisplayName; diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/CreateChannelDialog.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/CreateChannelDialog.java index a27af8513e..1a062a9c4a 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/CreateChannelDialog.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/CreateChannelDialog.java @@ -197,7 +197,7 @@ public class CreateChannelDialog extends Dialog implements ICreateChannelOnSessi Label channelNameLabel = new Label(fDialogComposite, SWT.RIGHT); channelNameLabel.setText(Messages.TraceControl_EnableChannelNameLabel); fChannelNameText = new Text(fDialogComposite, SWT.NONE); - fChannelNameText.setToolTipText(Messages.TraceControl_EnableChannelNameLabelTooltip); + fChannelNameText.setToolTipText(Messages.TraceControl_EnableChannelNameTooltip); Label subBufferSizeLabel = new Label(fDialogComposite, SWT.RIGHT); subBufferSizeLabel.setText(Messages.TraceControl_SubBufferSizePropertyName); @@ -303,7 +303,7 @@ public class CreateChannelDialog extends Dialog implements ICreateChannelOnSessi } // Check for invalid names - if (!fChannelInfo.getName().matches("^[a-zA-Z0-9\\-\\_]{2,}$")) { //$NON-NLS-1$ + if (!fChannelInfo.getName().matches("^[a-zA-Z0-9\\-\\_]{1,}$")) { //$NON-NLS-1$ MessageDialog.openError(getShell(), Messages.TraceControl_EnableChannelDialogTitle, Messages.TraceControl_InvalidChannelNameError + " (" + fChannelInfo.getName() + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/CreateSessionDialog.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/CreateSessionDialog.java index 1a3073a8de..ef66896e6c 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/CreateSessionDialog.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/CreateSessionDialog.java @@ -224,7 +224,7 @@ public class CreateSessionDialog extends Dialog implements ICreateSessionDialog } // Check for invalid names - if (!fSessionName.matches("^[a-zA-Z0-9\\-\\_]{2,}$")) { //$NON-NLS-1$ + if (!fSessionName.matches("^[a-zA-Z0-9\\-\\_]{1,}$")) { //$NON-NLS-1$ MessageDialog.openError(getShell(), Messages.TraceControl_CreateSessionDialogTitle, Messages.TraceControl_InvalidSessionNameError + " (" + fSessionName + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableKernelEventDialog.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableKernelEventDialog.java new file mode 100644 index 0000000000..03f88abf86 --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableKernelEventDialog.java @@ -0,0 +1,469 @@ +/********************************************************************** + * Copyright (c) 2012 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Bernd Hufmann - Initial API and implementation + **********************************************************************/ +package org.eclipse.linuxtools.lttng.ui.views.control.dialogs; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.CheckStateChangedEvent; +import org.eclipse.jface.viewers.CheckboxTreeViewer; +import org.eclipse.jface.viewers.ICheckStateListener; +import org.eclipse.linuxtools.lttng.ui.LTTngUiPlugin; +import org.eclipse.linuxtools.lttng.ui.views.control.Messages; +import org.eclipse.linuxtools.lttng.ui.views.control.TraceControlContentProvider; +import org.eclipse.linuxtools.lttng.ui.views.control.TraceControlLabelProvider; +import org.eclipse.linuxtools.lttng.ui.views.control.model.ITraceControlComponent; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.KernelProviderComponent; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceProviderGroup; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; + +/** + * EnableKernelEventDialog + *

+ * Dialog box for collecting information kernel events to be enabled. + *

+ */ +public class EnableKernelEventDialog extends Dialog implements IEnableKernelEventsDialog { + + // ------------------------------------------------------------------------ + // Constants + // ------------------------------------------------------------------------ + /** + * The icon file for this dialog box. + */ + public static final String ENABLE_EVENT_ICON_FILE = "icons/elcl16/edit.gif"; //$NON-NLS-1$ + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + /** + * The dialog composite. + */ + private Composite fDialogComposite; + /** + * The goup for the list of available tracepoints. + */ + private Group fTracepointsGroup; + /** + * A tree viewer for diplaying and selection of available tracepoints. + */ + private CheckboxTreeViewer fTracepointsViewer; + /** + * The Group for Syscalls selection. + */ + private Group fSyscallGroup; + /** + * The button to enable or disable all syscalls + */ + private Button fSyscallButton; + /** + * The group for defining a dynamic probe. + */ + private Group fProbeGroup; + /** + * The text field for the event name for the dynamic probe. + */ + private Text fProbeEventNameText; + /** + * The text field for the dynamic probe. + */ + private Text fProbeText; + /** + * The group for defining a dynamic function probe. + */ + private Group fFunctionGroup; + /** + * The text field for the event name for the dynamic probe. + */ + private Text fFunctionEventNameText; + /** + * The text field for the dynamic function entry/return probe. + */ + private Text fFunctionText; + /** + * The referenced kernel provider component which contains a list of available tracepoints. + */ + private KernelProviderComponent fKernelProvider; + /** + * The flag indicating that all tracepoints are selected. + */ + private boolean fIsAllTracepoints; + /** + * The flag indicating that syscalls are selected. + */ + private boolean fIsAllSysCalls; + /** + * The list of tracepoints to be enabled. + */ + private List fSelectedEvents; + /** + * The event name of the dynamic probe. + */ + private String fProbeEventName; + /** + * The dynamic probe. + */ + private String fProbeString; + /** + * The event name of the dynamic function entry/return probe. + */ + private String fFunctionEventName; + /** + * The dynamic function entry/return probe. + */ + private String fFunctionString; + + // ------------------------------------------------------------------------ + // Constructors + // ------------------------------------------------------------------------ + + /** + * Constructor + * @param shell - a shell for the display of the dialog + * @param kernelProvider - the kernel provider component + */ + public EnableKernelEventDialog(Shell shell, KernelProviderComponent kernelProvider) { + super(shell); + fKernelProvider = kernelProvider; + setShellStyle(SWT.RESIZE); + } + + // ------------------------------------------------------------------------ + // Accessors + // ------------------------------------------------------------------------ + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEventsDialog#isAllTracePoints() + */ + @Override + public boolean isAllTracePoints() { + return fIsAllTracepoints; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEventsDialog#isAllSysCalls() + */ + @Override + public boolean isAllSysCalls() { + return fIsAllSysCalls; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEventsDialog#getEventNames() + */ + @Override + public List getEventNames() { + return new ArrayList(fSelectedEvents); + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEventsDialog#getProbeName() + */ + @Override + public String getProbeName() { + return fProbeString; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEventsDialog#getProbeEventName() + */ + @Override + public String getProbeEventName() { + return fProbeEventName; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEventsDialog#getFunctionEventName() + */ + @Override + public String getFunctionEventName() { + return fFunctionEventName; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEventsDialog#getFunction() + */ + @Override + public String getFunction() { + return fFunctionString; + } + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + /* + * (non-Javadoc) + * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) + */ + @Override + protected void configureShell(Shell newShell) { + super.configureShell(newShell); + newShell.setText(Messages.TraceControl_EnableKernelEventsDialogTitle); + newShell.setImage(LTTngUiPlugin.getDefault().loadIcon(ENABLE_EVENT_ICON_FILE)); + } + + /* + * (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) + */ + @Override + protected Control createDialogArea(Composite parent) { + + // Main dialog panel + fDialogComposite = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(1, true); + fDialogComposite.setLayout(layout); + fDialogComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); + + // ------------------------------------------------------------------------ + // Tracepoints Group + // ------------------------------------------------------------------------ + fTracepointsGroup = new Group(fDialogComposite, SWT.SHADOW_NONE); + fTracepointsGroup.setText(Messages.TraceControl_EnableEventsTracepointGroupName); + layout = new GridLayout(1, true); + fTracepointsGroup.setLayout(layout); + GridData data = new GridData(GridData.FILL_BOTH); + fTracepointsGroup.setLayoutData(data); + + fTracepointsViewer = new CheckboxTreeViewer(fTracepointsGroup, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); + fTracepointsViewer.getTree().setToolTipText(Messages.TraceControl_EnableEventsTracepointTreeTooltip); + fTracepointsViewer.setContentProvider(new TraceControlContentProvider() { + @Override + public Object[] getChildren(Object parentElement) { + if (parentElement instanceof TraceProviderGroup) { + List children = ((ITraceControlComponent)parentElement).getChildren(KernelProviderComponent.class); + return (ITraceControlComponent[]) children.toArray(new ITraceControlComponent[children.size()]); + } + if (parentElement instanceof ITraceControlComponent) { + return ((ITraceControlComponent)parentElement).getChildren(); + } + return new Object[0]; + } + }); + + fTracepointsViewer.setLabelProvider(new TraceControlLabelProvider() { + @Override + public Image getImage(Object element) { + return null; + } + @Override + public String getText(Object element) { + if ((element != null) && (element instanceof KernelProviderComponent)) { + return Messages.TraceControl_EnableEventsTracepointTreeAllLabel; + } + return super.getText(element); + } + }); + + fTracepointsViewer.addCheckStateListener(new ICheckStateListener() { + @Override + public void checkStateChanged(CheckStateChangedEvent event) { + if (event.getChecked()) { + if (event.getElement() instanceof KernelProviderComponent) { + fTracepointsViewer.setSubtreeChecked(event.getElement(), true); + } + } else { + if (event.getElement() instanceof KernelProviderComponent) { + fTracepointsViewer.setSubtreeChecked(event.getElement(), false); + } else { + ITraceControlComponent component = (ITraceControlComponent) event.getElement(); + fTracepointsViewer.setChecked(component.getParent(), false); + } + } + } + }); + + fTracepointsViewer.setInput(fKernelProvider.getParent()); + fTracepointsViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH)); + + // ------------------------------------------------------------------------ + // Syscalls Group + // ------------------------------------------------------------------------ + fSyscallGroup = new Group(fDialogComposite, SWT.SHADOW_NONE); + layout = new GridLayout(4, true); + fSyscallGroup.setLayout(layout); + fSyscallGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + fSyscallButton = new Button(fSyscallGroup, SWT.CHECK); + fSyscallButton.setText(Messages.TraceControl_EnableEventsSyscallName); + fSyscallButton.setToolTipText(Messages.TraceControl_EnableEventsSyscallTooltip); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 4; + fSyscallButton.setLayoutData(data); + + // ------------------------------------------------------------------------ + // Dynamic Probe Group + // ------------------------------------------------------------------------ + fProbeGroup = new Group(fDialogComposite, SWT.SHADOW_NONE); + fProbeGroup.setText(Messages.TraceControl_EnableEventsProbeGroupName); + layout = new GridLayout(4, true); + fProbeGroup.setLayout(layout); + fProbeGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + Label probeNameLabel = new Label(fProbeGroup, SWT.LEFT); + probeNameLabel.setText(Messages.TraceControl_EnableEventsProbeEventNameLabel); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 1; + probeNameLabel.setLayoutData(data); + + fProbeEventNameText = new Text(fProbeGroup, SWT.LEFT); + fProbeEventNameText.setToolTipText(Messages.TraceControl_EnableEventsProbeEventNameTooltip); + + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 3; + fProbeEventNameText.setLayoutData(data); + + Label probeLabel = new Label(fProbeGroup, SWT.LEFT); + probeLabel.setText(Messages.TraceControl_EnableEventsProbeNameLabel); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 1; + probeLabel.setLayoutData(data); + + fProbeText = new Text(fProbeGroup, SWT.LEFT); + fProbeText.setToolTipText(Messages.TraceControl_EnableEventsProbeNameTooltip); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 3; + fProbeText.setLayoutData(data); + + // ------------------------------------------------------------------------ + // Dynamic Function Probe Group + // ------------------------------------------------------------------------ + fFunctionGroup = new Group(fDialogComposite, SWT.SHADOW_NONE); + fFunctionGroup.setText(Messages.TraceControl_EnableEventsFucntionGroupName); + layout = new GridLayout(4, true); + fFunctionGroup.setLayout(layout); + fFunctionGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + Label functionNameLabel = new Label(fFunctionGroup, SWT.LEFT); + functionNameLabel.setText(Messages.TraceControl_EnableEventsProbeEventNameLabel); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 1; + functionNameLabel.setLayoutData(data); + + fFunctionEventNameText = new Text(fFunctionGroup, SWT.LEFT); + fFunctionEventNameText.setToolTipText(Messages.TraceControl_EnableEventsFunctionEventNameTooltip); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 3; + fFunctionEventNameText.setLayoutData(data); + + Label functionLabel = new Label(fFunctionGroup, SWT.LEFT); + functionLabel.setText(Messages.TraceControl_EnableEventsFunctionNameLabel); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 1; + functionLabel.setLayoutData(data); + + fFunctionText = new Text(fFunctionGroup, SWT.LEFT); + fFunctionText.setToolTipText(Messages.TraceControl_EnableEventsProbeNameTooltip); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 3; + fFunctionText.setLayoutData(data); + + fDialogComposite.layout(); + + return fDialogComposite; + } + + /* + * (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite) + */ + @Override + protected void createButtonsForButtonBar(Composite parent) { + createButton(parent, IDialogConstants.OK_ID, "&Ok", true); //$NON-NLS-1$ + } + + /* + * (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#okPressed() + */ + @Override + protected void okPressed() { + fIsAllTracepoints = fTracepointsViewer.getChecked(fKernelProvider); + fIsAllSysCalls = fSyscallButton.getSelection(); + + ITraceControlComponent[] events = fKernelProvider.getChildren(); + fSelectedEvents = new ArrayList(); + for (int i = 0; i < events.length; i++) { + if (fTracepointsViewer.getChecked(events[i])) { + fSelectedEvents.add(events[i].getName()); + } + } + + // initialize probe string + fProbeEventName = null; + fProbeString = null; + String temp = fProbeEventNameText.getText(); + if (!temp.matches("^[\\s]{0,}$") && !temp.matches("^[a-zA-Z0-9\\-\\_]{1,}$")) { //$NON-NLS-1$ //$NON-NLS-2$ + MessageDialog.openError(getShell(), + Messages.TraceControl_EnableKernelEventsDialogTitle, + Messages.TraceControl_InvalidProbeNameError + " (" + temp + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$ + + return; + } + + if(!fProbeText.getText().matches("\\s*")) { //$NON-NLS-1$ + fProbeEventName = temp; + // fProbeString will be validated by lttng-tools + fProbeString = fProbeText.getText(); + } + + // initialize function string + fFunctionEventName = null; + fFunctionString = null; + + temp = fFunctionEventNameText.getText(); + if (!temp.matches("^[\\s]{0,}$") && !temp.matches("^[a-zA-Z0-9\\-\\_]{1,}$")) { //$NON-NLS-1$ //$NON-NLS-2$ + MessageDialog.openError(getShell(), + Messages.TraceControl_EnableKernelEventsDialogTitle, + Messages.TraceControl_InvalidProbeNameError + " (" + temp + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$ + + return; + } + + if(!fFunctionText.getText().matches("\\s*")) { //$NON-NLS-1$ + fFunctionEventName = temp; + // fFunctionString will be validated by lttng-tools + fFunctionString = fFunctionText.getText(); + } + + // validation successful -> call super.okPressed() + super.okPressed(); + } + + /* + * (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int) + */ + @Override + protected void buttonPressed(int buttonId) { + super.buttonPressed(buttonId); + } + + // ------------------------------------------------------------------------ + // Helper methods + // ------------------------------------------------------------------------ + + +} diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/GetEventInfoDialog.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/GetEventInfoDialog.java index 8729eb4f95..639929f173 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/GetEventInfoDialog.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/GetEventInfoDialog.java @@ -30,7 +30,6 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; /** @@ -106,6 +105,7 @@ public class GetEventInfoDialog extends Dialog implements IGetEventInfoDialog { super(shell); fIsKernel = isKernel; fSessions = Arrays.copyOf(sessions, sessions.length); + setShellStyle(SWT.RESIZE); } // ------------------------------------------------------------------------ @@ -153,10 +153,9 @@ public class GetEventInfoDialog extends Dialog implements IGetEventInfoDialog { // Main dialog panel fDialogComposite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(1, true); - fDialogComposite.setLayout(layout); - Label label = new Label(fDialogComposite, SWT.NONE); - // a simple way to make dialog wider :-) - label.setText(" "); //$NON-NLS-1$ + fDialogComposite.setLayout(layout); + fDialogComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); + fSessionsGroup = new Group(fDialogComposite, SWT.SHADOW_NONE); fSessionsGroup.setText(Messages.TraceControl_EnableEventsSessionGroupName); layout = new GridLayout(1, true); diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableKernelEventsDialog.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableKernelEventsDialog.java new file mode 100644 index 0000000000..7362eacc48 --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableKernelEventsDialog.java @@ -0,0 +1,70 @@ +/********************************************************************** + * Copyright (c) 2012 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Bernd Hufmann - Initial API and implementation + **********************************************************************/ +package org.eclipse.linuxtools.lttng.ui.views.control.dialogs; + +import java.util.List; + +/** + * IEnableKernelEventsDialog + *

+ * Interface for collection information for enabling kernel events. + *

+ */ +public interface IEnableKernelEventsDialog { + + // ------------------------------------------------------------------------ + // Accessors + // ------------------------------------------------------------------------ + + /** + * @return a flag indicating whether all tracepoints shall be enabled or not. + */ + public boolean isAllTracePoints(); + + /** + * @return a flag indicating whether syscalls shall be enabled or not. + */ + public boolean isAllSysCalls(); + + /** + * @return a list of event names to be enabled. + */ + public List getEventNames(); + + /** + * @return event name of the dynamic probe (or null if no dynamic probe). + */ + public String getProbeEventName(); + + /** + * @return the dynamic probe (or null if no dynamic probe). + */ + public String getProbeName(); + + /** + * @return event name of the dynamic function entry/exit probe (or null if no dynamic probe). + */ + public String getFunctionEventName(); + + /** + * @return the dynamic function entry/exit probe (or null if no dynamic probe). + */ + public String getFunction(); + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + /** + * @return the open return value + */ + int open(); +} \ No newline at end of file diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/NewConnectionDialog.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/NewConnectionDialog.java index 0adec5e0f1..dd7edec72d 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/NewConnectionDialog.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/NewConnectionDialog.java @@ -109,6 +109,7 @@ public class NewConnectionDialog extends Dialog implements INewConnectionDialog if (hosts != null) { fExistingHosts = Arrays.copyOf(hosts, hosts.length); } + setShellStyle(SWT.RESIZE); } // ------------------------------------------------------------------------ @@ -156,19 +157,20 @@ public class NewConnectionDialog extends Dialog implements INewConnectionDialog // Main dialog panel fDialogComposite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(1, true); - fDialogComposite.setLayout(layout); + fDialogComposite.setLayout(layout); + fDialogComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); // Existing connections group fComboGroup = new Group(fDialogComposite, SWT.SHADOW_NONE); fComboGroup.setText(Messages.TraceControl_NewNodeExistingConnectionGroupName); layout = new GridLayout(2, true); fComboGroup.setLayout(layout); - GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + GridData data = new GridData(GridData.FILL_HORIZONTAL); fComboGroup.setLayoutData(data); fExistingHostsCombo = new CCombo(fComboGroup, SWT.READ_ONLY); fExistingHostsCombo.setToolTipText(Messages.TraceControl_NewNodeComboToolTip); - fExistingHostsCombo.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false, 2, 1)); + fExistingHostsCombo.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); String items[] = new String[fExistingHosts.length]; for (int i = 0; i < items.length; i++) { @@ -180,13 +182,13 @@ public class NewConnectionDialog extends Dialog implements INewConnectionDialog // Node information grop fTextGroup = new Group(fDialogComposite, SWT.SHADOW_NONE); - layout = new GridLayout(2, true); + layout = new GridLayout(3, true); fTextGroup.setLayout(layout); - data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + data = new GridData(GridData.FILL_HORIZONTAL); fTextGroup.setLayoutData(data); fButton = new Button(fTextGroup, SWT.CHECK); - fButton.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false, 2, 1)); + fButton.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 3, 1)); fButton.setText(Messages.TraceControl_NewNodeEditButtonName); fButton.setEnabled(fExistingHosts.length > 0); @@ -236,10 +238,11 @@ public class NewConnectionDialog extends Dialog implements INewConnectionDialog }); // layout widgets - data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + data = new GridData(GridData.FILL_HORIZONTAL); fHostNameText.setText("666.666.666.666"); //$NON-NLS-1$ Point minSize = fHostNameText.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); data.widthHint = minSize.x + 5; + data.horizontalSpan = 2; fConnectionNameText.setLayoutData(data); fHostNameText.setLayoutData(data); diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/AssignEventHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/AssignEventHandler.java index b637ddde49..c169e4259c 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/AssignEventHandler.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/AssignEventHandler.java @@ -109,9 +109,9 @@ public class AssignEventHandler extends AbstractHandler { TraceChannelComponent channel = dialog.getChannel(); if (channel == null) { // enable events on default channel (which will be created by lttng-tools) - dialog.getSession().enableEvent(eventNames, fIsKernel, monitor); + dialog.getSession().enableEvents(eventNames, fIsKernel, monitor); } else { - channel.enableEvent(eventNames, monitor); + channel.enableEvents(eventNames, monitor); } } catch (ExecutionException e) { diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseControlViewHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseControlViewHandler.java new file mode 100644 index 0000000000..59e3a21a37 --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseControlViewHandler.java @@ -0,0 +1,54 @@ +/********************************************************************** + * Copyright (c) 2012 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Bernd Hufmann - Initial API and implementation + **********************************************************************/ +package org.eclipse.linuxtools.lttng.ui.views.control.handlers; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.linuxtools.lttng.ui.views.control.ControlView; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; + +/** + * BaseControlViewHandler + *

+ * Abstract Command handler implementation for all control view handlers. + *

+ */ +abstract public class BaseControlViewHandler extends AbstractHandler { + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + /** + * @return returns the workbench page for the Control View + */ + protected IWorkbenchPage getWorkbenchPage() { + // Check if we are closing down + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + if (window == null) { + return null; + } + + // Check if we are in the Project View + IWorkbenchPage page = window.getActivePage(); + if (page == null) { + return null; + } + + IWorkbenchPart part = page.getActivePart(); + if (!(part instanceof ControlView)) { + return null; + } + return page; + } +} \ No newline at end of file diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseEnableEventHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseEnableEventHandler.java new file mode 100644 index 0000000000..713af55295 --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseEnableEventHandler.java @@ -0,0 +1,163 @@ +/********************************************************************** + * Copyright (c) 2012 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Bernd Hufmann - Initial API and implementation + **********************************************************************/ +package org.eclipse.linuxtools.lttng.ui.views.control.handlers; + +import java.util.List; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.window.Window; +import org.eclipse.linuxtools.lttng.ui.LTTngUiPlugin; +import org.eclipse.linuxtools.lttng.ui.views.control.Messages; +import org.eclipse.linuxtools.lttng.ui.views.control.dialogs.EnableKernelEventDialog; +import org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEventsDialog; +import org.eclipse.linuxtools.lttng.ui.views.control.model.ITraceControlComponent; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.KernelProviderComponent; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TargetNodeComponent; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceProviderGroup; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceSessionComponent; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; + +/** + * EnableEventOnSessionHandler + *

+ * Command handler implementation to enable events for a known session and default channel 'channel0' + * (which will be created if doesn't exist). + *

+ */ +abstract public class BaseEnableEventHandler extends BaseControlViewHandler { + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + /** + * The session component the command is to be executed on. + */ + protected TraceSessionComponent fSession = null; + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + + abstract void enableEvents(List eventNames, IProgressMonitor monitor) throws ExecutionException; + abstract void enableSyscalls(IProgressMonitor monitor) throws ExecutionException; + abstract void enableProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException; + abstract void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException; + + /* + * (non-Javadoc) + * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + + final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + + if (window == null) { + return false; + } + + TargetNodeComponent node = fSession.getTargetNode(); + List providers = node.getChildren(TraceProviderGroup.class); + List kernelProvider = providers.get(0).getChildren(KernelProviderComponent.class); + + final IEnableKernelEventsDialog dialog = new EnableKernelEventDialog(window.getShell(), (KernelProviderComponent)kernelProvider.get(0)); + + if (dialog.open() != Window.OK) { + return null; + } + + Job job = new Job(Messages.TraceControl_ChangeEventStateJob) { + @Override + protected IStatus run(IProgressMonitor monitor) { + String errorString = null; + + // Enable tracepoint events + try { + if (dialog.isAllTracePoints()) { + enableEvents(null, monitor); + } else { + List eventNames = dialog.getEventNames(); + if (eventNames.size() > 0) { + enableEvents(eventNames, monitor); + } + } + } catch (ExecutionException e) { + if (errorString == null) { + errorString = new String(); + } + errorString += e.toString() + "\n"; //$NON-NLS-1$ + } + + // Enable syscall events + try { + if (dialog.isAllSysCalls()) { + enableSyscalls(monitor); + } + } catch (ExecutionException e) { + if (errorString == null) { + errorString = new String(); + } + errorString += e.toString() + "\n"; //$NON-NLS-1$ + } + + // Enable dynamic probe + try { + if ((dialog.getProbeEventName() != null && dialog.getProbeName() != null)) { + enableProbe(dialog.getProbeEventName(), dialog.getProbeName(), monitor); + } + } catch (ExecutionException e) { + if (errorString == null) { + errorString = new String(); + } + errorString += e.toString() + "\n"; //$NON-NLS-1$ + } + + // Enable dynamic function probe + try { + if ((dialog.getFunctionEventName() != null) && (dialog.getFunction() != null)) { + fSession.enableFunctionProbe(dialog.getFunctionEventName(), dialog.getFunction(), monitor); + } + } catch (ExecutionException e) { + if (errorString == null) { + errorString = new String(); + } + errorString += e.toString() + "\n"; //$NON-NLS-1$ + } + + // get session configuration in all cases + try { + fSession.getConfigurationFromNode(monitor); + } catch (ExecutionException e) { + if (errorString == null) { + errorString = new String(); + } + errorString += Messages.TraceControl_ListSessionFailure + ": " + e.toString(); //$NON-NLS-1$ + } + + if (errorString != null) { + return new Status(Status.ERROR, LTTngUiPlugin.PLUGIN_ID, errorString); + } + return Status.OK_STATUS; + } + }; + job.setUser(true); + job.schedule(); + + return null; + } +} diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseNodeHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseNodeHandler.java index feecfb3f6a..51813b3760 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseNodeHandler.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/BaseNodeHandler.java @@ -11,15 +11,11 @@ **********************************************************************/ package org.eclipse.linuxtools.lttng.ui.views.control.handlers; -import org.eclipse.core.commands.AbstractHandler; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.linuxtools.lttng.ui.views.control.ControlView; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TargetNodeComponent; import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; /** * BaseNodeHandler @@ -27,7 +23,7 @@ import org.eclipse.ui.PlatformUI; * Command handler implementation to delete a target host. *

*/ -abstract public class BaseNodeHandler extends AbstractHandler { +abstract public class BaseNodeHandler extends BaseControlViewHandler { // ------------------------------------------------------------------------ // Attributes @@ -46,25 +42,15 @@ abstract public class BaseNodeHandler extends AbstractHandler { */ @Override public boolean isEnabled() { - fTargetNode = null; - // Check if we are closing down - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { - return false; - } - - // Check if we are in the Project View - IWorkbenchPage page = window.getActivePage(); + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); if (page == null) { return false; } - IWorkbenchPart part = page.getActivePart(); - if (!(part instanceof ControlView)) { - return false; - } - + fTargetNode = null; + // Check if the node component is selected ISelection selection = page.getSelection(ControlView.ID); if (selection instanceof StructuredSelection) { @@ -73,4 +59,6 @@ abstract public class BaseNodeHandler extends AbstractHandler { } return fTargetNode != null; } + + } \ No newline at end of file diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeChannelStateHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeChannelStateHandler.java index ac1d2cc72d..dd8912a0f9 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeChannelStateHandler.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeChannelStateHandler.java @@ -15,7 +15,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; @@ -32,7 +31,6 @@ import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceChannelComp import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceDomainComponent; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceSessionComponent; import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; @@ -42,7 +40,7 @@ import org.eclipse.ui.PlatformUI; * Abstract command handler implementation to enable or disabling a trace channel. *

*/ -abstract public class ChangeChannelStateHandler extends AbstractHandler { +abstract public class ChangeChannelStateHandler extends BaseControlViewHandler { // ------------------------------------------------------------------------ // Attributes @@ -171,23 +169,12 @@ abstract public class ChangeChannelStateHandler extends AbstractHandler { public boolean isEnabled() { reset(); - // Check if we are closing down - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { - return false; - } - - // Check if we are in the Project View - IWorkbenchPage page = window.getActivePage(); + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); if (page == null) { return false; } - - IWorkbenchPart part = page.getActivePart(); - if (!(part instanceof ControlView)) { - return false; - } - + // Check if one or more session are selected ISelection selection = page.getSelection(ControlView.ID); if (selection instanceof StructuredSelection) { diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeEventStateHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeEventStateHandler.java index 362734a970..a69f09808d 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeEventStateHandler.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeEventStateHandler.java @@ -15,7 +15,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; @@ -32,7 +31,6 @@ import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceChannelComp import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceEventComponent; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceSessionComponent; import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; @@ -42,7 +40,7 @@ import org.eclipse.ui.PlatformUI; * Base Command handler implementation to enable or disabling a trace channel. *

*/ -abstract public class ChangeEventStateHandler extends AbstractHandler { +abstract public class ChangeEventStateHandler extends BaseControlViewHandler { // ------------------------------------------------------------------------ // Attributes @@ -152,24 +150,13 @@ abstract public class ChangeEventStateHandler extends AbstractHandler { */ @Override public boolean isEnabled() { - reset(); - - // Check if we are closing down - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { - return false; - } - - // Check if we are in the Project View - IWorkbenchPage page = window.getActivePage(); + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); if (page == null) { return false; } - IWorkbenchPart part = page.getActivePart(); - if (!(part instanceof ControlView)) { - return false; - } + reset(); // Check if one or more session are selected ISelection selection = page.getSelection(ControlView.ID); diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeSessionStateHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeSessionStateHandler.java index 08f28df4a6..15b7dcce56 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeSessionStateHandler.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/ChangeSessionStateHandler.java @@ -15,7 +15,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; @@ -30,7 +29,6 @@ import org.eclipse.linuxtools.lttng.ui.views.control.Messages; import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceSessionState; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceSessionComponent; import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; @@ -40,7 +38,7 @@ import org.eclipse.ui.PlatformUI; * Abstract command handler implementation to start or stop one or more trace sessions. *

*/ -abstract public class ChangeSessionStateHandler extends AbstractHandler { +abstract public class ChangeSessionStateHandler extends BaseControlViewHandler { // ------------------------------------------------------------------------ // Attributes @@ -114,24 +112,13 @@ abstract public class ChangeSessionStateHandler extends AbstractHandler { */ @Override public boolean isEnabled() { - fSessions.clear(); - - // Check if we are closing down - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { - return false; - } - - // Check if we are in the Project View - IWorkbenchPage page = window.getActivePage(); + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); if (page == null) { return false; } - IWorkbenchPart part = page.getActivePart(); - if (!(part instanceof ControlView)) { - return false; - } + fSessions.clear(); // Check if one or more session are selected ISelection selection = page.getSelection(ControlView.ID); diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateChannelOnDomainHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateChannelOnDomainHandler.java index 30a8d8d9b9..65adabe53d 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateChannelOnDomainHandler.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateChannelOnDomainHandler.java @@ -15,7 +15,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; @@ -34,7 +33,6 @@ import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceSessionState; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceDomainComponent; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceSessionComponent; import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; @@ -44,7 +42,7 @@ import org.eclipse.ui.PlatformUI; * Command handler implementation to create a trace channel for known domain. *

*/ -public class CreateChannelOnDomainHandler extends AbstractHandler { +public class CreateChannelOnDomainHandler extends BaseControlViewHandler { // ------------------------------------------------------------------------ // Attributes @@ -123,24 +121,13 @@ public class CreateChannelOnDomainHandler extends AbstractHandler { */ @Override public boolean isEnabled() { - fDomain = null; - - // Check if we are closing down - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { - return false; - } - - // Check if we are in the Project View - IWorkbenchPage page = window.getActivePage(); + + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); if (page == null) { return false; } - - IWorkbenchPart part = page.getActivePart(); - if (!(part instanceof ControlView)) { - return false; - } + fDomain = null; // Check if one domain is selected ISelection selection = page.getSelection(ControlView.ID); diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateChannelOnSessionHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateChannelOnSessionHandler.java index 6da2c81d14..8755b28b38 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateChannelOnSessionHandler.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateChannelOnSessionHandler.java @@ -15,7 +15,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; @@ -45,7 +44,7 @@ import org.eclipse.ui.PlatformUI; * (on session level). *

*/ -public class CreateChannelOnSessionHandler extends AbstractHandler { +public class CreateChannelOnSessionHandler extends BaseControlViewHandler { // ------------------------------------------------------------------------ // Attributes @@ -124,24 +123,13 @@ public class CreateChannelOnSessionHandler extends AbstractHandler { */ @Override public boolean isEnabled() { - fSession = null; - - // Check if we are closing down - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { - return false; - } - - // Check if we are in the Project View - IWorkbenchPage page = window.getActivePage(); + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); if (page == null) { return false; } - IWorkbenchPart part = page.getActivePart(); - if (!(part instanceof ControlView)) { - return false; - } + fSession = null; // Check if one session is selected ISelection selection = page.getSelection(ControlView.ID); diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateSessionHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateSessionHandler.java index 77ecd2c9f4..8d3f20addd 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateSessionHandler.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/CreateSessionHandler.java @@ -11,7 +11,6 @@ **********************************************************************/ package org.eclipse.linuxtools.lttng.ui.views.control.handlers; -import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; @@ -28,7 +27,6 @@ import org.eclipse.linuxtools.lttng.ui.views.control.dialogs.CreateSessionDialog import org.eclipse.linuxtools.lttng.ui.views.control.dialogs.ICreateSessionDialog; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceSessionGroup; import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; @@ -38,7 +36,7 @@ import org.eclipse.ui.PlatformUI; * Command handler implementation to create a trace session. *

*/ -public class CreateSessionHandler extends AbstractHandler { +public class CreateSessionHandler extends BaseControlViewHandler { // ------------------------------------------------------------------------ // Attributes @@ -95,24 +93,14 @@ public class CreateSessionHandler extends AbstractHandler { */ @Override public boolean isEnabled() { - fSessionGroup = null; - - // Check if we are closing down - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { - return false; - } - - // Check if we are in the Project View - IWorkbenchPage page = window.getActivePage(); + + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); if (page == null) { return false; } - IWorkbenchPart part = page.getActivePart(); - if (!(part instanceof ControlView)) { - return false; - } + fSessionGroup = null; // Check if the session group project is selected ISelection selection = page.getSelection(ControlView.ID); diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/DestroySessionHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/DestroySessionHandler.java index 67a6d01460..10baaac5ce 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/DestroySessionHandler.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/DestroySessionHandler.java @@ -15,7 +15,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; @@ -32,7 +31,6 @@ import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceSessionState; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceSessionComponent; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceSessionGroup; import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; @@ -42,7 +40,7 @@ import org.eclipse.ui.PlatformUI; * Command handler implementation to destroy one or more trace sessions. *

*/ -public class DestroySessionHandler extends AbstractHandler { +public class DestroySessionHandler extends BaseControlViewHandler { // ------------------------------------------------------------------------ // Attributes @@ -109,24 +107,12 @@ public class DestroySessionHandler extends AbstractHandler { */ @Override public boolean isEnabled() { - fSessions.clear(); - - // Check if we are closing down - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { - return false; - } - - // Check if we are in the Project View - IWorkbenchPage page = window.getActivePage(); + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); if (page == null) { return false; } - - IWorkbenchPart part = page.getActivePart(); - if (!(part instanceof ControlView)) { - return false; - } + fSessions.clear(); // Check if one or more session are selected ISelection selection = page.getSelection(ControlView.ID); diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventHandler.java index e021cc535e..f6972f3820 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventHandler.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventHandler.java @@ -47,6 +47,6 @@ public class EnableEventHandler extends ChangeEventStateHandler { */ @Override protected void changeState(TraceChannelComponent channel, List eventNames, IProgressMonitor monitor) throws ExecutionException{ - channel.enableEvent(eventNames, monitor); + channel.enableEvents(eventNames, monitor); } } diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnChannelHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnChannelHandler.java new file mode 100644 index 0000000000..2c20bddf28 --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnChannelHandler.java @@ -0,0 +1,107 @@ +/********************************************************************** + * Copyright (c) 2012 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Bernd Hufmann - Initial API and implementation + **********************************************************************/ +package org.eclipse.linuxtools.lttng.ui.views.control.handlers; + +import java.util.Iterator; +import java.util.List; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.linuxtools.lttng.ui.views.control.ControlView; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceChannelComponent; +import org.eclipse.ui.IWorkbenchPage; + +/** + * EnableEventOnChannelHandler + *

+ * Command handler implementation to enable events for a known channel. + *

+ */ +public class EnableEventOnChannelHandler extends BaseEnableEventHandler { + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + /** + * The channel component the command is to be executed on. + */ + private TraceChannelComponent fChannel = null; + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableEvents(List eventNames, IProgressMonitor monitor) throws ExecutionException { + fChannel.enableEvents(eventNames, monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { + fChannel.enableSyscalls(monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableProbe(java.lang.String, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + fChannel.enableProbe(eventName, probe, monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableFunctionProbe(java.lang.String, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + fChannel.enableFunctionProbe(eventName, probe, monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.core.commands.AbstractHandler#isEnabled() + */ + @Override + public boolean isEnabled() { + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); + if (page == null) { + return false; + } + + fChannel = null; + ISelection selection = page.getSelection(ControlView.ID); + if (selection instanceof StructuredSelection) { + StructuredSelection structered = ((StructuredSelection) selection); + for (Iterator iterator = structered.iterator(); iterator.hasNext();) { + Object element = (Object) iterator.next(); + if (element instanceof TraceChannelComponent) { + fChannel = (TraceChannelComponent) element; + fSession = fChannel.getSession(); + } + } + } + return fChannel != null; + } + +} diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnDomainHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnDomainHandler.java new file mode 100644 index 0000000000..47b282ff2c --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnDomainHandler.java @@ -0,0 +1,114 @@ +/********************************************************************** + * Copyright (c) 2012 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Bernd Hufmann - Initial API and implementation + **********************************************************************/ +package org.eclipse.linuxtools.lttng.ui.views.control.handlers; + +import java.util.Iterator; +import java.util.List; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.linuxtools.lttng.ui.views.control.ControlView; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceSessionState; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceDomainComponent; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceSessionComponent; +import org.eclipse.ui.IWorkbenchPage; + +/** + * EnableEventOnDomainHandler + *

+ * Command handler implementation to enable events for a known domain and default channel 'channel0' + * (which will be created if doesn't exist). + *

+ */ +public class EnableEventOnDomainHandler extends BaseEnableEventHandler { + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + /** + * The domain component the command is to be executed on. + */ + private TraceDomainComponent fDomain = null; + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableEvents(List eventNames, IProgressMonitor monitor) throws ExecutionException { + fDomain.enableEvents(eventNames, monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { + fDomain.enableSyscalls(monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableProbe(java.lang.String, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + fDomain.enableProbe(eventName, probe, monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableFunctionProbe(java.lang.String, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + fDomain.enableFunctionProbe(eventName, probe, monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.core.commands.AbstractHandler#isEnabled() + */ + @Override + public boolean isEnabled() { + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); + if (page == null) { + return false; + } + + fDomain = null; + ISelection selection = page.getSelection(ControlView.ID); + if (selection instanceof StructuredSelection) { + StructuredSelection structered = ((StructuredSelection) selection); + for (Iterator iterator = structered.iterator(); iterator.hasNext();) { + Object element = (Object) iterator.next(); + if (element instanceof TraceDomainComponent) { + // Add only TraceSessionComponents is inactive and not destroyed + TraceDomainComponent domain = (TraceDomainComponent) element; + TraceSessionComponent session = domain.getSession(); + if(session.getSessionState() == TraceSessionState.INACTIVE && !session.isDestroyed() && domain.isKernel()) { + fDomain = domain; + fSession = session; + } + } + } + } + return fDomain != null; + } +} diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnSessionHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnSessionHandler.java new file mode 100644 index 0000000000..52b8deec57 --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/EnableEventOnSessionHandler.java @@ -0,0 +1,109 @@ +/********************************************************************** + * Copyright (c) 2012 Ericsson + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Bernd Hufmann - Initial API and implementation + **********************************************************************/ +package org.eclipse.linuxtools.lttng.ui.views.control.handlers; + +import java.util.Iterator; +import java.util.List; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.linuxtools.lttng.ui.views.control.ControlView; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceSessionState; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceSessionComponent; +import org.eclipse.ui.IWorkbenchPage; + +/** + * EnableEventOnSessionHandler + *

+ * Command handler implementation to enable events for a known session and default channel 'channel0' + * (which will be created if doesn't exist). + *

+ */ +public class EnableEventOnSessionHandler extends BaseEnableEventHandler { + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + + //------------------------------------------------------------------------- + // Operations + // ------------------------------------------------------------------------ + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableEvents(List eventNames, IProgressMonitor monitor) throws ExecutionException { + fSession.enableEvents(eventNames, true, monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { + fSession.enableSyscalls(monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableProbe(java.lang.String, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + fSession.enableProbe(eventName, probe, monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableFunctionProbe(java.lang.String, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + fSession.enableFunctionProbe(eventName, probe, monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.core.commands.AbstractHandler#isEnabled() + */ + @Override + public boolean isEnabled() { + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); + if (page == null) { + return false; + } + + fSession = null; + + // Check if one session is selected + ISelection selection = page.getSelection(ControlView.ID); + if (selection instanceof StructuredSelection) { + StructuredSelection structered = ((StructuredSelection) selection); + for (Iterator iterator = structered.iterator(); iterator.hasNext();) { + Object element = (Object) iterator.next(); + if (element instanceof TraceSessionComponent) { + // Add only TraceSessionComponents is inactive and not destroyed + TraceSessionComponent session = (TraceSessionComponent) element; + if(session.getSessionState() == TraceSessionState.INACTIVE && !session.isDestroyed()) { + fSession = session; + } + } + } + } + return fSession != null; + } +} diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/NewConnectionHandler.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/NewConnectionHandler.java index 118e8206c5..0fba7326ba 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/NewConnectionHandler.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/handlers/NewConnectionHandler.java @@ -11,7 +11,6 @@ **********************************************************************/ package org.eclipse.linuxtools.lttng.ui.views.control.handlers; -import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.jface.dialogs.MessageDialog; @@ -37,7 +36,7 @@ import org.eclipse.ui.PlatformUI; * Command handler for creation new connection for trace control. *

*/ -public class NewConnectionHandler extends AbstractHandler { +public class NewConnectionHandler extends BaseControlViewHandler { // ------------------------------------------------------------------------ // Constants @@ -137,22 +136,17 @@ public class NewConnectionHandler extends AbstractHandler { */ @Override public boolean isEnabled() { - fRoot = null; - - // Check if we are closing down - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { + + // Get workbench page for the Control View + IWorkbenchPage page = getWorkbenchPage(); + if (page == null) { return false; } - // Check if we are in the Control View - IWorkbenchPage page = window.getActivePage(); - if (page == null) return false; - IWorkbenchPart part = page.getActivePart(); - if (!(part instanceof ControlView)) { - return false; - } + fRoot = null; + // no need to verify part because it has been already done in getWorkbenchPage() + IWorkbenchPart part = page.getActivePart(); fRoot = ((ControlView) part).getTraceControlRoot(); return (fRoot != null); diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/messages.properties b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/messages.properties index 00e6268e30..1fedcabf75 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/messages.properties +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/messages.properties @@ -55,7 +55,7 @@ TraceControl_FileSubSystemError=File subsystem error in session creation dialog. TraceControl_EnableChannelDialogTitle=Enable Channel TraceControl_EnableChannelNameLabel=Channel Name -TraceControl_EnableChannelNameLabelTooltip=The name of the channel to be enabled. +TraceControl_EnableChannelNameTooltip=The name of the channel to be enabled. TraceControl_EnableChannelSubBufferSizeTooltip=The sub-buffers size of the channel. TraceControl_EnableChannelNbSubBuffersTooltip=The number of sub-buffers of the channel. TraceControl_EnableChannelSwitchTimerTooltip=The switch timer interval in usec. @@ -74,6 +74,22 @@ TraceControl_EnableEventsChannelsTooltip=List of available channels of selected TraceControl_EnableEventsNoSessionError=No session from session list is selected. TraceControl_EnableEventsNoChannelError=No channel from channel list is selected. +TraceControl_EnableKernelEventsDialogTitle=Enable Kernel Events +TraceControl_EnableEventsTracepointGroupName=Tracepoint Events +TraceControl_EnableEventsTracepointTreeTooltip=List of available kernel tracepoint events +TraceControl_EnableEventsTracepointTreeAllLabel=All +TraceControl_EnableEventsSyscallName=All Syscalls +TraceControl_EnableEventsSyscallTooltip=Enable all Syscalls +TraceControl_EnableEventsProbeGroupName=Dynamic Probe +TraceControl_EnableEventsProbeEventNameLabel=Event Name +TraceControl_EnableEventsProbeEventNameTooltip=The name of the event for enabling a dynamic probe +TraceControl_EnableEventsProbeNameLabel=Probe +TraceControl_EnableEventsProbeNameTooltip=[addr | symbol | symbol+offset]\nAddr and offset can be octal (0NNN...),\ndecimal (NNN...) or hexadecimal (0xNNN...) +TraceControl_EnableEventsFucntionGroupName=Dynamic Function Entry/Return Probe +TraceControl_EnableEventsFunctionEventNameTooltip=The name of the event for enabling a dynamic function entry/return probe +TraceControl_EnableEventsFunctionNameLabel=Function +TraceControl_InvalidProbeNameError=The probe name is invalid + # Tree structure strings TraceControl_KernelDomainDisplayName=Kernel TraceControl_UstGlobalDomainDisplayName=UST global diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceChannelComponent.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceChannelComponent.java index cfda00de56..7e48a1a2c1 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceChannelComponent.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceChannelComponent.java @@ -235,6 +235,13 @@ public class TraceChannelComponent extends TraceControlComponent { return ((TraceDomainComponent)getParent()).isKernel(); } + /** + * @return the parent target node + */ + public TargetNodeComponent getTargetNode() { + return ((TraceDomainComponent)getParent()).getTargetNode(); + } + // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ @@ -243,8 +250,8 @@ public class TraceChannelComponent extends TraceControlComponent { * @param eventNames - a list of event names to enabled. * @throws ExecutionException */ - public void enableEvent(List eventNames) throws ExecutionException { - enableEvent(eventNames, new NullProgressMonitor()); + public void enableEvents(List eventNames) throws ExecutionException { + enableEvents(eventNames, new NullProgressMonitor()); } /** @@ -253,8 +260,67 @@ public class TraceChannelComponent extends TraceControlComponent { * @param monitor - a progress monitor * @throws ExecutionException */ - public void enableEvent(List eventNames, IProgressMonitor monitor) throws ExecutionException { - getControlService().enableEvent(getParent().getParent().getName(), getName(), eventNames, isKernel(), monitor); + public void enableEvents(List eventNames, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableEvents(getSessionName(), getName(), eventNames, isKernel(), monitor); + } + + /** + * Enables all syscalls (for kernel domain) + * @throws ExecutionException + */ + public void enableSyscalls() throws ExecutionException { + enableSyscalls(new NullProgressMonitor()); + } + + /** + * Enables all syscalls (for kernel domain) + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { + getControlService().enableSyscalls(getSessionName(), getName(), monitor); + } + + /** + * Enables a dynamic probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @throws ExecutionException + */ + public void enableProbe(String eventName, String probe) throws ExecutionException { + enableProbe(eventName, probe, new NullProgressMonitor()); + } + + /** + * Enables a dynamic probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableProbe(getSessionName(), getName(), eventName, probe, monitor); + } + + /** + * Enables a dynamic function entry/return probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @throws ExecutionException + */ + public void enableFunctionProbe(String eventName, String probe) throws ExecutionException { + enableFunctionProbe(eventName, probe, new NullProgressMonitor()); + } + + /** + * Enables a dynamic function entry/return probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableFunctionProbe(getSessionName(), getName(), eventName, probe, monitor); } /** diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceDomainComponent.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceDomainComponent.java index 5163df7606..5283d1f8f9 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceDomainComponent.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceDomainComponent.java @@ -127,6 +127,13 @@ public class TraceDomainComponent extends TraceControlComponent { List channels = getChildren(TraceChannelComponent.class); return (TraceChannelComponent[])channels.toArray(new TraceChannelComponent[channels.size()]); } + + /** + * @return the parent target node + */ + public TargetNodeComponent getTargetNode() { + return ((TraceSessionComponent)getParent()).getTargetNode(); + } // ------------------------------------------------------------------------ // Operations @@ -168,7 +175,7 @@ public class TraceDomainComponent extends TraceControlComponent { * @throws ExecutionException */ public void enableChannels(List channelNames, IChannelInfo info, IProgressMonitor monitor) throws ExecutionException { - getControlService().enableChannel(getParent().getName(), channelNames, isKernel(), info, monitor); + getControlService().enableChannels(getParent().getName(), channelNames, isKernel(), info, monitor); } /** * Disables channels with given names which are part of this domain. @@ -185,6 +192,76 @@ public class TraceDomainComponent extends TraceControlComponent { * @throws ExecutionException */ public void disableChannels(List channelNames, IProgressMonitor monitor) throws ExecutionException { - getControlService().disableChannel(getParent().getName(), channelNames, isKernel(), monitor); + getControlService().disableChannels(getParent().getName(), channelNames, isKernel(), monitor); + } + + /** + * Enables a list of events with no additional parameters. + * @param eventNames - a list of event names to enabled. + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableEvents(List eventNames, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableEvents(getSessionName(), null, eventNames, isKernel(), monitor); + } + + /** + * Enables all syscalls (for kernel domain) + * @throws ExecutionException + */ + public void enableSyscalls() throws ExecutionException { + enableSyscalls(new NullProgressMonitor()); + } + + /** + * Enables all syscalls (for kernel domain) + * @param monitor - a progress monitor + * @throws ExecutionException + */ + + public void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { + getControlService().enableSyscalls(getSessionName(), null, monitor); + } + + /** + * Enables a dynamic probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @throws ExecutionException + */ + public void enableProbe(String eventName, String probe) throws ExecutionException { + enableProbe(eventName, probe, new NullProgressMonitor()); + } + + /** + * Enables a dynamic probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableProbe(getSessionName(), null, eventName, probe, monitor); + } + + /** + * Enables a dynamic function entry/return probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @throws ExecutionException + */ + public void enableFunctionProbe(String eventName, String probe) throws ExecutionException { + enableFunctionProbe(eventName, probe, new NullProgressMonitor()); + } + + /** + * Enables a dynamic function entry/return probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableFunctionProbe(getSessionName(), null, eventName, probe, monitor); } } diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceSessionComponent.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceSessionComponent.java index 96a28d1913..5279710e49 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceSessionComponent.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceSessionComponent.java @@ -181,6 +181,13 @@ public class TraceSessionComponent extends TraceControlComponent { return (TraceDomainComponent[])sessions.toArray(new TraceDomainComponent[sessions.size()]); } + /** + * @return the parent target node + */ + public TargetNodeComponent getTargetNode() { + return ((TraceSessionGroup)getParent()).getTargetNode(); + } + // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ @@ -249,7 +256,7 @@ public class TraceSessionComponent extends TraceControlComponent { * @throws ExecutionException */ public void enableEvent(List eventNames, boolean isKernel) throws ExecutionException { - enableEvent(eventNames, isKernel, new NullProgressMonitor()); + enableEvents(eventNames, isKernel, new NullProgressMonitor()); } /** @@ -259,7 +266,66 @@ public class TraceSessionComponent extends TraceControlComponent { * @param monitor - a progress monitor * @throws ExecutionException */ - public void enableEvent(List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { - getControlService().enableEvent(getName(), null, eventNames, isKernel, monitor); + public void enableEvents(List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableEvents(getName(), null, eventNames, isKernel, monitor); + } + + /** + * Enables all syscalls (for kernel domain) + * @throws ExecutionException + */ + public void enableSyscalls() throws ExecutionException { + enableSyscalls(new NullProgressMonitor()); + } + + /** + * Enables all syscalls (for kernel domain) + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { + getControlService().enableSyscalls(getName(), null, monitor); + } + + /** + * Enables a dynamic probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @throws ExecutionException + */ + public void enableProbe(String eventName, String probe) throws ExecutionException { + enableProbe(eventName, probe, new NullProgressMonitor()); + } + + /** + * Enables a dynamic probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableProbe(getName(), null, eventName, probe, monitor); + } + + /** + * Enables a dynamic function entry/return probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @throws ExecutionException + */ + public void enableFunctionProbe(String eventName, String probe) throws ExecutionException { + enableFunctionProbe(eventName, probe, new NullProgressMonitor()); + } + + /** + * Enables a dynamic function entry/return probe (for kernel domain) + * @param eventName - event name for probe + * @param probe - the actual probe + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableFunctionProbe(getName(), null, eventName, probe, monitor); } } diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceSessionGroup.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceSessionGroup.java index bce872311a..5b1a5a5180 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceSessionGroup.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/TraceSessionGroup.java @@ -53,6 +53,13 @@ public class TraceSessionGroup extends TraceControlComponent { // Accessors // ------------------------------------------------------------------------ + /** + * @return the parent target node + */ + public TargetNodeComponent getTargetNode() { + return (TargetNodeComponent)getParent(); + } + // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/service/ILttngControlService.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/service/ILttngControlService.java index 13a99e5611..a69d8aefe7 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/service/ILttngControlService.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/service/ILttngControlService.java @@ -110,7 +110,7 @@ public interface ILttngControlService { * @param monitor - a progress monitor * @throws ExecutionException */ - public void enableChannel(String sessionName, List channelNames, boolean isKernel, IChannelInfo info, IProgressMonitor monitor) throws ExecutionException; + public void enableChannels(String sessionName, List channelNames, boolean isKernel, IChannelInfo info, IProgressMonitor monitor) throws ExecutionException; /** * Disables a list of channels for given session and given channel information (configuration). @@ -120,7 +120,7 @@ public interface ILttngControlService { * @param monitor - a progress monitor * @throws ExecutionException */ - public void disableChannel(String sessionName, List channelNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException; + public void disableChannels(String sessionName, List channelNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException; /** * Enables a list of events with no additional parameters. @@ -131,8 +131,39 @@ public interface ILttngControlService { * @param monitor - a progress monitor * @throws ExecutionException */ - public void enableEvent(String sessionName, String channelName, List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException; - + public void enableEvents(String sessionName, String channelName, List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException; + + /** + * Enables all syscall events. + * @param sessionName - a session name + * @param channelName - a channel name (null for default channel) + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableSyscalls(String sessionName, String channelName, IProgressMonitor monitor) throws ExecutionException; + + /** + * Enables a dynamic probe. + * @param sessionName - a session name + * @param channelName - a channel name (null for default channel) + * @param monitor - a progress monitor + * @param eventName - a event name + * @param probe - a dynamic probe information + * @throws ExecutionException + */ + public void enableProbe(String sessionName, String channelName, String eventName, String probe, IProgressMonitor monitor) throws ExecutionException; + + /** + * Enables a dynamic function entry/return probe. + * @param sessionName - a session name + * @param channelName - a channel name (null for default channel) + * @param monitor - a progress monitor + * @param eventName - a event name + * @param function - a dynamic function entry/return probe information + * @throws ExecutionException + */ + public void enableFunctionProbe(String sessionName, String channelName, String eventName, String probe, IProgressMonitor monitor) throws ExecutionException; + /** * Disables a list of events with no additional parameters. * @param sessionName - a session name diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/service/LTTngControlService.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/service/LTTngControlService.java index 4f6fac63ee..2d1723714b 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/service/LTTngControlService.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/service/LTTngControlService.java @@ -116,6 +116,22 @@ public class LTTngControlService implements ILttngControlService { * Command line option for specifying all events. */ private final static String OPTION_ALL = " -a "; //$NON-NLS-1$ + /** + * Command line option for specifying tracepoint events. + */ + private final static String OPTION_TRACEPOINT = " --tracepoint "; //$NON-NLS-1$ + /** + * Command line option for specifying syscall events. + */ + private final static String OPTION_SYSCALL = " --syscall "; //$NON-NLS-1$ + /** + * Command line option for specifying a dynamic probe. + */ + private final static String OPTION_PROBE = " --probe "; //$NON-NLS-1$ + /** + * Command line option for specifying a dynamic function entry/return probe. + */ + private final static String OPTION_FUNCTION_PROBE = " --function "; //$NON-NLS-1$ /** * Optional command line option for configuring a channel's overwrite mode. */ @@ -606,7 +622,7 @@ public class LTTngControlService implements ILttngControlService { * @see org.eclipse.linuxtools.lttng.ui.views.control.service.ILttngControlService#enableChannel(java.lang.String, java.util.List, boolean, org.eclipse.linuxtools.lttng.ui.views.control.model.IChannelInfo, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void enableChannel(String sessionName, List channelNames, boolean isKernel, IChannelInfo info, IProgressMonitor monitor) throws ExecutionException { + public void enableChannels(String sessionName, List channelNames, boolean isKernel, IChannelInfo info, IProgressMonitor monitor) throws ExecutionException { // no channels to enable if (channelNames.size() == 0) { @@ -672,7 +688,7 @@ public class LTTngControlService implements ILttngControlService { * @see org.eclipse.linuxtools.lttng.ui.views.control.service.ILttngControlService#disableChannel(java.lang.String, java.util.List, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void disableChannel(String sessionName, List channelNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { + public void disableChannels(String sessionName, List channelNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { // no channels to enable if (channelNames.size() == 0) { @@ -712,7 +728,7 @@ public class LTTngControlService implements ILttngControlService { * @see org.eclipse.linuxtools.lttng.ui.views.control.service.ILttngControlService#enableEvent(java.lang.String, java.lang.String, java.util.List, boolean, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void enableEvent(String sessionName, String channelName, List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { + public void enableEvents(String sessionName, String channelName, List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { String newSessionName = formatParameter(sessionName); @@ -748,14 +764,108 @@ public class LTTngControlService implements ILttngControlService { command.append(OPTION_CHANNEL); command.append(channelName); } + + command.append(OPTION_TRACEPOINT); + + ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor); + + if (isError(result)) { + throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.service.ILttngControlService#enableSyscalls(java.lang.String, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + public void enableSyscalls(String sessionName, String channelName, IProgressMonitor monitor) throws ExecutionException { + String newSessionName = formatParameter(sessionName); + + StringBuffer command = new StringBuffer(COMMAND_ENABLE_EVENT); + + command.append(OPTION_ALL); + command.append(OPTION_KERNEL); + + command.append(OPTION_SESSION); + command.append(newSessionName); + + if (channelName != null) { + command.append(OPTION_CHANNEL); + command.append(channelName); + } + + command.append(OPTION_SYSCALL); + ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor); if (isError(result)) { throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.service.ILttngControlService#enableProbe(java.lang.String, java.lang.String, java.lang.String, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + public void enableProbe(String sessionName, String channelName, String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + String newSessionName = formatParameter(sessionName); + + StringBuffer command = new StringBuffer(COMMAND_ENABLE_EVENT); + + command.append(eventName); + command.append(OPTION_KERNEL); + + command.append(OPTION_SESSION); + command.append(newSessionName); + + if (channelName != null) { + command.append(OPTION_CHANNEL); + command.append(channelName); } + + command.append(OPTION_PROBE); + command.append(probe); + + ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor); + + if (isError(result)) { + throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$ + } } + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.service.ILttngControlService#enableFunctionProbe(java.lang.String, java.lang.String, java.lang.String, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + public void enableFunctionProbe(String sessionName, String channelName, String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { + String newSessionName = formatParameter(sessionName); + + StringBuffer command = new StringBuffer(COMMAND_ENABLE_EVENT); + + command.append(eventName); + command.append(OPTION_KERNEL); + + command.append(OPTION_SESSION); + command.append(newSessionName); + + if (channelName != null) { + command.append(OPTION_CHANNEL); + command.append(channelName); + } + + command.append(OPTION_FUNCTION_PROBE); + command.append(probe); + + ICommandResult result = fCommandShell.executeCommand(command.toString(), monitor); + + if (isError(result)) { + throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + /* * (non-Javadoc) * @see org.eclipse.linuxtools.lttng.ui.views.control.service.ILttngControlService#disableEvent(java.lang.String, java.lang.String, java.util.List, boolean, org.eclipse.core.runtime.IProgressMonitor) -- 2.34.1