From ccc66d010396ea6f8f818c06c329f69c31bd2993 Mon Sep 17 00:00:00 2001 From: Bernd Hufmann Date: Thu, 8 Mar 2012 10:08:28 -0500 Subject: [PATCH] Add capability to enable events with different parameters on session, domain and channel level --- .../control/model/impl/BaseEventInfoTest.java | 40 +- .../control/model/impl/EventInfoTest.java | 8 +- .../plugin.properties | 2 +- .../lttng/ui/views/control/Messages.java | 17 +- .../control/dialogs/EnableEventsDialog.java | 515 +++++++++++++++ .../dialogs/EnableKernelEventComposite.java | 609 ++++++++++++++++++ .../dialogs/EnableKernelEventDialog.java | 469 -------------- .../dialogs/EnableUstEventsComposite.java | 595 +++++++++++++++++ .../control/dialogs/GetEventInfoDialog.java | 5 - .../control/dialogs/IEnableEventsDialog.java | 37 ++ ...tsDialog.java => IEnableKernelEvents.java} | 65 +- .../control/dialogs/IEnableUstEvents.java | 76 +++ .../handlers/BaseEnableEventHandler.java | 151 +++-- .../CreateChannelOnSessionHandler.java | 1 - .../handlers/EnableEventOnChannelHandler.java | 42 +- .../handlers/EnableEventOnDomainHandler.java | 33 +- .../handlers/EnableEventOnSessionHandler.java | 36 +- .../ui/views/control/messages.properties | 18 +- .../ui/views/control/model/LogLevelType.java | 30 + .../views/control/model/TraceEventType.java | 1 + .../ui/views/control/model/TraceLogLevel.java | 2 +- .../control/model/impl/BaseEventInfo.java | 5 +- .../model/impl/TraceChannelComponent.java | 25 + .../model/impl/TraceDomainComponent.java | 26 + .../model/impl/TraceSessionComponent.java | 25 + .../property/BaseEventPropertySource.java | 15 +- .../property/TraceEventPropertySource.java | 17 +- .../control/service/ILttngControlService.java | 24 +- .../control/service/LTTngControlService.java | 49 +- 29 files changed, 2348 insertions(+), 590 deletions(-) create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableEventsDialog.java create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableKernelEventComposite.java delete 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/EnableUstEventsComposite.java create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableEventsDialog.java rename org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/{IEnableKernelEventsDialog.java => IEnableKernelEvents.java} (55%) create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableUstEvents.java create mode 100644 org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/LogLevelType.java diff --git a/org.eclipse.linuxtools.lttng.ui.tests/src/org/eclipse/linuxtools/lttng/ui/tests/control/model/impl/BaseEventInfoTest.java b/org.eclipse.linuxtools.lttng.ui.tests/src/org/eclipse/linuxtools/lttng/ui/tests/control/model/impl/BaseEventInfoTest.java index e2ba28a122..a4a675eea1 100644 --- a/org.eclipse.linuxtools.lttng.ui.tests/src/org/eclipse/linuxtools/lttng/ui/tests/control/model/impl/BaseEventInfoTest.java +++ b/org.eclipse.linuxtools.lttng.ui.tests/src/org/eclipse/linuxtools/lttng/ui/tests/control/model/impl/BaseEventInfoTest.java @@ -75,7 +75,7 @@ public class BaseEventInfoTest extends TestCase { assertEquals("unknown", result.getInName()); assertEquals("UNKNOWN", result.name()); assertEquals("UNKNOWN", result.toString()); - assertEquals(2, result.ordinal()); + assertEquals(3, result.ordinal()); TraceLogLevel level = fixture.getLogLevel(); assertEquals("TRACE_DEBUG", level.getInName()); @@ -125,14 +125,14 @@ public class BaseEventInfoTest extends TestCase { assertEquals("unknown", result.getInName()); assertEquals("UNKNOWN", result.name()); assertEquals("UNKNOWN", result.toString()); - assertEquals(2, result.ordinal()); + assertEquals(3, result.ordinal()); fixture.setEventType(""); result = fixture.getEventType(); assertEquals("unknown", result.getInName()); assertEquals("UNKNOWN", result.name()); assertEquals("UNKNOWN", result.toString()); - assertEquals(2, result.ordinal()); + assertEquals(3, result.ordinal()); fixture.setEventType("tracepoint"); result = fixture.getEventType(); @@ -141,6 +141,23 @@ public class BaseEventInfoTest extends TestCase { assertEquals("TRACEPOINT", result.name()); assertEquals("TRACEPOINT", result.toString()); assertEquals(0, result.ordinal()); + + fixture.setEventType("syscall"); + result = fixture.getEventType(); + assertNotNull(result); + assertEquals("syscall", result.getInName()); + assertEquals("SYSCALL", result.name()); + assertEquals("SYSCALL", result.toString()); + assertEquals(1, result.ordinal()); + + fixture.setEventType("probe"); + result = fixture.getEventType(); + assertNotNull(result); + assertEquals("probe", result.getInName()); + assertEquals("PROBE", result.name()); + assertEquals("PROBE", result.toString()); + assertEquals(2, result.ordinal()); + } /** @@ -166,7 +183,24 @@ public class BaseEventInfoTest extends TestCase { assertEquals("unknown", result.getInName()); assertEquals("UNKNOWN", result.name()); assertEquals("UNKNOWN", result.toString()); + assertEquals(3, result.ordinal()); + + fixture.setEventType(TraceEventType.SYSCALL); + result = fixture.getEventType(); + assertNotNull(result); + assertEquals("syscall", result.getInName()); + assertEquals("SYSCALL", result.name()); + assertEquals("SYSCALL", result.toString()); + assertEquals(1, result.ordinal()); + + fixture.setEventType(TraceEventType.PROBE); + result = fixture.getEventType(); + assertNotNull(result); + assertEquals("probe", result.getInName()); + assertEquals("PROBE", result.name()); + assertEquals("PROBE", result.toString()); assertEquals(2, result.ordinal()); + } /** diff --git a/org.eclipse.linuxtools.lttng.ui.tests/src/org/eclipse/linuxtools/lttng/ui/tests/control/model/impl/EventInfoTest.java b/org.eclipse.linuxtools.lttng.ui.tests/src/org/eclipse/linuxtools/lttng/ui/tests/control/model/impl/EventInfoTest.java index 307aafd9b7..c31180ec43 100644 --- a/org.eclipse.linuxtools.lttng.ui.tests/src/org/eclipse/linuxtools/lttng/ui/tests/control/model/impl/EventInfoTest.java +++ b/org.eclipse.linuxtools.lttng.ui.tests/src/org/eclipse/linuxtools/lttng/ui/tests/control/model/impl/EventInfoTest.java @@ -75,7 +75,7 @@ public class EventInfoTest extends TestCase { assertEquals("unknown", result.getInName()); assertEquals("UNKNOWN", result.name()); assertEquals("UNKNOWN", result.toString()); - assertEquals(2, result.ordinal()); + assertEquals(3, result.ordinal()); TraceEnablement state = fixture.getState(); assertEquals("disabled", state.getInName()); @@ -131,7 +131,7 @@ public class EventInfoTest extends TestCase { assertEquals("unknown", result.getInName()); assertEquals("UNKNOWN", result.name()); assertEquals("UNKNOWN", result.toString()); - assertEquals(2, result.ordinal()); + assertEquals(3, result.ordinal()); // setEventType(String typeName) String typeName = ""; @@ -141,7 +141,7 @@ public class EventInfoTest extends TestCase { assertEquals("unknown", result.getInName()); assertEquals("UNKNOWN", result.name()); assertEquals("UNKNOWN", result.toString()); - assertEquals(2, result.ordinal()); + assertEquals(3, result.ordinal()); typeName = "unknown"; @@ -151,7 +151,7 @@ public class EventInfoTest extends TestCase { assertEquals("unknown", result.getInName()); assertEquals("UNKNOWN", result.name()); assertEquals("UNKNOWN", result.toString()); - assertEquals(2, result.ordinal()); + assertEquals(3, result.ordinal()); // setState(String stateName) fixture.setState("disabled"); diff --git a/org.eclipse.linuxtools.lttng.ui/plugin.properties b/org.eclipse.linuxtools.lttng.ui/plugin.properties index 2e51a180a1..59620b19e9 100644 --- a/org.eclipse.linuxtools.lttng.ui/plugin.properties +++ b/org.eclipse.linuxtools.lttng.ui/plugin.properties @@ -101,7 +101,7 @@ 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=Disable Event commands.control.disable.event.description=Disable Event # trace control (RSE) properties (LTTng 0.x) 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 bb2f695ff1..3aff29d18d 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 @@ -101,22 +101,35 @@ final public class Messages extends NLS { public static String TraceControl_EnableEventsNoSessionError; public static String TraceControl_EnableEventsNoChannelError; - public static String TraceControl_EnableKernelEventsDialogTitle; + public static String TraceControl_EnableGroupSelectionName; 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_EnableEventsEventNameLabel; 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_EnableEventsWildcardGroupName; + public static String TraceControl_EnableEventsWildcardLabel; + public static String TraceControl_EnableEventsWildcardTooltip; + public static String TraceControl_EnableEventsLogLevelGroupName; + public static String TraceControl_EnableEventsLogLevelTypeName; + public static String TraceControl_EnableEventsLogLevelTypeTooltip; + public static String TraceControl_EnableEventsLogLevelOnlyTypeName; + public static String TraceControl_EnableEventsLogLevelOnlyTypeTooltip; + public static String TraceControl_EnableEventsLogLevelTooltip; + public static String TraceControl_EnableEventsLoglevelEventNameTooltip; public static String TraceControl_InvalidProbeNameError; + public static String TraceControl_InvalidWildcardError; + public static String TraceControl_InvalidLogLevelEventNameError; // Tree structure strings diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableEventsDialog.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableEventsDialog.java new file mode 100644 index 0000000000..dbeb8586e0 --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableEventsDialog.java @@ -0,0 +1,515 @@ +/********************************************************************** + * 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; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.linuxtools.lttng.ui.LTTngUiPlugin; +import org.eclipse.linuxtools.lttng.ui.views.control.Messages; +import org.eclipse.linuxtools.lttng.ui.views.control.model.LogLevelType; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceDomainComponent; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceProviderGroup; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Point; +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.Shell; + +/** + * EnableEventsDialog + *

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

+ */ +public class EnableEventsDialog extends Dialog implements IEnableEventsDialog { + + // ------------------------------------------------------------------------ + // 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 composite with widgets for collecting information about kernel events. + */ + private EnableKernelEventComposite fKernelComposite; + /** + * The composite with widgets for collecting information about UST events. + */ + private EnableUstEventsComposite fUstComposite; + /** + * Radio button for selecting kernel domain. + */ + private Button fKernelButton; + /** + * Radio button for selecting UST domain. + */ + private Button fUstButton; + /** + * The referenced trace provider group containing the kernel provider and UST + * provider component which contains a list of available tracepoints. + */ + private TraceProviderGroup fProviderGroup; + /** + * The parent domain component where the channel node should be added. + * Null in case the domain is not known (i.e. on session level). + */ + private TraceDomainComponent fDomain; + /** + * Output domain information. True in case of Kernel domain. False for UST. + */ + private boolean fIsKernel; + + // ------------------------------------------------------------------------ + // Constructors + // ------------------------------------------------------------------------ + /** + * Constructor + * @param shell - a shell for the display of the dialog + * @param providerGroup - the trace provider group + */ + public EnableEventsDialog(Shell shell, TraceProviderGroup providerGroup) { + this(shell, providerGroup, null); + } + + /** + * Constructor + * @param shell - a shell for the display of the dialog + * @param providerGroup - a trace provider group + * @param domain - a domain of the events (null if not known) + */ + public EnableEventsDialog(Shell shell, TraceProviderGroup providerGroup, TraceDomainComponent domain) { + super(shell); + fProviderGroup = providerGroup; + setShellStyle(SWT.RESIZE); + fDomain = domain; + if (fDomain != null) { + fIsKernel = fDomain.isKernel(); + } else { + fIsKernel = true; + } + } + + // ------------------------------------------------------------------------ + // Accessors + // ------------------------------------------------------------------------ + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isTracpoints() + */ + @Override + public boolean isTracepoints() { + if (fIsKernel) { + return fKernelComposite.isTracepoints(); + } + return fUstComposite.isTracepoints(); + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isAllTracePoints() + */ + @Override + public boolean isAllTracePoints() { + if (fIsKernel) { + return fKernelComposite.isAllTracePoints(); + } + return fUstComposite.isAllTracePoints(); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isSysCalls() + */ + @Override + public boolean isSysCalls() { + if (fIsKernel) { + return fKernelComposite.isSysCalls(); + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isAllSysCalls() + */ + @Override + public boolean isAllSysCalls() { + if (fIsKernel) { + return fKernelComposite.isSysCalls(); + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#getEventNames() + */ + @Override + public List getEventNames() { + if (fIsKernel) { + return fKernelComposite.getEventNames(); + } + return fUstComposite.getEventNames(); + } + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isDynamicProbe() + */ + @Override + public boolean isDynamicProbe() { + if (fIsKernel) { + return fKernelComposite.isDynamicProbe(); + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#getProbeName() + */ + @Override + public String getProbeName() { + if (fIsKernel) { + return fKernelComposite.getProbeName(); + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#getProbeEventName() + */ + @Override + public String getProbeEventName() { + if (fIsKernel) { + return fKernelComposite.getProbeEventName(); + } + return null; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isDynamicFunctionProbe() + */ + @Override + public boolean isDynamicFunctionProbe() { + if (fIsKernel) { + return fKernelComposite.isDynamicFunctionProbe(); + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#getFunctionEventName() + */ + @Override + public String getFunctionEventName() { + if (fIsKernel) { + return fKernelComposite.getFunctionEventName(); + } + return null; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#getFunction() + */ + @Override + public String getFunction() { + if (fIsKernel) { + return fKernelComposite.getFunction(); + } + return null; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#isWildcard() + */ + @Override + public boolean isWildcard() { + if (!fIsKernel) { + return fUstComposite.isWildcard(); + } + return false; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#getWildcard() + */ + @Override + public String getWildcard() { + if (!fIsKernel) { + return fUstComposite.getWildcard(); + } + return null; + + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#isLogLevel() + */ + @Override + public boolean isLogLevel() { + if (!fIsKernel) { + return fUstComposite.isLogLevel(); + } + return false; + + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#getLogLevelType() + */ + @Override + public LogLevelType getLogLevelType() { + if (!fIsKernel) { + return fUstComposite.getLogLevelType(); + } + return null; + + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#getLogLevel() + */ + @Override + public TraceLogLevel getLogLevel() { + if (!fIsKernel) { + return fUstComposite.getLogLevel(); + } + return null; + + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#getLogLevelEventName() + */ + @Override + public String getLogLevelEventName() { + if (!fIsKernel) { + return fUstComposite.getLogLevelEventName(); + } + return null; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableEventsDialog#isKernel() + */ + @Override + public boolean isKernel() { + return fIsKernel; + } + + // ------------------------------------------------------------------------ + // 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_EnableEventsDialogTitle); + 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)); + + // ------------------------------------------------------------------------ + // Domain Group + // ------------------------------------------------------------------------ + Group domainGroup = new Group(fDialogComposite, SWT.SHADOW_NONE); + domainGroup.setText(Messages.TraceControl_DomainDisplayName); + layout = new GridLayout(2, true); + domainGroup.setLayout(layout); + + fKernelButton = new Button(domainGroup, SWT.RADIO); + fKernelButton.setText(Messages.TraceControl_KernelDomainDisplayName); + fKernelButton.setSelection(fIsKernel); + fUstButton = new Button(domainGroup, SWT.RADIO); + fUstButton.setText(Messages.TraceControl_UstDisplayName); + fUstButton.setSelection(!fIsKernel); + + if (fDomain != null) { + fKernelButton.setEnabled(false); + fUstButton.setEnabled(false); + } + + // layout widgets + GridData data = new GridData(GridData.FILL_HORIZONTAL); + domainGroup.setLayoutData(data); + + data = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, true); + fKernelButton.setLayoutData(data); + data = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, true); + fUstButton.setLayoutData(data); + + // ------------------------------------------------------------------------ + // Kernel or UST event data group + // ------------------------------------------------------------------------ + if (fIsKernel) { + createKernelComposite(); + } else { + createUstComposite(); + } + + fKernelButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (fKernelButton.getSelection()) { + disposeUstComposite(); + createKernelComposite(); + fDialogComposite.layout(); + } + } + }); + + fUstButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (fUstButton.getSelection()) { + disposeKernelComposite(); + createUstComposite(); + fDialogComposite.layout(); + } + } + }); + + fDialogComposite.layout(); + + getShell().setMinimumSize(new Point(500, 650)); + + 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() { + if (fKernelButton.getSelection() == true) { + fIsKernel = true; + } else { + fIsKernel = false; + } + + // Validate kernel composite in case of kernel domain + if (fKernelComposite != null && !fKernelComposite.isValid()) { + return; + } + + // Validate UST composite in case of UST domain + if (fUstComposite != null && !fUstComposite.isValid()) { + return; + } + + // validation successful -> call super.okPressed() + super.okPressed(); + } + + // ------------------------------------------------------------------------ + // Helper methods + // ------------------------------------------------------------------------ + /** + * Creates the kernel composite (if not existing) + */ + private void createKernelComposite() { + if (fKernelComposite == null) { + fKernelComposite = new EnableKernelEventComposite(fDialogComposite, SWT.NONE, fProviderGroup); + GridLayout layout = new GridLayout(1, true); + fKernelComposite.setLayout(layout); + fKernelComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); + + fKernelComposite.createContent(); + } + } + + /** + * Disposes the kernel composite (if existing) + */ + private void disposeKernelComposite() { + if (fKernelComposite != null) { + fKernelComposite.dispose(); + fKernelComposite = null; + } + } + + /** + * Creates the UST composite (if not existing) + */ + private void createUstComposite() { + if (fUstComposite == null) { + fUstComposite = new EnableUstEventsComposite(fDialogComposite, SWT.NONE, fProviderGroup); + GridLayout layout = new GridLayout(1, true); + fUstComposite.setLayout(layout); + fUstComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); + + fUstComposite.createContent(); + } + } + + /** + * Disposes the UST composite (if existing) + */ + private void disposeUstComposite() { + if (fUstComposite != null) { + fUstComposite.dispose(); + fUstComposite = null; + } + } +} diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableKernelEventComposite.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableKernelEventComposite.java new file mode 100644 index 0000000000..80d7abc490 --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableKernelEventComposite.java @@ -0,0 +1,609 @@ +/********************************************************************** + * 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.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.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.BaseEventComponent; +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.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +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.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; + +/** + * EnableKernelEventsComposite + *

+ * A composite for collecting information about kernel events to be enabled. + *

+ */ +public class EnableKernelEventComposite extends Composite implements IEnableKernelEvents { + + // ------------------------------------------------------------------------ + // Constants + // ------------------------------------------------------------------------ + private enum KernelGroupEnum { TRACEPOINTS, SYSCALLS, PROBE, FUNCTION }; + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + + /** + * A button to enable/disable the tracepoints group + */ + private Button fTracepointsActivateButton; + /** + * A tree viewer for displaying and selection of available tracepoints. + */ + private CheckboxTreeViewer fTracepointsViewer; + /** + * A button to enable/disable the syscalls group + */ + private Button fSysCallsActivateButton; + /** + * A button to enable or disable the dynamic probe group. + */ + private Button fProbeActivateButton; + /** + * The text field for the event name for the dynamic probe. + */ + private Text fProbeEventNameText; + /** + * The text field for the dynamic probe. + */ + private Text fProbeText; + /** + * A button to enable or disable the dynamic function probe group. + */ + private Button fFunctionActivateButton; + /** + * 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 trace provider group containing the kernel provider + * component which contains a list of available tracepoints. + */ + private TraceProviderGroup fProviderGroup; + /** + * The flag indicating that tracepoints are selected. + */ + private boolean fIsTracepoints; + /** + * The flag indicating that all tracepoints are selected. + */ + private boolean fIsAllTracepoints; + /** + * The flag indicating that syscalls are selected. + */ + private boolean fIsSysCalls; + /** + * The list of tracepoints to be enabled. + */ + private List fSelectedEvents; + /** + * The flag indicating that dynamic probe is selected. + */ + private boolean fIsDynamicProbe; + /** + * The event name of the dynamic probe. + */ + private String fProbeEventName; + /** + * The dynamic probe. + */ + private String fProbeString; + /** + * The flag indicating that the dynamic function probe is selected. + */ + private boolean fIsDynamicFunctionProbe; + /** + * The event name of the dynamic function entry/return probe. + */ + private String fFunctionEventName; + /** + * The dynamic function entry/return probe. + */ + private String fFunctionString; + + // ------------------------------------------------------------------------ + // Constructors + // ------------------------------------------------------------------------ + + public EnableKernelEventComposite(Composite parent, int style, TraceProviderGroup providerGroup) { + super(parent, style); + fProviderGroup = providerGroup; + } + + // ------------------------------------------------------------------------ + // Acessors + // ------------------------------------------------------------------------ + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isTracpoints() + */ + @Override + public boolean isTracepoints() { + return fIsTracepoints; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isAllTracePoints() + */ + @Override + public boolean isAllTracePoints() { + return fIsAllTracepoints; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isSysCalls() + */ + @Override + public boolean isSysCalls() { + return fIsSysCalls; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isAllSysCalls() + */ + @Override + public boolean isAllSysCalls() { + return fIsSysCalls; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#getEventNames() + */ + @Override + public List getEventNames() { + return new ArrayList(fSelectedEvents); + } + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isDynamicProbe() + */ + @Override + public boolean isDynamicProbe() { + return fIsDynamicProbe; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#getProbeName() + */ + @Override + public String getProbeName() { + return fProbeString; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#getProbeEventName() + */ + @Override + public String getProbeEventName() { + return fProbeEventName; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#isDynamicFunctionProbe() + */ + @Override + public boolean isDynamicFunctionProbe() { + return fIsDynamicFunctionProbe; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#getFunctionEventName() + */ + @Override + public String getFunctionEventName() { + return fFunctionEventName; + } + + /* (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableKernelEvents#getFunction() + */ + @Override + public String getFunction() { + return fFunctionString; + } + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + /** + * Creates the composite content + */ + public void createContent() { + + // Tracepoints Group + createTracepointsGroup(); + + // Syscalls Group + createSysCallsGroup(); + + // Dynamic Probe Group + createDynamicProbeGroup(); + + // Dynamic Function Probe Group + createDynamicFunctionPropeGroup(); + + // Set default enablements + setKernelEnablements(KernelGroupEnum.TRACEPOINTS); + } + + /** + * Validates the kernel composite input data. + * @return true if configured data is valid and can be retrieved. + */ + public boolean isValid() { + fIsTracepoints = fTracepointsActivateButton.getSelection(); + fIsSysCalls = fSysCallsActivateButton.getSelection(); + fIsDynamicProbe = fProbeActivateButton.getSelection(); + fIsDynamicFunctionProbe = fFunctionActivateButton.getSelection(); + + List comps = fProviderGroup.getChildren(KernelProviderComponent.class); + fIsAllTracepoints = fTracepointsViewer.getChecked(comps.get(0)); + + Object[] checkedElements = fTracepointsViewer.getCheckedElements(); + fSelectedEvents = new ArrayList(); + for (int i = 0; i < checkedElements.length; i++) { + ITraceControlComponent component = (ITraceControlComponent)checkedElements[i]; + if (component instanceof BaseEventComponent) { + fSelectedEvents.add(component.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_EnableEventsDialogTitle, + Messages.TraceControl_InvalidProbeNameError + " (" + temp + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$ + + return false; + } + + 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_EnableEventsDialogTitle, + Messages.TraceControl_InvalidProbeNameError + " (" + temp + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$ + + return false; + } + + if(!fFunctionText.getText().matches("\\s*")) { //$NON-NLS-1$ + fFunctionEventName = temp; + // fFunctionString will be validated by lttng-tools + fFunctionString = fFunctionText.getText(); + } + + return true; + } + + /** + * Creates tracepoints group. + */ + private void createTracepointsGroup() { + + GridLayout layout; + GridData data; + Group tpMainGroup = new Group(this, SWT.SHADOW_NONE); + tpMainGroup.setText(Messages.TraceControl_EnableEventsTracepointGroupName); + layout = new GridLayout(2, false); + tpMainGroup.setLayout(layout); + data = new GridData(GridData.FILL_BOTH); + tpMainGroup.setLayoutData(data); + + Composite buttonComposite = new Composite(tpMainGroup, SWT.NONE); + layout = new GridLayout(1, true); + buttonComposite.setLayout(layout); + data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true); + buttonComposite.setLayoutData(data); + + fTracepointsActivateButton = new Button(buttonComposite, SWT.RADIO); + fTracepointsActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName); + data = new GridData(GridData.FILL_HORIZONTAL); + fTracepointsActivateButton.setLayoutData(data); + fTracepointsActivateButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + setKernelEnablements(KernelGroupEnum.TRACEPOINTS); + } + }); + + Group tracepointsGroup = new Group(tpMainGroup, SWT.SHADOW_NONE); + layout = new GridLayout(1, true); + tracepointsGroup.setLayout(layout); + data = new GridData(GridData.FILL_BOTH); + tracepointsGroup.setLayoutData(data); + + fTracepointsViewer = new CheckboxTreeViewer(tracepointsGroup, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); + fTracepointsViewer.getTree().setToolTipText(Messages.TraceControl_EnableEventsTracepointTreeTooltip); + + fTracepointsViewer.setContentProvider(new KernelContentProvider()); + fTracepointsViewer.setLabelProvider(new KernelLabelProvider()); + fTracepointsViewer.addCheckStateListener(new KernelCheckListener()); + fTracepointsViewer.setInput(fProviderGroup); + + fTracepointsViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH)); + } + + /** + * Creates syscalls group. + */ + private void createSysCallsGroup() { + GridLayout layout; + GridData data; + Group sysCallsMainGroup = new Group(this, SWT.SHADOW_NONE); + sysCallsMainGroup.setText(Messages.TraceControl_EnableEventsSyscallName); + sysCallsMainGroup.setToolTipText(Messages.TraceControl_EnableEventsSyscallTooltip); + layout = new GridLayout(2, false); + sysCallsMainGroup.setLayout(layout); + data = new GridData(GridData.FILL_HORIZONTAL); + sysCallsMainGroup.setLayoutData(data); + + Composite buttonComposite = new Composite(sysCallsMainGroup, SWT.NONE); + layout = new GridLayout(1, false); + buttonComposite.setLayout(layout); + data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true); + buttonComposite.setLayoutData(data); + + fSysCallsActivateButton = new Button(buttonComposite, SWT.RADIO); + fSysCallsActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName); + fSysCallsActivateButton.setToolTipText(Messages.TraceControl_EnableEventsSyscallTooltip); + fSysCallsActivateButton.setSelection(false); + data = new GridData(GridData.FILL_HORIZONTAL); + fSysCallsActivateButton.setLayoutData(data); + fSysCallsActivateButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + setKernelEnablements(KernelGroupEnum.SYSCALLS); + } + }); + } + + /** + * Creates dynamic probe group. + */ + private void createDynamicProbeGroup() { + GridLayout layout; + GridData data; + Group probeMainGroup = new Group(this, SWT.SHADOW_NONE); + probeMainGroup.setText(Messages.TraceControl_EnableEventsProbeGroupName); + layout = new GridLayout(2, false); + probeMainGroup.setLayout(layout); + data = new GridData(GridData.FILL_HORIZONTAL); + probeMainGroup.setLayoutData(data); + + Composite buttonComposite = new Composite(probeMainGroup, SWT.NONE); + layout = new GridLayout(1, false); + buttonComposite.setLayout(layout); + data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true); + buttonComposite.setLayoutData(data); + + fProbeActivateButton = new Button(buttonComposite, SWT.RADIO); + fProbeActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName); + fProbeActivateButton.setSelection(false); + data = new GridData(GridData.FILL_HORIZONTAL); + fProbeActivateButton.setLayoutData(data); + fProbeActivateButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + setKernelEnablements(KernelGroupEnum.PROBE); + } + }); + + Group probeGroup = new Group(probeMainGroup, SWT.SHADOW_NONE); + layout = new GridLayout(4, true); + probeGroup.setLayout(layout); + probeGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + Label probeNameLabel = new Label(probeGroup, SWT.LEFT); + probeNameLabel.setText(Messages.TraceControl_EnableEventsEventNameLabel); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 1; + probeNameLabel.setLayoutData(data); + + fProbeEventNameText = new Text(probeGroup, SWT.LEFT); + fProbeEventNameText.setToolTipText(Messages.TraceControl_EnableEventsProbeEventNameTooltip); + + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 3; + fProbeEventNameText.setLayoutData(data); + + Label probeLabel = new Label(probeGroup, SWT.LEFT); + probeLabel.setText(Messages.TraceControl_EnableEventsProbeNameLabel); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 1; + probeLabel.setLayoutData(data); + + fProbeText = new Text(probeGroup, SWT.LEFT); + fProbeText.setToolTipText(Messages.TraceControl_EnableEventsProbeNameTooltip); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 3; + fProbeText.setLayoutData(data); + } + + /** + * Creates dynamic function entry/return probe group. + */ + private void createDynamicFunctionPropeGroup() { + GridLayout layout; + GridData data; + Group functionMainGroup = new Group(this, SWT.SHADOW_NONE); + functionMainGroup.setText(Messages.TraceControl_EnableEventsFucntionGroupName); + layout = new GridLayout(2, false); + functionMainGroup.setLayout(layout); + data = new GridData(GridData.FILL_HORIZONTAL); + functionMainGroup.setLayoutData(data); + + Composite buttonComposite = new Composite(functionMainGroup, SWT.NONE); + layout = new GridLayout(1, false); + buttonComposite.setLayout(layout); + data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true); + buttonComposite.setLayoutData(data); + + fFunctionActivateButton = new Button(buttonComposite, SWT.RADIO); + fFunctionActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName); + fFunctionActivateButton.setSelection(false); + data = new GridData(GridData.FILL_HORIZONTAL); + fFunctionActivateButton.setLayoutData(data); + fFunctionActivateButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + setKernelEnablements(KernelGroupEnum.FUNCTION); + } + }); + + Group functionGroup = new Group(functionMainGroup, SWT.SHADOW_NONE); + layout = new GridLayout(4, true); + functionGroup.setLayout(layout); + functionGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + Label functionNameLabel = new Label(functionGroup, SWT.LEFT); + functionNameLabel.setText(Messages.TraceControl_EnableEventsEventNameLabel); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 1; + functionNameLabel.setLayoutData(data); + + fFunctionEventNameText = new Text(functionGroup, SWT.LEFT); + fFunctionEventNameText.setToolTipText(Messages.TraceControl_EnableEventsFunctionEventNameTooltip); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 3; + fFunctionEventNameText.setLayoutData(data); + + Label functionLabel = new Label(functionGroup, SWT.LEFT); + functionLabel.setText(Messages.TraceControl_EnableEventsFunctionNameLabel); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 1; + functionLabel.setLayoutData(data); + + fFunctionText = new Text(functionGroup, SWT.LEFT); + fFunctionText.setToolTipText(Messages.TraceControl_EnableEventsProbeNameTooltip); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 3; + fFunctionText.setLayoutData(data); + } + + /** + * Enable/selects widgets depending on the group specified. + * @param group - group to enable. + */ + private void setKernelEnablements(KernelGroupEnum group) { + fTracepointsActivateButton.setSelection(group == KernelGroupEnum.TRACEPOINTS); + fTracepointsViewer.getTree().setEnabled(group == KernelGroupEnum.TRACEPOINTS); + + fSysCallsActivateButton.setSelection(group == KernelGroupEnum.SYSCALLS); + + fProbeActivateButton.setSelection(group == KernelGroupEnum.PROBE); + fProbeEventNameText.setEnabled(group == KernelGroupEnum.PROBE); + fProbeText.setEnabled(group == KernelGroupEnum.PROBE); + + fFunctionActivateButton.setSelection(group == KernelGroupEnum.FUNCTION); + fFunctionEventNameText.setEnabled(group == KernelGroupEnum.FUNCTION); + fFunctionText.setEnabled(group == KernelGroupEnum.FUNCTION); + } + + // ------------------------------------------------------------------------ + // Local classes + // ------------------------------------------------------------------------ + /** + * Content provider for the tracepoints tree. + */ + final public class KernelContentProvider extends 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]; + } + } + + /** + * Content label for the tracepoints tree. + */ + final public class KernelLabelProvider extends 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); + } + } + + /** + * Check state listener for the tracepoints tree. + */ + final public class KernelCheckListener implements 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); + } + } + } + } +} 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 deleted file mode 100644 index 03f88abf86..0000000000 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableKernelEventDialog.java +++ /dev/null @@ -1,469 +0,0 @@ -/********************************************************************** - * 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/EnableUstEventsComposite.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableUstEventsComposite.java new file mode 100644 index 0000000000..6678f2a59f --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/EnableUstEventsComposite.java @@ -0,0 +1,595 @@ +/********************************************************************** + * 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.HashSet; +import java.util.List; +import java.util.Set; + +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.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.LogLevelType; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.BaseEventComponent; +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.UstProviderComponent; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.CCombo; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +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.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; + +/** + * EnableUstEventsComposite + *

+ * A composite for collecting information about UST events to be enabled. + *

+ */ +public class EnableUstEventsComposite extends Composite implements IEnableUstEvents { + + // ------------------------------------------------------------------------ + // Constants + // ------------------------------------------------------------------------ + + private enum GroupEnum { TRACEPOINTS, WILDCARD, LOGLEVEL }; + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + + /** + * A button to enable/disable the tracepoints group + */ + private Button fTracepointsActivateButton; + /** + * A tree viewer for diplaying and selection of available tracepoints. + */ + private CheckboxTreeViewer fTracepointsViewer; + /** + * A button to enable/disable the wildcard group + */ + private Button fWildcardActivateButton; + /** + * A Text field for the event's wildcard. + */ + private Text fWildcardText; + /** + * A button to enable/disable the log level group + */ + private Button fLogLevelActivateButton; + /** + * A Text field for the event name for the log level enablement. + */ + private Text fLogLevelEventNameText; + /** + * A Combo box for selecting the log level. + */ + private CCombo fLogLevelCombo; + /** + * A button for selecting the log level (range 0 to level). + */ + private Button fLogLevelButton; + /** + * A button for selecting the specified log level only. + */ + private Button fLogLevelOnlyButton; + /** + * The referenced trace provider group containing the UST providers + * component which contains a list of available tracepoints. + */ + private TraceProviderGroup fProviderGroup; + /** + * The flag indicating that tracepoints are selected. + */ + private boolean fIsTracepoints; + /** + * The flag indicating that all tracepoints (across providers) are selected. + */ + private boolean fIsAllTracepoints; + /** + * The list of tracepoints to be enabled. + */ + private List fSelectedEvents; + /** + * The flag indicating that all wildcard are selected.. + */ + private boolean fIsWildcard; + /** + * The wildcard if wildcard is selected. + */ + private String fWildcard; + /** + *The flag indicating that all log level are selected. + */ + private boolean fIsLogLevel; + /** + * The event name for the log level enablement. + */ + private String fLogLevelEventName; + /** + * The type of the log level (loglevel or loglevel-only) + */ + private LogLevelType fLogLevelType; + /** + * The actual selected log level. + */ + private TraceLogLevel fLogLevel; + + // ------------------------------------------------------------------------ + // Constructors + // ------------------------------------------------------------------------ + /** + * Constructor + * @param parent - a parent composite + * @Param style - a compsite style + * @param providerGroup - the trace provider group + */ + public EnableUstEventsComposite(Composite parent, int style, TraceProviderGroup providerGroup) { + super(parent, style); + fProviderGroup = providerGroup; + } + + // ------------------------------------------------------------------------ + // Accessors + // ------------------------------------------------------------------------ + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#isTracepoints() + */ + @Override + public boolean isTracepoints() { + return fIsTracepoints; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#isAllTracePoints() + */ + @Override + public boolean isAllTracePoints() { + return fIsAllTracepoints; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#getEventNames() + */ + @Override + public List getEventNames() { + return new ArrayList(fSelectedEvents); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#isWildcard() + */ + @Override + public boolean isWildcard() { + return fIsWildcard; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#getWildcard() + */ + @Override + public String getWildcard() { + return "\"" + fWildcard + "\""; //$NON-NLS-1$//$NON-NLS-2$ + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#isLogLevel() + */ + @Override + public boolean isLogLevel() { + return fIsLogLevel; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#getLogLevelType() + */ + @Override + public LogLevelType getLogLevelType() { + return fLogLevelType; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#getLogLevel() + */ + @Override + public TraceLogLevel getLogLevel() { + return fLogLevel; + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableUstEvents#getLogLevelEventName() + */ + @Override + public String getLogLevelEventName() { + return fLogLevelEventName; + } + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + + public void createContent() { + + // Tracepoints Group + createTracepointsGroup(); + + // Wildcard Group + createWildCardGroup(); + + // Log Level Group + createLogLevelGroup(); + + // Set default enablements + setEnablements(GroupEnum.TRACEPOINTS); + } + + /** + * Validates the kernel composite input data. + * @return true if configured data is valid and can be retrieved. + */ + public boolean isValid() { + + fIsTracepoints = fTracepointsActivateButton.getSelection(); + fIsWildcard = fWildcardActivateButton.getSelection(); + fIsLogLevel = fLogLevelActivateButton.getSelection(); + + fIsAllTracepoints = fTracepointsViewer.getChecked(fProviderGroup); + + Set set = new HashSet(); + Object[] checkedElements = fTracepointsViewer.getCheckedElements(); + fSelectedEvents = new ArrayList(); + for (int i = 0; i < checkedElements.length; i++) { + ITraceControlComponent component = (ITraceControlComponent)checkedElements[i]; + if (!set.contains(component.getName()) && (component instanceof BaseEventComponent)) { + set.add(component.getName()); + fSelectedEvents.add(component.getName()); + } + } + + if (fLogLevelButton.getSelection()) { + fLogLevelType = LogLevelType.LOGLEVEL; + } else if (fLogLevelOnlyButton.getSelection()) { + fLogLevelType = LogLevelType.LOGLEVEL_ONLY; + } else { + fLogLevelType = LogLevelType.LOGLEVEL_NONE; + } + + // initialize log level event name string + fLogLevelEventName = null; + String temp = fLogLevelEventNameText.getText(); + if (!temp.matches("^[\\s]{0,}$") && !temp.matches("^[a-zA-Z0-9\\-\\_]{1,}$")) { //$NON-NLS-1$ //$NON-NLS-2$ + MessageDialog.openError(getShell(), + Messages.TraceControl_EnableEventsDialogTitle, + Messages.TraceControl_InvalidLogLevelEventNameError + " (" + temp + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$ + + return false; + } + + if(!temp.matches("\\s*")) { //$NON-NLS-1$ + fLogLevelEventName = temp; + } + + // initialize log level event name string + fWildcard = null; + temp = fWildcardText.getText(); + if (!temp.matches("^[\\s]{0,}$") && !temp.matches("^[a-zA-Z0-9\\-\\_\\*]{1,}$")) { //$NON-NLS-1$ //$NON-NLS-2$ + MessageDialog.openError(getShell(), + Messages.TraceControl_EnableEventsDialogTitle, + Messages.TraceControl_InvalidWildcardError + " (" + temp + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$ + + return false; + } + + if(!temp.matches("\\s*")) { //$NON-NLS-1$ + fWildcard = temp; + } + + // validation successful -> call super.okPressed() + return true; + } + + // ------------------------------------------------------------------------ + // Helper methods + // ------------------------------------------------------------------------ + + /** + * Creates tracepoints group. + */ + private void createTracepointsGroup() { + Group tpMainGroup = new Group(this, SWT.SHADOW_NONE); + tpMainGroup.setText(Messages.TraceControl_EnableEventsTracepointGroupName); + GridLayout layout = new GridLayout(2, false); + tpMainGroup.setLayout(layout); + GridData data = new GridData(GridData.FILL_BOTH); + tpMainGroup.setLayoutData(data); + + Composite buttonComposite = new Composite(tpMainGroup, SWT.NONE); + layout = new GridLayout(1, true); + buttonComposite.setLayout(layout); + data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true); + buttonComposite.setLayoutData(data); + + fTracepointsActivateButton = new Button(buttonComposite, SWT.RADIO); + fTracepointsActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName); + data = new GridData(GridData.FILL_HORIZONTAL); + fTracepointsActivateButton.setLayoutData(data); + fTracepointsActivateButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + setEnablements(GroupEnum.TRACEPOINTS); + } + }); + + Group tpGroup = new Group(tpMainGroup, SWT.SHADOW_NONE); + layout = new GridLayout(1, true); + tpGroup.setLayout(layout); + data = new GridData(GridData.FILL_BOTH); + tpGroup.setLayoutData(data); + + fTracepointsViewer = new CheckboxTreeViewer(tpGroup, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); + fTracepointsViewer.getTree().setToolTipText(Messages.TraceControl_EnableEventsTracepointTreeTooltip); + fTracepointsViewer.setContentProvider(new UstContentProvider()); + + fTracepointsViewer.setLabelProvider(new UstLabelProvider()); + fTracepointsViewer.addCheckStateListener(new UstCheckStateListener()); + + fTracepointsViewer.setInput(fProviderGroup.getParent()); + fTracepointsViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH)); + } + + /** + * Creates wildcard group. + */ + private void createWildCardGroup() { + Group wildcardMainGroup = new Group(this, SWT.SHADOW_NONE); + wildcardMainGroup.setText(Messages.TraceControl_EnableEventsWildcardGroupName); + GridLayout layout = new GridLayout(2, false); + wildcardMainGroup.setLayout(layout); + GridData data = new GridData(GridData.FILL_HORIZONTAL); + wildcardMainGroup.setLayoutData(data); + + Composite buttonComposite = new Composite(wildcardMainGroup, SWT.NONE); + layout = new GridLayout(1, false); + buttonComposite.setLayout(layout); + data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true); + buttonComposite.setLayoutData(data); + + fWildcardActivateButton = new Button(buttonComposite, SWT.RADIO); + fWildcardActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName); + fWildcardActivateButton.setSelection(false); + data = new GridData(GridData.FILL_HORIZONTAL); + fWildcardActivateButton.setLayoutData(data); + fWildcardActivateButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + setEnablements(GroupEnum.WILDCARD); + } + }); + + Group wildcardGroup = new Group(wildcardMainGroup, SWT.SHADOW_NONE); + layout = new GridLayout(3, true); + wildcardGroup.setLayout(layout); + data = new GridData(GridData.FILL_HORIZONTAL); + wildcardGroup.setLayoutData(data); + + Label wildcardLabel = new Label(wildcardGroup, SWT.LEFT); + wildcardLabel.setText(Messages.TraceControl_EnableEventsWildcardLabel); + data = new GridData(GridData.FILL_HORIZONTAL); + data.horizontalSpan = 1; + wildcardLabel.setLayoutData(data); + + fWildcardText = new Text(wildcardGroup, SWT.LEFT); + fWildcardText.setToolTipText(Messages.TraceControl_EnableEventsWildcardTooltip); + data = new GridData(GridData.FILL_HORIZONTAL); + data.horizontalSpan = 2; + fWildcardText.setLayoutData(data); + } + + /** + * Creates log level group. + */ + private void createLogLevelGroup() { + Group logLevelMainGroup = new Group(this, SWT.SHADOW_NONE); + logLevelMainGroup.setText(Messages.TraceControl_EnableEventsLogLevelGroupName); + GridLayout layout = new GridLayout(2, false); + logLevelMainGroup.setLayout(layout); + GridData data = new GridData(GridData.FILL_HORIZONTAL); + logLevelMainGroup.setLayoutData(data); + + Composite buttonComposite = new Composite(logLevelMainGroup, SWT.NONE); + layout = new GridLayout(1, false); + buttonComposite.setLayout(layout); + data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true); + buttonComposite.setLayoutData(data); + + fLogLevelActivateButton = new Button(buttonComposite, SWT.RADIO); + fLogLevelActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName); + fLogLevelActivateButton.setSelection(false); + data = new GridData(GridData.FILL_HORIZONTAL); + fLogLevelActivateButton.setLayoutData(data); + fLogLevelActivateButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + setEnablements(GroupEnum.LOGLEVEL); + } + }); + + Group logLevelGroup = new Group(logLevelMainGroup, SWT.SHADOW_NONE); + layout = new GridLayout(3, true); + logLevelGroup.setLayout(layout); + logLevelGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + Label logLevelEventNameLabel = new Label(logLevelGroup, SWT.LEFT); + logLevelEventNameLabel.setText(Messages.TraceControl_EnableEventsEventNameLabel); + + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 1; + logLevelEventNameLabel.setLayoutData(data); + + fLogLevelEventNameText = new Text(logLevelGroup, SWT.LEFT); + fLogLevelEventNameText.setToolTipText(Messages.TraceControl_EnableEventsLoglevelEventNameTooltip); + data = new GridData(GridData.FILL_BOTH); + data.horizontalSpan = 2; + fLogLevelEventNameText.setLayoutData(data); + + TraceLogLevel[] levels = TraceLogLevel.values(); + + String[] levelNames = new String[levels.length - 1]; + int k = 0; + for (int i = 0; i < levels.length; i++) { + if (levels[i] != TraceLogLevel.LEVEL_UNKNOWN) { + levelNames[k++] = levels[i].getInName(); + } + } + + fLogLevelCombo = new CCombo(logLevelGroup, SWT.READ_ONLY); + fLogLevelCombo.setItems(levelNames); + fLogLevelCombo.setToolTipText(Messages.TraceControl_EnableEventsLogLevelTooltip); + data = new GridData(GridData.FILL_HORIZONTAL); + data.horizontalSpan = 4; + fLogLevelCombo.setLayoutData(data); + + fLogLevelButton = new Button(logLevelGroup, SWT.RADIO); + fLogLevelButton.setText(Messages.TraceControl_EnableEventsLogLevelTypeName); + fLogLevelButton.setToolTipText(Messages.TraceControl_EnableEventsLogLevelTypeTooltip); + data = new GridData(GridData.FILL_BOTH); + fLogLevelButton.setLayoutData(data); + + fLogLevelOnlyButton = new Button(logLevelGroup, SWT.RADIO); + fLogLevelOnlyButton.setText(Messages.TraceControl_EnableEventsLogLevelOnlyTypeName); + fLogLevelOnlyButton.setToolTipText(Messages.TraceControl_EnableEventsLogLevelOnlyTypeTooltip); + data = new GridData(GridData.FILL_BOTH); + fLogLevelButton.setLayoutData(data); + } + + /** + * Enable/selects widgets depending on the group specified. + * @param group - group to enable. + */ + private void setEnablements(GroupEnum group) { + + // Enable/disable trace point items + fTracepointsActivateButton.setSelection(group == GroupEnum.TRACEPOINTS); + fTracepointsViewer.getTree().setEnabled(group == GroupEnum.TRACEPOINTS); + + // Enable/disable wildcard items + fWildcardActivateButton.setSelection(group == GroupEnum.WILDCARD); + fWildcardText.setEnabled(group == GroupEnum.WILDCARD); + + // Enable/disable log level items + fLogLevelActivateButton.setSelection(group == GroupEnum.LOGLEVEL); + fLogLevelEventNameText.setEnabled(group == GroupEnum.LOGLEVEL); + fLogLevelCombo.setEnabled(group == GroupEnum.LOGLEVEL); + fLogLevelButton.setEnabled(group == GroupEnum.LOGLEVEL); + fLogLevelOnlyButton.setEnabled(group == GroupEnum.LOGLEVEL); + } + + // ------------------------------------------------------------------------ + // Local classes + // ------------------------------------------------------------------------ + /** + * Content provider for the tracepoints tree. + */ + final public class UstContentProvider extends TraceControlContentProvider { + @Override + public Object[] getChildren(Object parentElement) { + if (parentElement instanceof TargetNodeComponent) { + List children = ((ITraceControlComponent)parentElement).getChildren(TraceProviderGroup.class); + return (ITraceControlComponent[]) children.toArray(new ITraceControlComponent[children.size()]); + } + if (parentElement instanceof TraceProviderGroup) { + List children = ((ITraceControlComponent)parentElement).getChildren(UstProviderComponent.class); + return (ITraceControlComponent[]) children.toArray(new ITraceControlComponent[children.size()]); + } + if (parentElement instanceof ITraceControlComponent) { + return ((ITraceControlComponent)parentElement).getChildren(); + } + return new Object[0]; + } + } + + /** + * Content label for the tracepoints tree. + */ + final public class UstLabelProvider extends TraceControlLabelProvider { + @Override + public Image getImage(Object element) { + return null; + } + @Override + public String getText(Object element) { + if ((element != null) && (element instanceof TraceProviderGroup)) { + return Messages.TraceControl_EnableEventsTracepointTreeAllLabel; + } + + if ((element != null) && (element instanceof UstProviderComponent)) { + return Messages.TraceControl_EnableEventsTracepointTreeAllLabel + " - " + ((UstProviderComponent)element).getName(); //$NON-NLS-1$ + } + return super.getText(element); + } + } + + /** + * Check state listener for the tracepoints tree. + */ + final public class UstCheckStateListener implements ICheckStateListener { + @Override + public void checkStateChanged(CheckStateChangedEvent event) { + if (event.getChecked()) { + if (event.getElement() instanceof TraceProviderGroup) { + fTracepointsViewer.setSubtreeChecked(event.getElement(), true); + } + if (event.getElement() instanceof UstProviderComponent) { + fTracepointsViewer.setSubtreeChecked(event.getElement(), true); + } + } else { + if (event.getElement() instanceof TraceProviderGroup) { + fTracepointsViewer.setSubtreeChecked(event.getElement(), true); + } + if (event.getElement() instanceof UstProviderComponent) { + ITraceControlComponent component = (ITraceControlComponent) event.getElement(); + fTracepointsViewer.setSubtreeChecked(event.getElement(), false); + fTracepointsViewer.setChecked(component.getParent(), false); + } else { + ITraceControlComponent component = (ITraceControlComponent) event.getElement(); + fTracepointsViewer.setChecked(component.getParent(), false); + fTracepointsViewer.setChecked(component.getParent().getParent(), false); + } + } + } + } +} 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 639929f173..1f63b39ce0 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 @@ -160,14 +160,12 @@ public class GetEventInfoDialog extends Dialog implements IGetEventInfoDialog { fSessionsGroup.setText(Messages.TraceControl_EnableEventsSessionGroupName); layout = new GridLayout(1, true); fSessionsGroup.setLayout(layout); -// GridData data = new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1); GridData data = new GridData(GridData.FILL_HORIZONTAL); fSessionsGroup.setLayoutData(data); fSessionsCombo = new CCombo(fSessionsGroup, SWT.READ_ONLY); fSessionsCombo.setToolTipText(Messages.TraceControl_EnableEventsSessionsTooltip); fSessionsCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); -// fSessionsCombo.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1)); String items[] = new String[fSessions.length]; for (int i = 0; i < items.length; i++) { @@ -182,12 +180,10 @@ public class GetEventInfoDialog extends Dialog implements IGetEventInfoDialog { layout = new GridLayout(1, true); fChannelsGroup.setLayout(layout); data = new GridData(GridData.FILL_HORIZONTAL); -// data = new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1); fChannelsGroup.setLayoutData(data); fChannelsCombo = new CCombo(fChannelsGroup, SWT.READ_ONLY); fChannelsCombo.setToolTipText(Messages.TraceControl_EnableEventsChannelsTooltip); -// fChannelsCombo.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1)); fChannelsCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fChannelsCombo.setEnabled(false); @@ -228,7 +224,6 @@ public class GetEventInfoDialog extends Dialog implements IGetEventInfoDialog { public void widgetDefaultSelected(SelectionEvent e) { } }); -// label.setText(""); return fDialogComposite; } diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableEventsDialog.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableEventsDialog.java new file mode 100644 index 0000000000..eb3230cc4e --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableEventsDialog.java @@ -0,0 +1,37 @@ +/********************************************************************** + * 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; + +/** + * IEnableKernelEvents + *

+ * Interface for providing information about Kernel or UST events to be enabled. + *

+ */ +public interface IEnableEventsDialog extends IEnableKernelEvents, IEnableUstEvents { + + // ------------------------------------------------------------------------ + // Accessors + // ------------------------------------------------------------------------ + /** + * @return the session the events shall be enabled. + */ + public boolean isKernel(); + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + /** + * @return returns the open return value + */ + int open(); +} 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/IEnableKernelEvents.java similarity index 55% rename from org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableKernelEventsDialog.java rename to org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableKernelEvents.java index 7362eacc48..a3d575bae7 100644 --- 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/IEnableKernelEvents.java @@ -14,22 +14,32 @@ package org.eclipse.linuxtools.lttng.ui.views.control.dialogs; import java.util.List; /** - * IEnableKernelEventsDialog + * IEnableKernelEvents *

- * Interface for collection information for enabling kernel events. + * Interface for providing information about kernel events to be enabled. *

*/ -public interface IEnableKernelEventsDialog { +public interface IEnableKernelEvents { // ------------------------------------------------------------------------ // Accessors // ------------------------------------------------------------------------ + /** + * @return a flag whether the tracepoints shall be configured. + */ + public boolean isTracepoints(); + /** * @return a flag indicating whether all tracepoints shall be enabled or not. */ public boolean isAllTracePoints(); + /** + * @return a flag whether the syscalls shall be configured. + */ + public boolean isSysCalls(); + /** * @return a flag indicating whether syscalls shall be enabled or not. */ @@ -40,6 +50,11 @@ public interface IEnableKernelEventsDialog { */ public List getEventNames(); + /** + * @return a flag whether the dynamic probe shall be configured. + */ + public boolean isDynamicProbe(); + /** * @return event name of the dynamic probe (or null if no dynamic probe). */ @@ -50,6 +65,11 @@ public interface IEnableKernelEventsDialog { */ public String getProbeName(); + /** + * @return a flag whether the dynamic function entry/return probe shall be configured. + */ + public boolean isDynamicFunctionProbe(); + /** * @return event name of the dynamic function entry/exit probe (or null if no dynamic probe). */ @@ -59,12 +79,35 @@ public interface IEnableKernelEventsDialog { * @return the dynamic function entry/exit probe (or null if no dynamic probe). */ public String getFunction(); - - // ------------------------------------------------------------------------ - // Operations - // ------------------------------------------------------------------------ - /** - * @return the open return value - */ - int open(); + +// /** +// * @return a flag whether events using wildcards should be enabled +// */ +// public boolean isWildcard(); +// +// /** +// * @return a wildcard +// */ +// public String getWildcard(); +// +// /** +// * @return a flag whether events using log levels should be enabled +// */ +// public boolean isLogLevel(); +// +// /** +// * @return a log level type (loglevel or loglevel-only) +// */ +// public LogLevelType getLogLevelType(); +// +// /** +// * @return a log level +// */ +// public TraceLogLevel getLogLevel(); +// +// /** +// * @return a event name for the log level enable action +// */ +// public String getLogLevelEventName(); + } \ No newline at end of file diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableUstEvents.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableUstEvents.java new file mode 100644 index 0000000000..b11175959a --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/dialogs/IEnableUstEvents.java @@ -0,0 +1,76 @@ +/********************************************************************** + * 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; + +import org.eclipse.linuxtools.lttng.ui.views.control.model.LogLevelType; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; + +/** + * IEnableKernelEvents + *

+ * Interface for providing information about UST events to be enabled. + *

+ */ +public interface IEnableUstEvents { + + // ------------------------------------------------------------------------ + // Accessors + // ------------------------------------------------------------------------ + + /** + * @return a flag whether the tracepoints shall be configured. + */ + public boolean isTracepoints(); + + /** + * @return a flag indicating whether all tracepoints shall be enabled or not. + */ + public boolean isAllTracePoints(); + + /** + * @return a list of event names to be enabled. + */ + public List getEventNames(); + + /** + * @return a flag whether events using wildcards should be enabled + */ + public boolean isWildcard(); + + /** + * @return a wildcard + */ + public String getWildcard(); + + /** + * @return a flag whether events using log levels should be enabled + */ + public boolean isLogLevel(); + + /** + * @return a log level type (loglevel or loglevel-only) + */ + public LogLevelType getLogLevelType(); + + /** + * @return a log level + */ + public TraceLogLevel getLogLevel(); + + /** + * @return a event name for the log level enable action + */ + public String getLogLevelEventName(); + +} \ 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 index 713af55295..8a128040b2 100644 --- 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 @@ -22,11 +22,13 @@ 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.dialogs.EnableEventsDialog; +import org.eclipse.linuxtools.lttng.ui.views.control.dialogs.IEnableEventsDialog; 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.LogLevelType; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TargetNodeComponent; +import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceDomainComponent; 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; @@ -35,8 +37,7 @@ 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). + * Base command handler implementation to enable events. *

*/ abstract public class BaseEnableEventHandler extends BaseControlViewHandler { @@ -52,12 +53,54 @@ abstract public class BaseEnableEventHandler extends BaseControlViewHandler { // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ + /** + * Enables a list of events for given parameters. + * @param eventNames - list of event names + * @param isKernel - true if kernel domain else false + * @param monitor - a progress monitor + * @throws ExecutionException + */ + abstract public void enableEvents(List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException; + /** + * Enables all syscall events. + * @param monitor - a progress monitor + * @throws ExecutionException + */ + abstract public void enableSyscalls(IProgressMonitor monitor) throws ExecutionException; + + /** + * Enables a dynamic probe. + * @param eventName - a event name + * @param probe - a dynamic probe information + * @param monitor - a progress monitor + * @throws ExecutionException + */ + abstract public void enableProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException; - 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; + /** + * Enables a dynamic function entry/return probe. + * @param eventName - a event name + * @param function - a dynamic function entry/return probe information + * @param monitor - a progress monitor + * @throws ExecutionException + */ + abstract public void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException; + + /** + * Enables events using log level + * @param eventName - a event name + * @param logLevelType - a log level type + * @param level - a log level + * @param monitor - a progress monitor + * @throws ExecutionException + */ + abstract public void enableLogLevel(String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException; + /** + * @return returns the relevant domain (null if domain is not known) + */ + abstract TraceDomainComponent getDomain(); + /* * (non-Javadoc) * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent) @@ -73,10 +116,9 @@ abstract public class BaseEnableEventHandler extends BaseControlViewHandler { 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)); - + + final IEnableEventsDialog dialog = new EnableEventsDialog(window.getShell(), (TraceProviderGroup)providers.get(0), getDomain()); + if (dialog.open() != Window.OK) { return null; } @@ -86,52 +128,55 @@ abstract public class BaseEnableEventHandler extends BaseControlViewHandler { protected IStatus run(IProgressMonitor monitor) { String errorString = null; - // Enable tracepoint events try { - if (dialog.isAllTracePoints()) { - enableEvents(null, monitor); - } else { + // Enable tracepoint events + if (dialog.isTracepoints()) { + if (dialog.isAllTracePoints()) { + enableEvents(null, dialog.isKernel(), monitor); + } else { + List eventNames = dialog.getEventNames(); + if (eventNames.size() > 0) { + enableEvents(eventNames, dialog.isKernel(), monitor); + } + } + } + + // Enable syscall events + if (dialog.isAllSysCalls()) { + if (dialog.isAllSysCalls()) { + enableSyscalls(monitor); + } + } + + // Enable dynamic probe + if (dialog.isDynamicProbe()) { + if ((dialog.getProbeEventName() != null && dialog.getProbeName() != null)) { + enableProbe(dialog.getProbeEventName(), dialog.getProbeName(), monitor); + } + } + + // Enable dynamic function probe + if (dialog.isDynamicFunctionProbe()) { + if ((dialog.getFunctionEventName() != null) && (dialog.getFunction() != null)) { + enableFunctionProbe(dialog.getFunctionEventName(), dialog.getFunction(), monitor); + } + } + + // Enable event using a wildcard + if (dialog.isWildcard()) { List eventNames = dialog.getEventNames(); + eventNames.add(dialog.getWildcard()); + if (eventNames.size() > 0) { - enableEvents(eventNames, monitor); + enableEvents(eventNames, dialog.isKernel(), monitor); } } - } catch (ExecutionException e) { - if (errorString == null) { - errorString = new String(); - } - errorString += e.toString() + "\n"; //$NON-NLS-1$ - } + + // Enable events using log level + if (dialog.isLogLevel()) { + enableLogLevel(dialog.getLogLevelEventName(), dialog.getLogLevelType(), dialog.getLogLevel(), monitor); + } - // 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(); 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 8755b28b38..e54ec436e1 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 @@ -33,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; 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 index 2c20bddf28..8c0b02dc19 100644 --- 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 @@ -19,7 +19,12 @@ 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.LogLevelType; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceSessionState; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceChannelComponent; +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; /** @@ -43,10 +48,10 @@ public class EnableEventOnChannelHandler extends BaseEnableEventHandler { // ------------------------------------------------------------------------ /* * (non-Javadoc) - * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, boolean, org.eclipse.core.runtime.IProgressMonitor) */ @Override - void enableEvents(List eventNames, IProgressMonitor monitor) throws ExecutionException { + public void enableEvents(List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { fChannel.enableEvents(eventNames, monitor); } @@ -55,7 +60,7 @@ public class EnableEventOnChannelHandler extends BaseEnableEventHandler { * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.core.runtime.IProgressMonitor) */ @Override - void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { + public void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { fChannel.enableSyscalls(monitor); } @@ -64,7 +69,7 @@ public class EnableEventOnChannelHandler extends BaseEnableEventHandler { * @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 { + public void enableProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { fChannel.enableProbe(eventName, probe, monitor); } @@ -73,10 +78,28 @@ public class EnableEventOnChannelHandler extends BaseEnableEventHandler { * @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 { + public void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { fChannel.enableFunctionProbe(eventName, probe, monitor); } + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableLogLevel(java.lang.String, org.eclipse.linuxtools.lttng.ui.views.control.model.LogLevelType, org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + public void enableLogLevel(String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException { + fChannel.enableLogLevel(eventName, logLevelType, level, monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#getDomain() + */ + @Override + public TraceDomainComponent getDomain() { + return (TraceDomainComponent) fChannel.getParent(); + } + /* * (non-Javadoc) * @see org.eclipse.core.commands.AbstractHandler#isEnabled() @@ -96,8 +119,13 @@ public class EnableEventOnChannelHandler extends BaseEnableEventHandler { for (Iterator iterator = structered.iterator(); iterator.hasNext();) { Object element = (Object) iterator.next(); if (element instanceof TraceChannelComponent) { - fChannel = (TraceChannelComponent) element; - fSession = fChannel.getSession(); + // Add only if corresponding TraceSessionComponents is inactive and not destroyed + TraceChannelComponent channel = (TraceChannelComponent) element; + TraceSessionComponent session = channel.getSession(); + if(session.getSessionState() == TraceSessionState.INACTIVE && !session.isDestroyed()) { + fChannel = channel; + fSession = session; + } } } } 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 index 47b282ff2c..1cda8bb445 100644 --- 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 @@ -19,6 +19,8 @@ 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.LogLevelType; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; 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; @@ -46,10 +48,10 @@ public class EnableEventOnDomainHandler extends BaseEnableEventHandler { // ------------------------------------------------------------------------ /* * (non-Javadoc) - * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, boolean, org.eclipse.core.runtime.IProgressMonitor) */ @Override - void enableEvents(List eventNames, IProgressMonitor monitor) throws ExecutionException { + public void enableEvents(List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { fDomain.enableEvents(eventNames, monitor); } @@ -58,7 +60,7 @@ public class EnableEventOnDomainHandler extends BaseEnableEventHandler { * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.core.runtime.IProgressMonitor) */ @Override - void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { + public void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { fDomain.enableSyscalls(monitor); } @@ -67,7 +69,7 @@ public class EnableEventOnDomainHandler extends BaseEnableEventHandler { * @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 { + public void enableProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { fDomain.enableProbe(eventName, probe, monitor); } @@ -76,10 +78,27 @@ public class EnableEventOnDomainHandler extends BaseEnableEventHandler { * @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 { + public void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { fDomain.enableFunctionProbe(eventName, probe, monitor); } + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableLogLevel(java.lang.String, org.eclipse.linuxtools.lttng.ui.views.control.model.LogLevelType, org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + public void enableLogLevel(String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException { + fDomain.enableLogLevel(eventName, logLevelType, level, monitor); + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#getDomain() + */ + @Override + public TraceDomainComponent getDomain() { + return fDomain; + } /* * (non-Javadoc) * @see org.eclipse.core.commands.AbstractHandler#isEnabled() @@ -99,10 +118,10 @@ public class EnableEventOnDomainHandler extends BaseEnableEventHandler { for (Iterator iterator = structered.iterator(); iterator.hasNext();) { Object element = (Object) iterator.next(); if (element instanceof TraceDomainComponent) { - // Add only TraceSessionComponents is inactive and not destroyed + // Add only if corresponding TraceSessionComponents is inactive and not destroyed TraceDomainComponent domain = (TraceDomainComponent) element; TraceSessionComponent session = domain.getSession(); - if(session.getSessionState() == TraceSessionState.INACTIVE && !session.isDestroyed() && domain.isKernel()) { + if(session.getSessionState() == TraceSessionState.INACTIVE && !session.isDestroyed()) { fDomain = domain; fSession = session; } 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 index 52b8deec57..620e37f510 100644 --- 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 @@ -19,7 +19,10 @@ 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.LogLevelType; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; 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; @@ -41,11 +44,11 @@ public class EnableEventOnSessionHandler extends BaseEnableEventHandler { // ------------------------------------------------------------------------ /* * (non-Javadoc) - * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, boolean, org.eclipse.core.runtime.IProgressMonitor) */ @Override - void enableEvents(List eventNames, IProgressMonitor monitor) throws ExecutionException { - fSession.enableEvents(eventNames, true, monitor); + public void enableEvents(List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { + fSession.enableEvents(eventNames, isKernel, monitor); } /* @@ -53,7 +56,7 @@ public class EnableEventOnSessionHandler extends BaseEnableEventHandler { * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.core.runtime.IProgressMonitor) */ @Override - void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { + public void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { fSession.enableSyscalls(monitor); } @@ -62,7 +65,7 @@ public class EnableEventOnSessionHandler extends BaseEnableEventHandler { * @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 { + public void enableProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { fSession.enableProbe(eventName, probe, monitor); } @@ -71,9 +74,28 @@ public class EnableEventOnSessionHandler extends BaseEnableEventHandler { * @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 { + public void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { fSession.enableFunctionProbe(eventName, probe, monitor); } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#enableLogLevel(java.lang.String, org.eclipse.linuxtools.lttng.ui.views.control.model.LogLevelType, org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + public void enableLogLevel(String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException { + fSession.enableLogLevel(eventName, logLevelType, level, monitor); + } + + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.lttng.ui.views.control.handlers.BaseEnableEventHandler#getDomain() + */ + @Override + public TraceDomainComponent getDomain() { + return null; + } /* * (non-Javadoc) @@ -96,7 +118,7 @@ public class EnableEventOnSessionHandler extends BaseEnableEventHandler { for (Iterator iterator = structered.iterator(); iterator.hasNext();) { Object element = (Object) iterator.next(); if (element instanceof TraceSessionComponent) { - // Add only TraceSessionComponents is inactive and not destroyed + // Add only if corresponding TraceSessionComponents is inactive and not destroyed TraceSessionComponent session = (TraceSessionComponent) element; if(session.getSessionState() == TraceSessionState.INACTIVE && !session.isDestroyed()) { fSession = session; 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 1fedcabf75..da4bf9691e 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 @@ -74,21 +74,35 @@ 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_EnableGroupSelectionName=Select 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_EnableEventsEventNameLabel=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_EnableEventsWildcardGroupName=Wildcard +TraceControl_EnableEventsWildcardLabel=Wildcard +TraceControl_EnableEventsWildcardTooltip=The wild card string of event names +TraceControl_EnableEventsLogLevelGroupName=Log Level +TraceControl_EnableEventsLogLevelTypeName=loglevel +TraceControl_EnableEventsLogLevelTypeTooltip=The tracepoint log level range from 0 to loglevel +TraceControl_EnableEventsLogLevelOnlyTypeName=loglevel-only +TraceControl_EnableEventsLogLevelOnlyTypeTooltip=The tracepoint log level (only this loglevel) +TraceControl_EnableEventsLogLevelTooltip=The available log levels +TraceControl_EnableEventsLoglevelEventNameTooltip=Event name for enabling log levels + TraceControl_InvalidProbeNameError=The probe name is invalid +TraceControl_InvalidProbeNameError=The wild card name is invalid +TraceControl_InvalidLogLevelEventNameError=The event name for log level is invalid # Tree structure strings TraceControl_KernelDomainDisplayName=Kernel diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/LogLevelType.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/LogLevelType.java new file mode 100644 index 0000000000..fff6277edd --- /dev/null +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/LogLevelType.java @@ -0,0 +1,30 @@ +/********************************************************************** + * 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.model; + +/** + * LogLevelType + *

+ * Type of log Level enumeration. + *

+ */ +public enum LogLevelType { + + // ------------------------------------------------------------------------ + // Enum definition + // ------------------------------------------------------------------------ + LOGLEVEL, // range of log levels [0,logLevel] + LOGLEVEL_ONLY, // single log level + LOGLEVEL_NONE; // no log level +}; + + diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/TraceEventType.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/TraceEventType.java index 57ad33b915..f47ac1e71b 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/TraceEventType.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/TraceEventType.java @@ -20,6 +20,7 @@ package org.eclipse.linuxtools.lttng.ui.views.control.model; public enum TraceEventType { TRACEPOINT("tracepoint"), //$NON-NLS-1$ SYSCALL("syscall"), //$NON-NLS-1$ + PROBE("probe"), //$NON-NLS-1$ UNKNOWN("unknown"); //$NON-NLS-1$ private final String fInName; diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/TraceLogLevel.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/TraceLogLevel.java index 112a336d1b..29ce0da54b 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/TraceLogLevel.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/TraceLogLevel.java @@ -14,7 +14,7 @@ package org.eclipse.linuxtools.lttng.ui.views.control.model; /** * TraceLogLevels *

- * Log Level state enumeration. + * Log Level enumeration. *

*/ @SuppressWarnings("nls") diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/BaseEventInfo.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/BaseEventInfo.java index 8d1a8d0558..098fc5d9b0 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/BaseEventInfo.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/model/impl/BaseEventInfo.java @@ -87,8 +87,9 @@ public class BaseEventInfo extends TraceInfo implements IBaseEventInfo { fEventType = TraceEventType.TRACEPOINT; } else if(TraceEventType.SYSCALL.getInName().equals(typeName)) { fEventType = TraceEventType.SYSCALL; - } - else { + } else if (TraceEventType.PROBE.getInName().equals(typeName)) { + fEventType = TraceEventType.PROBE; + } else { fEventType = TraceEventType.UNKNOWN; } } 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 7e48a1a2c1..7f4a08195b 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 @@ -21,7 +21,9 @@ import org.eclipse.linuxtools.lttng.ui.views.control.Messages; import org.eclipse.linuxtools.lttng.ui.views.control.model.IChannelInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.IEventInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.ITraceControlComponent; +import org.eclipse.linuxtools.lttng.ui.views.control.model.LogLevelType; import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceEnablement; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; import org.eclipse.linuxtools.lttng.ui.views.control.property.TraceChannelPropertySource; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.views.properties.IPropertySource; @@ -323,6 +325,29 @@ public class TraceChannelComponent extends TraceControlComponent { getControlService().enableFunctionProbe(getSessionName(), getName(), eventName, probe, monitor); } + /** + * Enables events using log level. + * @param eventName - a event name + * @param logLevelType - a log level type + * @param level - a log level + * @throws ExecutionException + */ + public void enableLogLevel(String eventName, LogLevelType logLevelType, TraceLogLevel level) throws ExecutionException { + enableLogLevel(eventName, logLevelType, level, new NullProgressMonitor()); + } + + /** + * Enables events using log level. + * @param eventName - a event name + * @param logLevelType - a log level type + * @param level - a log level + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableLogLevel(String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableLogLevel(getSessionName(), getName(), eventName, logLevelType, level, monitor); + } + /** * Enables a list of events with no additional parameters. * @param eventNames - a list of event names to enabled. 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 5283d1f8f9..237b473921 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 @@ -20,6 +20,8 @@ import org.eclipse.linuxtools.lttng.ui.views.control.Messages; import org.eclipse.linuxtools.lttng.ui.views.control.model.IChannelInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.IDomainInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.ITraceControlComponent; +import org.eclipse.linuxtools.lttng.ui.views.control.model.LogLevelType; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; import org.eclipse.linuxtools.lttng.ui.views.control.property.TraceDomainPropertySource; import org.eclipse.ui.views.properties.IPropertySource; @@ -264,4 +266,28 @@ public class TraceDomainComponent extends TraceControlComponent { public void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { getControlService().enableFunctionProbe(getSessionName(), null, eventName, probe, monitor); } + + /** + * Enables events using log level. + * @param eventName - a event name + * @param logLevelType - a log level type + * @param level - a log level + * @throws ExecutionException + */ + public void enableLogLevel(String eventName, LogLevelType logLevelType, TraceLogLevel level) throws ExecutionException { + enableLogLevel(eventName, logLevelType, level, new NullProgressMonitor()); + } + + /** + * Enables events using log level. + * @param eventName - a event name + * @param logLevelType - a log level type + * @param level - a log level + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableLogLevel(String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableLogLevel(getSessionName(), null, eventName, logLevelType, level, 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 5279710e49..d1f01fe97f 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 @@ -21,6 +21,8 @@ import org.eclipse.linuxtools.lttng.ui.views.control.Messages; import org.eclipse.linuxtools.lttng.ui.views.control.model.IDomainInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.ISessionInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.ITraceControlComponent; +import org.eclipse.linuxtools.lttng.ui.views.control.model.LogLevelType; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceSessionState; import org.eclipse.linuxtools.lttng.ui.views.control.property.TraceSessionPropertySource; import org.eclipse.swt.graphics.Image; @@ -328,4 +330,27 @@ public class TraceSessionComponent extends TraceControlComponent { public void enableFunctionProbe(String eventName, String probe, IProgressMonitor monitor) throws ExecutionException { getControlService().enableFunctionProbe(getName(), null, eventName, probe, monitor); } + + /** + * Enables events using log level. + * @param eventName - a event name + * @param logLevelType - a log level type + * @param level - a log level + * @throws ExecutionException + */ + public void enableLogLevel(String eventName, LogLevelType logLevelType, TraceLogLevel level) throws ExecutionException { + enableLogLevel(eventName, logLevelType, level, new NullProgressMonitor()); + } + + /** + * Enables events using log level. + * @param eventName - a event name + * @param logLevelType - a log level type + * @param level - a log level + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableLogLevel(String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableLogLevel(getName(), null, eventName, logLevelType, level, monitor); + } } diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/property/BaseEventPropertySource.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/property/BaseEventPropertySource.java index 05ab56cff8..df7c460809 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/property/BaseEventPropertySource.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/property/BaseEventPropertySource.java @@ -11,7 +11,11 @@ **********************************************************************/ package org.eclipse.linuxtools.lttng.ui.views.control.property; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.linuxtools.lttng.ui.views.control.Messages; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.BaseEventComponent; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.TextPropertyDescriptor; @@ -81,10 +85,13 @@ public class BaseEventPropertySource extends BasePropertySource { */ @Override public IPropertyDescriptor[] getPropertyDescriptors() { - return new IPropertyDescriptor[] { - new TextPropertyDescriptor(BASE_EVENT_NAME_PROPERTY_ID, BASE_EVENT_NAME_PROPERTY_NAME), - new TextPropertyDescriptor(BASE_EVENT_TYPE_PROPERTY_ID, BASE_EVENT_TYPE_PROPERTY_NAME), - new TextPropertyDescriptor(BASE_EVENT_LOGLEVEL_PROPERTY_ID, BASE_EVENT_LOGLEVEL_PROPERTY_NAME)}; + List list = new ArrayList (); + list.add(new TextPropertyDescriptor(BASE_EVENT_NAME_PROPERTY_ID, BASE_EVENT_NAME_PROPERTY_NAME)); + list.add(new TextPropertyDescriptor(BASE_EVENT_TYPE_PROPERTY_ID, BASE_EVENT_TYPE_PROPERTY_NAME)); + if (fBaseEvent.getLogLevel() != TraceLogLevel.LEVEL_UNKNOWN) { + list.add(new TextPropertyDescriptor(BASE_EVENT_LOGLEVEL_PROPERTY_ID, BASE_EVENT_LOGLEVEL_PROPERTY_NAME)); + } + return (IPropertyDescriptor [])list.toArray(new IPropertyDescriptor[list.size()]); } /* diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/property/TraceEventPropertySource.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/property/TraceEventPropertySource.java index 9d5e69b79d..f656dd3998 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/property/TraceEventPropertySource.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/control/property/TraceEventPropertySource.java @@ -11,7 +11,11 @@ **********************************************************************/ package org.eclipse.linuxtools.lttng.ui.views.control.property; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.linuxtools.lttng.ui.views.control.Messages; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.TraceEventComponent; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.TextPropertyDescriptor; @@ -88,11 +92,14 @@ public class TraceEventPropertySource extends BasePropertySource { */ @Override public IPropertyDescriptor[] getPropertyDescriptors() { - return new IPropertyDescriptor[] { - new TextPropertyDescriptor(TRACE_EVENT_NAME_PROPERTY_ID, TRACE_EVENT_NAME_PROPERTY_NAME), - new TextPropertyDescriptor(TRACE_EVENT_TYPE_PROPERTY_ID, TRACE_EVENT_TYPE_PROPERTY_NAME), - new TextPropertyDescriptor(TRACE_EVENT_LOGLEVEL_PROPERTY_ID, TRACE_EVENT_LOGLEVEL_PROPERTY_NAME), - new TextPropertyDescriptor(TRACE_EVENT_STATE_PROPERTY_ID, TRACE_EVENT_STATE_PROPERTY_NAME)}; + List list = new ArrayList (); + list.add(new TextPropertyDescriptor(TRACE_EVENT_NAME_PROPERTY_ID, TRACE_EVENT_NAME_PROPERTY_NAME)); + list.add(new TextPropertyDescriptor(TRACE_EVENT_TYPE_PROPERTY_ID, TRACE_EVENT_TYPE_PROPERTY_NAME)); + list.add( new TextPropertyDescriptor(TRACE_EVENT_STATE_PROPERTY_ID, TRACE_EVENT_STATE_PROPERTY_NAME)); + if (fEvent.getLogLevel() != TraceLogLevel.LEVEL_UNKNOWN) { + list.add(new TextPropertyDescriptor(TRACE_EVENT_LOGLEVEL_PROPERTY_ID, TRACE_EVENT_LOGLEVEL_PROPERTY_NAME)); + } + return (IPropertyDescriptor [])list.toArray(new IPropertyDescriptor[list.size()]); } /* 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 a69d8aefe7..617a1c3d7c 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 @@ -19,6 +19,8 @@ import org.eclipse.linuxtools.lttng.ui.views.control.model.IBaseEventInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.IChannelInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.ISessionInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.IUstProviderInfo; +import org.eclipse.linuxtools.lttng.ui.views.control.model.LogLevelType; +import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; /** ILttngControlService @@ -146,9 +148,9 @@ public interface ILttngControlService { * 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 + * @param probe - a dynamic probe information + * @param monitor - a progress monitor * @throws ExecutionException */ public void enableProbe(String sessionName, String channelName, String eventName, String probe, IProgressMonitor monitor) throws ExecutionException; @@ -157,13 +159,25 @@ public interface ILttngControlService { * 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 + * @param function - a dynamic function entry/return probe information + * @param monitor - a progress monitor * @throws ExecutionException */ - public void enableFunctionProbe(String sessionName, String channelName, String eventName, String probe, IProgressMonitor monitor) throws ExecutionException; + public void enableFunctionProbe(String sessionName, String channelName, String eventName, String function, IProgressMonitor monitor) throws ExecutionException; + /** + * Enables events using log level + * @param sessionName - a session name + * @param channelName - a channel name (null for default channel) + * @param eventName - a event name + * @param logLevelType - a log level type + * @param level - a log level + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableLogLevel(String sessionName, String channelName, String eventName, LogLevelType logLevelType, TraceLogLevel level, 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 2d1723714b..efc980bc5a 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 @@ -27,6 +27,7 @@ import org.eclipse.linuxtools.lttng.ui.views.control.model.IDomainInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.IEventInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.ISessionInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.IUstProviderInfo; +import org.eclipse.linuxtools.lttng.ui.views.control.model.LogLevelType; import org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.BaseEventInfo; import org.eclipse.linuxtools.lttng.ui.views.control.model.impl.ChannelInfo; @@ -132,6 +133,14 @@ public class LTTngControlService implements ILttngControlService { * Command line option for specifying a dynamic function entry/return probe. */ private final static String OPTION_FUNCTION_PROBE = " --function "; //$NON-NLS-1$ + /** + * Command line option for specifying a log level range. + */ + private final static String OPTION_LOGLEVEL = " --loglevel "; //$NON-NLS-1$ + /** + * Command line option for specifying a specific log level. + */ + private final static String OPTION_LOGLEVEL_ONLY = " --loglevel-only "; //$NON-NLS-1$ /** * Optional command line option for configuring a channel's overwrite mode. */ @@ -865,7 +874,45 @@ public class LTTngControlService implements ILttngControlService { 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#enableLogLevel(java.lang.String, java.lang.String, java.lang.String, org.eclipse.linuxtools.lttng.ui.views.control.model.LogLevelType, org.eclipse.linuxtools.lttng.ui.views.control.model.TraceLogLevel, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + public void enableLogLevel(String sessionName, String channelName, String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException { + String newSessionName = formatParameter(sessionName); + + StringBuffer command = new StringBuffer(COMMAND_ENABLE_EVENT); + + command.append(eventName); + command.append(OPTION_UST); + + command.append(OPTION_SESSION); + command.append(newSessionName); + + if (channelName != null) { + command.append(OPTION_CHANNEL); + command.append(channelName); + } + + if (logLevelType == LogLevelType.LOGLEVEL) { + command.append(OPTION_LOGLEVEL); + } else if (logLevelType == LogLevelType.LOGLEVEL_ONLY) { + command.append(OPTION_LOGLEVEL_ONLY); + + } else { + return; + } + command.append(level.getInName()); + + 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