From c56972bbc3440a0d493c536d23c2686692676df4 Mon Sep 17 00:00:00 2001 From: Bernd Hufmann Date: Fri, 16 Mar 2012 15:09:37 -0400 Subject: [PATCH] Fix findbugs warnings + address concurrency issues in handlers --- .../component/TraceControlProviderTests.java | 6 +- .../lttng2/ui/views/control/Messages.java | 1 + .../control/dialogs/CreateChannelDialog.java | 30 +-- .../control/dialogs/CreateSessionDialog.java | 2 +- .../control/dialogs/EnableEventsDialog.java | 6 +- .../dialogs/EnableKernelEventComposite.java | 4 +- .../dialogs/EnableUstEventsComposite.java | 18 +- .../control/dialogs/GetEventInfoDialog.java | 4 + .../control/dialogs/ICreateChannelDialog.java | 6 + .../ICreateChannelOnSessionDialog.java | 32 --- .../dialogs/TraceControlDialogFactory.java | 41 +-- .../control/handlers/AssignEventHandler.java | 203 +++++++++----- .../handlers/BaseControlViewHandler.java | 10 + .../handlers/BaseCreateChannelHandler.java | 121 +++++++++ .../handlers/BaseEnableEventHandler.java | 164 ++++++------ .../control/handlers/BaseNodeHandler.java | 16 +- .../handlers/ChangeChannelStateHandler.java | 252 ++++++++++++------ .../handlers/ChangeEventStateHandler.java | 180 ++++++++----- .../handlers/ChangeSessionStateHandler.java | 65 +++-- .../handlers/ChannelCommandParameter.java | 68 +++++ .../control/handlers/CommandParameter.java | 71 +++++ .../control/handlers/ConnectHandler.java | 16 +- .../CreateChannelOnDomainHandler.java | 108 +++----- .../CreateChannelOnSessionHandler.java | 104 +++----- .../handlers/CreateSessionHandler.java | 67 +++-- .../views/control/handlers/DeleteHandler.java | 20 +- .../handlers/DestroySessionHandler.java | 2 +- .../control/handlers/DisconnectHandler.java | 19 +- .../handlers/DomainCommandParameter.java | 68 +++++ .../handlers/EnableEventOnChannelHandler.java | 70 +++-- .../handlers/EnableEventOnDomainHandler.java | 69 +++-- .../handlers/EnableEventOnSessionHandler.java | 49 ++-- .../handlers/NewConnectionHandler.java | 45 +++- .../control/handlers/RefreshHandler.java | 26 +- .../ui/views/control/messages.properties | 1 + .../control/model/impl/BaseEventInfo.java | 2 +- .../views/control/model/impl/ChannelInfo.java | 2 +- .../views/control/model/impl/DomainInfo.java | 2 +- .../views/control/model/impl/EventInfo.java | 2 +- .../control/model/impl/ProbeEventInfo.java | 2 +- .../views/control/model/impl/SessionInfo.java | 2 +- .../model/impl/TraceSessionComponent.java | 28 ++ .../TraceProbeEventPropertySource.java | 11 +- .../control/service/LTTngControlService.java | 50 ++-- 44 files changed, 1350 insertions(+), 715 deletions(-) delete mode 100644 org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/ICreateChannelOnSessionDialog.java create mode 100644 org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseCreateChannelHandler.java create mode 100644 org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChannelCommandParameter.java create mode 100644 org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CommandParameter.java create mode 100644 org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DomainCommandParameter.java diff --git a/org.eclipse.linuxtools.lttng2.ui.tests/src/org/eclipse/linuxtools/lttng2/ui/tests/control/model/component/TraceControlProviderTests.java b/org.eclipse.linuxtools.lttng2.ui.tests/src/org/eclipse/linuxtools/lttng2/ui/tests/control/model/component/TraceControlProviderTests.java index 706ffc69ca..d9f50123d0 100644 --- a/org.eclipse.linuxtools.lttng2.ui.tests/src/org/eclipse/linuxtools/lttng2/ui/tests/control/model/component/TraceControlProviderTests.java +++ b/org.eclipse.linuxtools.lttng2.ui.tests/src/org/eclipse/linuxtools/lttng2/ui/tests/control/model/component/TraceControlProviderTests.java @@ -26,7 +26,7 @@ import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Path; import org.eclipse.linuxtools.internal.lttng2.stubs.service.TestRemoteSystemProxy; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.IConfirmDialog; -import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateChannelOnSessionDialog; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateChannelDialog; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateSessionDialog; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.IGetEventInfoDialog; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.TraceControlDialogFactory; @@ -286,7 +286,7 @@ public class TraceControlProviderTests extends TestCase { // ------------------------------------------------------------------------ // Create Channel on UST global domain // ------------------------------------------------------------------------ - TraceControlDialogFactory.getInstance().setCreateChannelOnSessionDialog(new CreateChannelOnSessionDialogStub()); + TraceControlDialogFactory.getInstance().setCreateChannelDialog(new CreateChannelDialogStub()); fFacility.getControlView().setSelection(session); // Give GUI time to actually execute refresh @@ -917,7 +917,7 @@ public class TraceControlProviderTests extends TestCase { } } - public class CreateChannelOnSessionDialogStub implements ICreateChannelOnSessionDialog { + public class CreateChannelDialogStub implements ICreateChannelDialog { @Override public IChannelInfo getChannelInfo() { diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/Messages.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/Messages.java index 05548466f1..6c9981a95d 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/Messages.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/Messages.java @@ -130,6 +130,7 @@ final public class Messages extends NLS { public static String TraceControl_InvalidProbeNameError; public static String TraceControl_InvalidWildcardError; public static String TraceControl_InvalidLogLevelEventNameError; + public static String TraceControl_InvalidLogLevel; // Tree structure strings diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/CreateChannelDialog.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/CreateChannelDialog.java index 10e9c2d126..dde5aaef54 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/CreateChannelDialog.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/CreateChannelDialog.java @@ -39,7 +39,7 @@ import org.eclipse.swt.widgets.Text; * Dialog box for collecting channel creation information. *

*/ -public class CreateChannelDialog extends Dialog implements ICreateChannelOnSessionDialog { +public class CreateChannelDialog extends Dialog implements ICreateChannelDialog { // ------------------------------------------------------------------------ // Constants @@ -63,23 +63,23 @@ public class CreateChannelDialog extends Dialog implements ICreateChannelOnSessi /** * The overwrite mode of the channel. */ - private Button fOverwriteModeButton; + private Button fOverwriteModeButton = null; /** * The sub-buffer size of the channel. */ - private Text fSubBufferSizeText; + private Text fSubBufferSizeText = null; /** * The number of sub-buffers of the channel. */ - private Text fNumberOfSubBuffersText; + private Text fNumberOfSubBuffersText = null; /** * The switch timer interval of the channel. */ - private Text fSwitchTimerText; + private Text fSwitchTimerText = null; /** * The read timer interval of the channel. */ - private Text fReadTimerText; + private Text fReadTimerText = null; /** * Group composite for domain selection. */ @@ -87,24 +87,24 @@ public class CreateChannelDialog extends Dialog implements ICreateChannelOnSessi /** * Radio button for selecting kernel domain. */ - private Button fKernelButton; + private Button fKernelButton = null; /** * Radio button for selecting UST domain. */ - private Button fUstButton; + private Button fUstButton = null; /** * The parent domain component where the channel node should be added. * Null in case of creation on session level. */ - private TraceDomainComponent fDomain; + private TraceDomainComponent fDomain = null; /** * Common verify listener for numeric text input. */ - private VerifyListener fVerifyListener; + private VerifyListener fVerifyListener = null; /** * Output channel information. */ - private IChannelInfo fChannelInfo; + private IChannelInfo fChannelInfo = null; /** * Output domain information. True in case of Kernel domain. False for UST. */ @@ -160,7 +160,7 @@ public class CreateChannelDialog extends Dialog implements ICreateChannelOnSessi /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateChannelOnSessionDialog#isKernel() + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateChannelDialog#isKernel() */ @Override public boolean isKernel() { @@ -295,11 +295,7 @@ public class CreateChannelDialog extends Dialog implements ICreateChannelOnSessi fChannelInfo.setReadTimer(Long.parseLong(fReadTimerText.getText())); fChannelInfo.setOverwriteMode(fOverwriteModeButton.getSelection()); - if (fKernelButton.getSelection() == true) { - fIsKernel = true; - } else { - fIsKernel = false; - } + fIsKernel = fKernelButton.getSelection(); // Check for invalid names if (!fChannelInfo.getName().matches("^[a-zA-Z0-9\\-\\_]{1,}$")) { //$NON-NLS-1$ diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/CreateSessionDialog.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/CreateSessionDialog.java index f4ce9c440e..c975e0518d 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/CreateSessionDialog.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/CreateSessionDialog.java @@ -67,7 +67,7 @@ public class CreateSessionDialog extends Dialog implements ICreateSessionDialog /** * The parent where the new node should be added. */ - private TraceSessionGroup fParent; + private TraceSessionGroup fParent = null; /** * The session name string. */ diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableEventsDialog.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableEventsDialog.java index 28e961f376..3bdef66023 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableEventsDialog.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableEventsDialog.java @@ -451,11 +451,7 @@ public class EnableEventsDialog extends Dialog implements IEnableEventsDialog { */ @Override protected void okPressed() { - if (fKernelButton.getSelection() == true) { - fIsKernel = true; - } else { - fIsKernel = false; - } + fIsKernel = fKernelButton.getSelection(); // Validate kernel composite in case of kernel domain if (fKernelComposite != null && !fKernelComposite.isValid()) { diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableKernelEventComposite.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableKernelEventComposite.java index cb1a0b5b69..b448ab6a86 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableKernelEventComposite.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableKernelEventComposite.java @@ -555,7 +555,7 @@ public class EnableKernelEventComposite extends Composite implements IEnableKern /** * Content provider for the tracepoints tree. */ - final public class KernelContentProvider extends TraceControlContentProvider { + final static public class KernelContentProvider extends TraceControlContentProvider { @Override public Object[] getChildren(Object parentElement) { if (parentElement instanceof TraceProviderGroup) { @@ -572,7 +572,7 @@ public class EnableKernelEventComposite extends Composite implements IEnableKern /** * Content label for the tracepoints tree. */ - final public class KernelLabelProvider extends TraceControlLabelProvider { + final static public class KernelLabelProvider extends TraceControlLabelProvider { @Override public Image getImage(Object element) { return null; diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableUstEventsComposite.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableUstEventsComposite.java index b76856868e..34571df59f 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableUstEventsComposite.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/EnableUstEventsComposite.java @@ -258,7 +258,7 @@ public class EnableUstEventsComposite extends Composite implements IEnableUstEve } /** - * Validates the kernel composite input data. + * Validates the UST composite input data. * @return true if configured data is valid and can be retrieved. */ public boolean isValid() { @@ -303,6 +303,18 @@ public class EnableUstEventsComposite extends Composite implements IEnableUstEve fLogLevelEventName = temp; } + TraceLogLevel[] levels = TraceLogLevel.values(); + int id = fLogLevelCombo.getSelectionIndex(); + if ((id < 0) && fIsLogLevel) { + MessageDialog.openError(getShell(), + Messages.TraceControl_EnableEventsDialogTitle, + Messages.TraceControl_InvalidLogLevel + " (" + temp + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$ + + return false; + } else { + fLogLevel = levels[id]; + } + // initialize log level event name string fWildcard = null; temp = fWildcardText.getText(); @@ -524,7 +536,7 @@ public class EnableUstEventsComposite extends Composite implements IEnableUstEve /** * Content provider for the tracepoints tree. */ - final public class UstContentProvider extends TraceControlContentProvider { + final static public class UstContentProvider extends TraceControlContentProvider { @Override public Object[] getChildren(Object parentElement) { if (parentElement instanceof TargetNodeComponent) { @@ -545,7 +557,7 @@ public class EnableUstEventsComposite extends Composite implements IEnableUstEve /** * Content label for the tracepoints tree. */ - final public class UstLabelProvider extends TraceControlLabelProvider { + final static public class UstLabelProvider extends TraceControlLabelProvider { @Override public Image getImage(Object element) { return null; diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/GetEventInfoDialog.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/GetEventInfoDialog.java index 2392d3604a..ebf0e27d38 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/GetEventInfoDialog.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/GetEventInfoDialog.java @@ -25,6 +25,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; @@ -238,6 +239,9 @@ public class GetEventInfoDialog extends Dialog implements IGetEventInfoDialog { public void widgetDefaultSelected(SelectionEvent e) { } }); + + getShell().setMinimumSize(new Point(300, 200)); + return fDialogComposite; } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/ICreateChannelDialog.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/ICreateChannelDialog.java index 94910801ff..49679e89d4 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/ICreateChannelDialog.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/ICreateChannelDialog.java @@ -36,6 +36,12 @@ public interface ICreateChannelDialog { */ public void setDomainComponent(TraceDomainComponent domain); + /** + * @return true for Kernel domain. False for UST. + */ + public boolean isKernel(); + + // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/ICreateChannelOnSessionDialog.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/ICreateChannelOnSessionDialog.java deleted file mode 100644 index 426230c4b7..0000000000 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/ICreateChannelOnSessionDialog.java +++ /dev/null @@ -1,32 +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.internal.lttng2.ui.views.control.dialogs; - - -/** - * ICreateChannelOnSessionDialog - *

- * Interface for the create channel dialog when domain is known, i.e. dialog - * was opened on session level. - *

- */ -public interface ICreateChannelOnSessionDialog extends ICreateChannelDialog { - - // ------------------------------------------------------------------------ - // Accessors - // ------------------------------------------------------------------------ - /** - * @return true for Kernel domain. False for UST. - */ - public boolean isKernel(); - -} diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/TraceControlDialogFactory.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/TraceControlDialogFactory.java index 2c26f2afed..f8d5d8a720 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/TraceControlDialogFactory.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/dialogs/TraceControlDialogFactory.java @@ -3,7 +3,7 @@ package org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs; import org.eclipse.ui.PlatformUI; -public class TraceControlDialogFactory { +final public class TraceControlDialogFactory { // ------------------------------------------------------------------------ // Members @@ -24,11 +24,6 @@ public class TraceControlDialogFactory { */ private ICreateChannelDialog fCreateChannelDialog; - /** - * The create channel dialog (on session level) - */ - private ICreateChannelOnSessionDialog fCreateChannelOnSessionDialog; - /** * The create session dialog. */ @@ -66,8 +61,8 @@ public class TraceControlDialogFactory { /** * @return TraceControlDialogFactory instance */ - public static TraceControlDialogFactory getInstance() { - if (null == fInstance) { + public synchronized static TraceControlDialogFactory getInstance() { + if (fInstance == null) { fInstance = new TraceControlDialogFactory(); } return fInstance; @@ -77,7 +72,7 @@ public class TraceControlDialogFactory { * @return new connection dialog */ public INewConnectionDialog getNewConnectionDialog() { - if (null == fNewConnectionDialog) { + if (fNewConnectionDialog == null) { fNewConnectionDialog = new NewConnectionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()); } return fNewConnectionDialog; @@ -95,7 +90,7 @@ public class TraceControlDialogFactory { * @return create channel dialog (on domain level) */ public ICreateChannelDialog getCreateChannelDialog() { - if (null == fCreateChannelDialog) { + if (fCreateChannelDialog == null) { fCreateChannelDialog = new CreateChannelDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()); } return fCreateChannelDialog; @@ -109,29 +104,11 @@ public class TraceControlDialogFactory { fCreateChannelDialog = createChannelDialog; } - /** - * @return create channel dialog (on session level) - */ - public ICreateChannelOnSessionDialog getCreateChannelOnSessionDialog() { - if (null == fCreateChannelOnSessionDialog) { - fCreateChannelOnSessionDialog = new CreateChannelDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()); - } - return fCreateChannelOnSessionDialog; - } - - /** - * Sets a create channel dialog implementation (on domain level). - * @param createChannelDialog - a create channel dialog implementation - */ - public void setCreateChannelOnSessionDialog(ICreateChannelOnSessionDialog createChannelDialog) { - fCreateChannelOnSessionDialog = createChannelDialog; - } - /** * @return create session dialog implementation */ public ICreateSessionDialog getCreateSessionDialog() { - if (null == fCreateSessionDialog) { + if (fCreateSessionDialog == null) { fCreateSessionDialog = new CreateSessionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()); } return fCreateSessionDialog; @@ -149,7 +126,7 @@ public class TraceControlDialogFactory { * @return enable events dialog implementation. */ public IEnableEventsDialog getEnableEventsDialog() { - if (null == fEnableEventsDialog) { + if (fEnableEventsDialog == null) { fEnableEventsDialog = new EnableEventsDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()); } return fEnableEventsDialog; @@ -167,7 +144,7 @@ public class TraceControlDialogFactory { * @return get events info dialog implementation. */ public IGetEventInfoDialog getGetEventInfoDialog() { - if (null == fGetEventInfoDialog) { + if (fGetEventInfoDialog == null) { fGetEventInfoDialog = new GetEventInfoDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()); } return fGetEventInfoDialog; @@ -185,7 +162,7 @@ public class TraceControlDialogFactory { * @return the confirmation dialog implementation */ public IConfirmDialog getConfirmDialog() { - if (null == fConfirmDialog) { + if (fConfirmDialog == null) { fConfirmDialog = new ConfirmDialog(); } return fConfirmDialog; diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/AssignEventHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/AssignEventHandler.java index 94cabd8941..2c565bcdc6 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/AssignEventHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/AssignEventHandler.java @@ -12,6 +12,7 @@ package org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers; import java.util.ArrayList; +import java.util.Arrays; import java.util.Iterator; import java.util.List; @@ -39,7 +40,7 @@ import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.UstPro import org.eclipse.ui.IWorkbenchPage; /** - * EnableEventHandler + * AssignEventHandler *

* Command handler implementation to assign events to a session and channel and enable/configure them. * This is done on the trace provider level. @@ -51,19 +52,9 @@ public class AssignEventHandler extends BaseControlViewHandler { // Attributes // ------------------------------------------------------------------------ /** - * The list of event components the command is to be executed on. + * The command execution parameter. */ - private List fEvents = new ArrayList(); - - /** - * The list of available sessions. - */ - private TraceSessionComponent[] fSessions; - - /** - * Flag for indicating Kernel or UST. - */ - Boolean fIsKernel = null; + private Parameter fParam; // ------------------------------------------------------------------------ // Operations @@ -76,58 +67,68 @@ public class AssignEventHandler extends BaseControlViewHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { - // Open dialog box to retrieve the session and channel where the events should be enabled in. - final IGetEventInfoDialog dialog = TraceControlDialogFactory.getInstance().getGetEventInfoDialog(); - dialog.setIsKernel(fIsKernel); - dialog.setSessions(fSessions); + fLock.lock(); + try { + // Make a copy for thread safety + final Parameter param = new Parameter(fParam); - if (dialog.open() != Window.OK) { - return null; - } + // Open dialog box to retrieve the session and channel where the events should be enabled in. + final IGetEventInfoDialog dialog = TraceControlDialogFactory.getInstance().getGetEventInfoDialog(); + dialog.setIsKernel(param.isKernel()); + dialog.setSessions(param.getSessions()); - Job job = new Job(Messages.TraceControl_EnableEventsJob) { - @Override - protected IStatus run(IProgressMonitor monitor) { - - String errorString = null; - try { - List eventNames = new ArrayList(); - // Create list of event names - for (Iterator iterator = fEvents.iterator(); iterator.hasNext();) { - BaseEventComponent event = (BaseEventComponent) iterator.next(); - eventNames.add(event.getName()); - } + if (dialog.open() != Window.OK) { + return null; + } - TraceChannelComponent channel = dialog.getChannel(); - if (channel == null) { - // enable events on default channel (which will be created by lttng-tools) - dialog.getSession().enableEvents(eventNames, fIsKernel, monitor); - } else { - channel.enableEvents(eventNames, monitor); - } + Job job = new Job(Messages.TraceControl_EnableEventsJob) { + @Override + protected IStatus run(IProgressMonitor monitor) { - } catch (ExecutionException e) { - errorString = e.toString() + "\n"; //$NON-NLS-1$ - } + StringBuffer errorString = new StringBuffer(); + try { + List eventNames = new ArrayList(); + List events = param.getEvents(); + // Create list of event names + for (Iterator iterator = events.iterator(); iterator.hasNext();) { + BaseEventComponent event = (BaseEventComponent) iterator.next(); + eventNames.add(event.getName()); + } - // get session configuration in all cases - try { - dialog.getSession().getConfigurationFromNode(monitor); - } catch (ExecutionException e) { - if (errorString == null) { - errorString = new String(); + TraceChannelComponent channel = dialog.getChannel(); + if (channel == null) { + // enable events on default channel (which will be created by lttng-tools) + dialog.getSession().enableEvents(eventNames, param.isKernel(), monitor); + } else { + channel.enableEvents(eventNames, monitor); + } + + } catch (ExecutionException e) { + errorString.append(e.toString()); + errorString.append('\n'); } - errorString += Messages.TraceControl_ListSessionFailure + ": " + e.toString(); //$NON-NLS-1$ - } - if (errorString != null) { - return new Status(Status.ERROR, Activator.PLUGIN_ID, errorString); + // get session configuration in all cases + try { + dialog.getSession().getConfigurationFromNode(monitor); + } catch (ExecutionException e) { + errorString.append(Messages.TraceControl_ListSessionFailure); + errorString.append(": "); //$NON-NLS-1$ + errorString.append(e.toString()); + } + + if (errorString.length() > 0) { + return new Status(Status.ERROR, Activator.PLUGIN_ID, errorString.toString()); + } + return Status.OK_STATUS; } - return Status.OK_STATUS; - } - }; - job.setUser(true); - job.schedule(); + }; + job.setUser(true); + job.schedule(); + } finally { + fLock.unlock(); + } + return null; } @@ -137,11 +138,11 @@ public class AssignEventHandler extends BaseControlViewHandler { */ @Override public boolean isEnabled() { - fEvents.clear(); - fSessions = null; - fIsKernel = null; + ArrayList events = new ArrayList(); + TraceSessionComponent[] sessions = null; + Boolean isKernel = null; - // Get workbench page for the Control View + // Get workbench page for the Control View IWorkbenchPage page = getWorkbenchPage(); if (page == null) { return false; @@ -167,25 +168,91 @@ public class AssignEventHandler extends BaseControlViewHandler { } else { return false; } - if (fIsKernel == null) { - fIsKernel = Boolean.valueOf(temp); + if (isKernel == null) { + isKernel = Boolean.valueOf(temp); } else { // don't mix events from Kernel and UST provider - if (fIsKernel.booleanValue() != temp) { + if (isKernel.booleanValue() != temp) { return false; } } // Add BaseEventComponents - fEvents.add(event); + events.add(event); - if (fSessions == null) { + if (sessions == null) { TargetNodeComponent root = (TargetNodeComponent)event.getParent().getParent().getParent(); - fSessions = root.getSessions(); + sessions = root.getSessions(); } } } } - return ((fEvents.size() > 0) && (fSessions != null) && (fSessions.length > 0)); + + boolean isEnabled = ((!events.isEmpty()) && (sessions != null) && (sessions.length > 0)); + fLock.lock(); + try { + fParam = null; + if(isEnabled) { + fParam = new Parameter(sessions, events, isKernel); + } + } finally { + fLock.unlock(); + } + return isEnabled; + } + + /** + * Class containing parameter for the command execution. + */ + final static private class Parameter { + + /** + * The list of event components the command is to be executed on. + */ + private List fEvents; + + /** + * The list of available sessions. + */ + final private TraceSessionComponent[] fSessions; + + /** + * Flag for indicating Kernel or UST. + */ + final private boolean fIsKernel; + + /** + * Constructor + * + * @param sessions - a array of trace sessions + * @param events - a lists of events to enable + * @param isKernel - domain (true for kernel or UST) + */ + public Parameter(TraceSessionComponent[] sessions, List events, boolean isKernel) { + fSessions = Arrays.copyOf(sessions, sessions.length); + fEvents = new ArrayList(); + fEvents.addAll(events); + fIsKernel = isKernel; + } + + /** + * Copy constructor + * @param other - a parameter to copy + */ + public Parameter(Parameter other) { + this(other.fSessions, other.fEvents, other.fIsKernel); + } + + public TraceSessionComponent[] getSessions() { + return fSessions; + } + + public List getEvents() { + return fEvents; + } + + public boolean isKernel() { + return fIsKernel; + } } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseControlViewHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseControlViewHandler.java index d25f03e709..80782b0480 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseControlViewHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseControlViewHandler.java @@ -11,6 +11,8 @@ **********************************************************************/ package org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers; +import java.util.concurrent.locks.ReentrantLock; + import org.eclipse.core.commands.AbstractHandler; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.ControlView; import org.eclipse.ui.IWorkbenchPage; @@ -26,6 +28,14 @@ import org.eclipse.ui.PlatformUI; */ abstract public class BaseControlViewHandler extends AbstractHandler { + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + /** + * The synchronization lock. + */ + protected ReentrantLock fLock = new ReentrantLock(); + // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseCreateChannelHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseCreateChannelHandler.java new file mode 100644 index 0000000000..f069d8a49f --- /dev/null +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseCreateChannelHandler.java @@ -0,0 +1,121 @@ +/********************************************************************** + * 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.internal.lttng2.ui.views.control.handlers; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.window.Window; +import org.eclipse.linuxtools.internal.lttng2.ui.Activator; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.Messages; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateChannelDialog; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.TraceControlDialogFactory; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IChannelInfo; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceDomainComponent; + +/** + * BaseCreateChannelHandler + *

+ * Base implementation of aCommand handler implementation to create a trace channel. + *

+ */ +abstract class BaseCreateChannelHandler extends BaseControlViewHandler { + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + protected CommandParameter fParam; + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + /** + * Enables channels with given names which are part of this domain. If a given channel + * doesn't exists it creates a new channel with the given parameters (or default values + * if given parameter is null). + * @param - a parameter instance with data for the command execution + * @param channelNames - a list of channel names to enable on this domain + * @param info - channel information to set for the channel (use null for default) + * @param isKernel - a flag for indicating kernel or UST. + * @param monitor - a progress monitor + * @throws ExecutionException + */ + abstract public void enableChannel(CommandParameter param, List channelNames, IChannelInfo info, boolean isKernel, IProgressMonitor monitor) throws ExecutionException; + + /** + * @param - a parameter instance with data for the command execution + * @return returns the relevant domain (null if domain is not known) + */ + abstract public TraceDomainComponent getDomain(CommandParameter param); + + /* + * (non-Javadoc) + * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + fLock.lock(); + try { + final CommandParameter param = fParam.clone(); + + final ICreateChannelDialog dialog = TraceControlDialogFactory.getInstance().getCreateChannelDialog(); + dialog.setDomainComponent(getDomain(param)); + + if (dialog.open() != Window.OK) { + return null; + } + + Job job = new Job(Messages.TraceControl_ChangeChannelStateJob) { + @Override + protected IStatus run(IProgressMonitor monitor) { + StringBuffer errorString = new StringBuffer(); + + List channelNames = new ArrayList(); + channelNames.add(dialog.getChannelInfo().getName()); + + try { + enableChannel(param, channelNames, dialog.getChannelInfo(), dialog.isKernel(), monitor); + } catch (ExecutionException e) { + errorString.append(e.toString()); + errorString.append("\n"); //$NON-NLS-1$ + } + + // get session configuration in all cases + try { + param.getSession().getConfigurationFromNode(monitor); + } catch (ExecutionException e) { + errorString.append(Messages.TraceControl_ListSessionFailure); + errorString.append(": "); //$NON-NLS-1$ + errorString.append(e.toString()); + } + + if (errorString.length() > 0) { + return new Status(Status.ERROR, Activator.PLUGIN_ID, errorString.toString()); + } + return Status.OK_STATUS; + } + }; + job.setUser(true); + job.schedule(); + } finally { + fLock.unlock(); + } + return null; + } + +} diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseEnableEventHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseEnableEventHandler.java index af1e743b53..e0772c68a7 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseEnableEventHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseEnableEventHandler.java @@ -30,7 +30,6 @@ import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.TraceLogLev import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TargetNodeComponent; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceDomainComponent; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceProviderGroup; -import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceSessionComponent; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; @@ -46,52 +45,58 @@ abstract public class BaseEnableEventHandler extends BaseControlViewHandler { // Attributes // ------------------------------------------------------------------------ /** - * The session component the command is to be executed on. + * The command execution parameter. */ - protected TraceSessionComponent fSession = null; + protected CommandParameter fParam = null; // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ /** * Enables a list of events for given parameters. + * @param - a parameter instance with data for the command execution * @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; + abstract public void enableEvents(CommandParameter param, List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException; + /** * Enables all syscall events. + * @param - a parameter instance with data for the command execution * @param monitor - a progress monitor * @throws ExecutionException */ - abstract public void enableSyscalls(IProgressMonitor monitor) throws ExecutionException; + abstract public void enableSyscalls(CommandParameter param, IProgressMonitor monitor) throws ExecutionException; /** * Enables a dynamic probe. + * @param - a parameter instance with data for the command execution * @param eventName - a event name * @param isFunction - true for dynamic function entry/return probe else false * @param probe - a dynamic probe information * @param monitor - a progress monitor * @throws ExecutionException */ - abstract public void enableProbe(String eventName, boolean isFunction, String probe, IProgressMonitor monitor) throws ExecutionException; + abstract public void enableProbe(CommandParameter param, String eventName, boolean isFunction, String probe, IProgressMonitor monitor) throws ExecutionException; /** * Enables events using log level + * @param - a parameter instance with data for the command execution * @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; + abstract public void enableLogLevel(CommandParameter param, String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException; /** + * @param - a parameter instance with data for the command execution * @return returns the relevant domain (null if domain is not known) */ - abstract TraceDomainComponent getDomain(); + abstract TraceDomainComponent getDomain(CommandParameter param); /* * (non-Javadoc) @@ -105,98 +110,95 @@ abstract public class BaseEnableEventHandler extends BaseControlViewHandler { if (window == null) { return false; } + fLock.lock(); + try { + // Make a copy for thread safety + final CommandParameter param = fParam.clone(); - TargetNodeComponent node = fSession.getTargetNode(); - List providers = node.getChildren(TraceProviderGroup.class); + TargetNodeComponent node = param.getSession().getTargetNode(); + List providers = node.getChildren(TraceProviderGroup.class); - final IEnableEventsDialog dialog = TraceControlDialogFactory.getInstance().getEnableEventsDialog(); - dialog.setTraceProviderGroup((TraceProviderGroup)providers.get(0)); - dialog.setTraceDomainComponent(getDomain()); + final IEnableEventsDialog dialog = TraceControlDialogFactory.getInstance().getEnableEventsDialog(); + dialog.setTraceProviderGroup((TraceProviderGroup)providers.get(0)); + dialog.setTraceDomainComponent(getDomain(param)); - if (dialog.open() != Window.OK) { - return null; - } + if (dialog.open() != Window.OK) { + return null; + } - Job job = new Job(Messages.TraceControl_ChangeEventStateJob) { - @Override - protected IStatus run(IProgressMonitor monitor) { - String errorString = null; - - try { - // 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); + Job job = new Job(Messages.TraceControl_ChangeEventStateJob) { + @Override + protected IStatus run(IProgressMonitor monitor) { + StringBuffer errorString = new StringBuffer(); + + try { + // Enable tracepoint events + if (dialog.isTracepoints()) { + if (dialog.isAllTracePoints()) { + enableEvents(param, null, dialog.isKernel(), monitor); + } else { + List eventNames = dialog.getEventNames(); + if (!eventNames.isEmpty()) { + enableEvents(param, eventNames, dialog.isKernel(), monitor); + } } } - } - // Enable syscall events - if (dialog.isAllSysCalls()) { + // Enable syscall events if (dialog.isAllSysCalls()) { - enableSyscalls(monitor); - } - } + enableSyscalls(param, monitor); + } - // Enable dynamic probe - if (dialog.isDynamicProbe()) { - if ((dialog.getProbeEventName() != null && dialog.getProbeName() != null)) { - enableProbe(dialog.getProbeEventName(), false, dialog.getProbeName(), monitor); - } - } + // Enable dynamic probe + if (dialog.isDynamicProbe() && (dialog.getProbeEventName() != null) && (dialog.getProbeName() != null)) { + enableProbe(param, dialog.getProbeEventName(), false, dialog.getProbeName(), monitor); + } - // Enable dynamic function probe - if (dialog.isDynamicFunctionProbe()) { - if ((dialog.getFunctionEventName() != null) && (dialog.getFunction() != null)) { - enableProbe(dialog.getFunctionEventName(), true, dialog.getFunction(), monitor); - } - } + // Enable dynamic function probe + if (dialog.isDynamicFunctionProbe() && (dialog.getFunctionEventName() != null) && (dialog.getFunction() != null)) { + enableProbe(param, dialog.getFunctionEventName(), true, dialog.getFunction(), monitor); + } - // Enable event using a wildcard - if (dialog.isWildcard()) { - List eventNames = dialog.getEventNames(); - eventNames.add(dialog.getWildcard()); + // Enable event using a wildcard + if (dialog.isWildcard()) { + List eventNames = dialog.getEventNames(); + eventNames.add(dialog.getWildcard()); - if (eventNames.size() > 0) { - enableEvents(eventNames, dialog.isKernel(), monitor); + if (!eventNames.isEmpty()) { + enableEvents(param, eventNames, dialog.isKernel(), monitor); + } } - } - - // Enable events using log level - if (dialog.isLogLevel()) { - enableLogLevel(dialog.getLogLevelEventName(), dialog.getLogLevelType(), dialog.getLogLevel(), monitor); + + // Enable events using log level + if (dialog.isLogLevel()) { + enableLogLevel(param, dialog.getLogLevelEventName(), dialog.getLogLevelType(), dialog.getLogLevel(), monitor); + } + + } catch (ExecutionException e) { + errorString.append(e.toString()); + errorString.append('\n'); } - } catch (ExecutionException e) { - if (errorString == null) { - errorString = new String(); + // get session configuration in all cases + try { + param.getSession().getConfigurationFromNode(monitor); + } catch (ExecutionException e) { + errorString.append(Messages.TraceControl_ListSessionFailure); + errorString.append(": "); //$NON-NLS-1$ + errorString.append(e.toString()); } - errorString += e.toString() + "\n"; //$NON-NLS-1$ - } - // get session configuration in all cases - try { - fSession.getConfigurationFromNode(monitor); - } catch (ExecutionException e) { - if (errorString == null) { - errorString = new String(); + if (errorString.length() > 0) { + return new Status(Status.ERROR, Activator.PLUGIN_ID, errorString.toString()); } - errorString += Messages.TraceControl_ListSessionFailure + ": " + e.toString(); //$NON-NLS-1$ - } - - if (errorString != null) { - return new Status(Status.ERROR, Activator.PLUGIN_ID, errorString); + return Status.OK_STATUS; } - return Status.OK_STATUS; - } - }; - job.setUser(true); - job.schedule(); - + }; + job.setUser(true); + job.schedule(); + } finally { + fLock.unlock(); + } return null; } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseNodeHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseNodeHandler.java index b22ac58994..fe45ac63cb 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseNodeHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/BaseNodeHandler.java @@ -49,15 +49,23 @@ abstract public class BaseNodeHandler extends BaseControlViewHandler { return false; } - fTargetNode = null; - + TargetNodeComponent node = null; // Check if the node component is selected ISelection selection = page.getSelection(ControlView.ID); if (selection instanceof StructuredSelection) { Object element = ((StructuredSelection) selection).getFirstElement(); - fTargetNode = (element instanceof TargetNodeComponent) ? (TargetNodeComponent) element : null; + node = (element instanceof TargetNodeComponent) ? (TargetNodeComponent) element : null; } - return fTargetNode != null; + boolean isEnabled = node != null; + fLock.lock(); + try { + if (isEnabled) { + fTargetNode = node; + } + } finally { + fLock.unlock(); + } + return isEnabled; } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeChannelStateHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeChannelStateHandler.java index d18afee822..9a8545be42 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeChannelStateHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeChannelStateHandler.java @@ -46,21 +46,9 @@ abstract public class ChangeChannelStateHandler extends BaseControlViewHandler { // Attributes // ------------------------------------------------------------------------ /** - * Kernel domain component reference. + * The command execution parameter. */ - protected TraceDomainComponent fKernelDomain = null; - /** - * UST domain component reference. - */ - protected TraceDomainComponent fUstDomain = null; - /** - * The list of kernel channel components the command is to be executed on. - */ - protected List fKernelChannels = new ArrayList(); - /** - * The list of UST channel components the command is to be executed on. - */ - protected List fUstChannels = new ArrayList(); + protected Parameter fParam; // ------------------------------------------------------------------------ // Accessors @@ -89,74 +77,86 @@ abstract public class ChangeChannelStateHandler extends BaseControlViewHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + fLock.lock(); + try { + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window == null) { - return false; - } + if (window == null) { + return false; + } - Job job = new Job(Messages.TraceControl_ChangeChannelStateJob) { - @Override - protected IStatus run(IProgressMonitor monitor) { - String errorString = null; - - TraceSessionComponent session = null; - - try { - if (fKernelDomain != null) { - session = (TraceSessionComponent)fKernelDomain.getParent(); - List channelNames = new ArrayList(); - for (Iterator iterator = fKernelChannels.iterator(); iterator.hasNext();) { - // Enable all selected channels which are disabled - TraceChannelComponent channel = (TraceChannelComponent) iterator.next(); - channelNames.add(channel.getName()); - } - - changeState(fKernelDomain, channelNames, monitor); + final Parameter param = new Parameter(fParam); - for (Iterator iterator = fKernelChannels.iterator(); iterator.hasNext();) { - // Enable all selected channels which are disabled - TraceChannelComponent channel = (TraceChannelComponent) iterator.next(); - channel.setState(getNewState()); - } - } + Job job = new Job(Messages.TraceControl_ChangeChannelStateJob) { + @Override + protected IStatus run(IProgressMonitor monitor) { + String errorString = null; - if (fUstDomain != null) { - if (session == null) { - session = (TraceSessionComponent)fUstDomain.getParent(); - } + TraceSessionComponent session = null; + + try { + TraceDomainComponent kernelDomain = param.getKernelDomain(); + List kernelChannels = param.getKernelChannels(); + + if (kernelDomain != null) { + session = (TraceSessionComponent)kernelDomain.getParent(); + List channelNames = new ArrayList(); + for (Iterator iterator = kernelChannels.iterator(); iterator.hasNext();) { + // Enable all selected channels which are disabled + TraceChannelComponent channel = (TraceChannelComponent) iterator.next(); + channelNames.add(channel.getName()); + } + + changeState(kernelDomain, channelNames, monitor); - List channelNames = new ArrayList(); - for (Iterator iterator = fUstChannels.iterator(); iterator.hasNext();) { - // Enable all selected channels which are disabled - TraceChannelComponent channel = (TraceChannelComponent) iterator.next(); - channelNames.add(channel.getName()); + for (Iterator iterator = kernelChannels.iterator(); iterator.hasNext();) { + // Enable all selected channels which are disabled + TraceChannelComponent channel = (TraceChannelComponent) iterator.next(); + channel.setState(getNewState()); + } } - changeState(fUstDomain, channelNames, monitor); - - for (Iterator iterator = fUstChannels.iterator(); iterator.hasNext();) { - // Enable all selected channels which are disabled - TraceChannelComponent channel = (TraceChannelComponent) iterator.next(); - channel.setState(getNewState()); + TraceDomainComponent ustDomain = param.getUstDomain(); + List ustChannels = param.getUstChannels(); + if (ustDomain != null) { + if (session == null) { + session = (TraceSessionComponent)ustDomain.getParent(); + } + + List channelNames = new ArrayList(); + for (Iterator iterator = ustChannels.iterator(); iterator.hasNext();) { + // Enable all selected channels which are disabled + TraceChannelComponent channel = (TraceChannelComponent) iterator.next(); + channelNames.add(channel.getName()); + } + + changeState(ustDomain, channelNames, monitor); + + for (Iterator iterator = ustChannels.iterator(); iterator.hasNext();) { + // Enable all selected channels which are disabled + TraceChannelComponent channel = (TraceChannelComponent) iterator.next(); + channel.setState(getNewState()); + } } + } catch (ExecutionException e) { + errorString = e.toString() + "\n"; //$NON-NLS-1$ } - } catch (ExecutionException e) { - errorString = e.toString() + "\n"; //$NON-NLS-1$ - } - // In all cases notify listeners - session.fireComponentChanged(session); + // In all cases notify listeners + session.fireComponentChanged(session); - if (errorString != null) { - return new Status(Status.ERROR, Activator.PLUGIN_ID, errorString); - } + if (errorString != null) { + return new Status(Status.ERROR, Activator.PLUGIN_ID, errorString); + } - return Status.OK_STATUS; - } - }; - job.setUser(true); - job.schedule(); + return Status.OK_STATUS; + } + }; + job.setUser(true); + job.schedule(); + } finally { + fLock.unlock(); + } return null; } @@ -167,13 +167,17 @@ abstract public class ChangeChannelStateHandler extends BaseControlViewHandler { */ @Override public boolean isEnabled() { - reset(); // Get workbench page for the Control View IWorkbenchPage page = getWorkbenchPage(); if (page == null) { return false; } + + TraceDomainComponent kernelDomain = null; + TraceDomainComponent ustDomain = null; + List kernelChannels = new ArrayList(); + List ustChannels = new ArrayList(); // Check if one or more session are selected ISelection selection = page.getSelection(ControlView.ID); @@ -193,36 +197,112 @@ abstract public class ChangeChannelStateHandler extends BaseControlViewHandler { // Enable command only for channels of same session if (!sessionName.equals(channel.getSessionName())) { - reset(); + kernelChannels.clear(); + ustChannels.clear(); break; } if ((channel.getState() != getNewState())) { if (channel.isKernel()) { - fKernelChannels.add(channel); - if (fKernelDomain == null) { - fKernelDomain = (TraceDomainComponent) channel.getParent(); + kernelChannels.add(channel); + if (kernelDomain == null) { + kernelDomain = (TraceDomainComponent) channel.getParent(); } } else { - fUstChannels.add(channel); - if (fUstDomain == null) { - fUstDomain = (TraceDomainComponent) channel.getParent(); + ustChannels.add(channel); + if (ustDomain == null) { + ustDomain = (TraceDomainComponent) channel.getParent(); } } } } } } - return fKernelChannels.size() + fUstChannels.size() > 0; + + boolean isEnabled = (!kernelChannels.isEmpty() || !ustChannels.isEmpty()); + fLock.lock(); + try { + if (isEnabled) { + fParam = new Parameter(kernelDomain, ustDomain, kernelChannels, ustChannels); + } + } finally { + fLock.unlock(); + } + + return isEnabled; } - + /** - * Reset members + * Class containing parameter for the command execution. */ - private void reset() { - fKernelDomain = null; - fUstDomain = null; - fKernelChannels.clear(); - fUstChannels.clear(); + static protected class Parameter { + /** + * Kernel domain component reference. + */ + final protected TraceDomainComponent fKernelDomain; + /** + * UST domain component reference. + */ + final protected TraceDomainComponent fUstDomain; + /** + * The list of kernel channel components the command is to be executed on. + */ + final protected List fKernelChannels; + /** + * The list of UST channel components the command is to be executed on. + */ + final protected List fUstChannels; + + /** + * Constructor + * @param kernelDomain - a kernel domain component + * @param ustDomain - a UST domain component + * @param kernelChannels - list of available kernel channels + * @param ustChannels - list of available UST channels + */ + public Parameter(TraceDomainComponent kernelDomain, TraceDomainComponent ustDomain, List kernelChannels, List ustChannels) { + fKernelDomain = kernelDomain; + fUstDomain = ustDomain; + fKernelChannels = new ArrayList(); + fKernelChannels.addAll(kernelChannels); + fUstChannels = new ArrayList(); + fUstChannels.addAll(ustChannels); + } + + /** + * Copy constructor + * @param other a parameter to copy + */ + public Parameter(Parameter other) { + this(other.fKernelDomain, other.fUstDomain, other.fKernelChannels, other.fUstChannels); + } + + /** + * @return the kernel domain component. + */ + public TraceDomainComponent getKernelDomain() { + return fKernelDomain; + } + + /** + * @return the UST domain component. + */ + public TraceDomainComponent getUstDomain() { + return fUstDomain; + } + + /** + * @return the list of kernel channel components. + */ + public List getKernelChannels() { + return fKernelChannels; + } + + /** + * @return the list of UST channel components. + */ + public List getUstChannels() { + return fUstChannels; + } } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeEventStateHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeEventStateHandler.java index b0647a4a6d..28c7c86bda 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeEventStateHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeEventStateHandler.java @@ -46,13 +46,9 @@ abstract public class ChangeEventStateHandler extends BaseControlViewHandler { // Attributes // ------------------------------------------------------------------------ /** - * Channel component reference. + * The command execution parameter. */ - protected TraceChannelComponent fChannel = null; - /** - * The list of kernel channel components the command is to be executed on. - */ - protected List fEvents = new ArrayList(); + protected Parameter fParam; // ------------------------------------------------------------------------ // Accessors @@ -87,60 +83,72 @@ abstract public class ChangeEventStateHandler extends BaseControlViewHandler { return false; } - Job job = new Job(Messages.TraceControl_ChangeChannelStateJob) { - @Override - protected IStatus run(IProgressMonitor monitor) { - String errorString = null; - - TraceSessionComponent session = null; - - try { - boolean isAll = false; - if (fChannel != null) { - session = fChannel.getSession(); - List eventNames = new ArrayList(); - for (Iterator iterator = fEvents.iterator(); iterator.hasNext();) { - // Enable/disable all selected channels which are disabled - TraceEventComponent event = (TraceEventComponent) iterator.next(); + fLock.lock(); + try { + + final Parameter param = new Parameter(fParam); + + Job job = new Job(Messages.TraceControl_ChangeChannelStateJob) { + @Override + protected IStatus run(IProgressMonitor monitor) { + StringBuffer errorString = new StringBuffer(); + + TraceSessionComponent session = null; + + try { + boolean isAll = false; + if (param.getChannel() != null) { + session = param.getChannel().getSession(); + List eventNames = new ArrayList(); + List events = param.getEvents(); - // Workaround for wildcard handling in lttng-tools - if ("*".equals(event.getName())) { //$NON-NLS-1$ - isAll = true; - } else { - eventNames.add(event.getName()); + for (Iterator iterator = events.iterator(); iterator.hasNext();) { + // Enable/disable all selected channels which are disabled + TraceEventComponent event = (TraceEventComponent) iterator.next(); + + // Workaround for wildcard handling in lttng-tools + if ("*".equals(event.getName())) { //$NON-NLS-1$ + isAll = true; + } else { + eventNames.add(event.getName()); + } + } + if (isAll) { + changeState(param.getChannel(), null, monitor); } - } - if (isAll) { - changeState(fChannel, null, monitor); - } - if (eventNames.size() > 0) { - changeState(fChannel, eventNames, monitor); - } + if (!eventNames.isEmpty()) { + changeState(param.getChannel(), eventNames, monitor); + } - for (Iterator iterator = fEvents.iterator(); iterator.hasNext();) { - // Enable all selected channels which are disabled - TraceEventComponent ev = (TraceEventComponent) iterator.next(); - ev.setState(getNewState()); + for (Iterator iterator = events.iterator(); iterator.hasNext();) { + // Enable all selected channels which are disabled + TraceEventComponent ev = (TraceEventComponent) iterator.next(); + ev.setState(getNewState()); + } } + } catch (ExecutionException e) { + errorString.append(e.toString()); + errorString.append('\n'); } - } catch (ExecutionException e) { - errorString = e.toString() + "\n"; //$NON-NLS-1$ - } - - // In all cases notify listeners - session.fireComponentChanged(session); - if (errorString != null) { - return new Status(Status.ERROR, Activator.PLUGIN_ID, errorString); - } + if (session != null) { + // In all cases notify listeners + session.fireComponentChanged(session); + } - return Status.OK_STATUS; - } - }; - job.setUser(true); - job.schedule(); + if (errorString.length() > 0) { + return new Status(Status.ERROR, Activator.PLUGIN_ID, errorString.toString()); + } + return Status.OK_STATUS; + } + }; + job.setUser(true); + job.schedule(); + } finally { + fLock.unlock(); + } return null; } @@ -156,10 +164,12 @@ abstract public class ChangeEventStateHandler extends BaseControlViewHandler { return false; } - reset(); - // Check if one or more session are selected ISelection selection = page.getSelection(ControlView.ID); + + TraceChannelComponent channel = null; + List events = new ArrayList(); + if (selection instanceof StructuredSelection) { StructuredSelection structered = ((StructuredSelection) selection); String sessionName = null; @@ -175,8 +185,8 @@ abstract public class ChangeEventStateHandler extends BaseControlViewHandler { sessionName = String.valueOf(event.getSessionName()); } - if (fChannel == null) { - fChannel = (TraceChannelComponent)event.getParent(); + if (channel == null) { + channel = (TraceChannelComponent)event.getParent(); } if (channelName == null) { @@ -186,25 +196,69 @@ abstract public class ChangeEventStateHandler extends BaseControlViewHandler { // Enable command only for events of same session, same channel and domain if ((!sessionName.equals(event.getSessionName())) || (!channelName.equals(event.getChannelName())) || - (fChannel.isKernel() != event.isKernel())) { - reset(); + (channel.isKernel() != event.isKernel())) { + events.clear(); break; } if ((event.getState() != getNewState())) { - fEvents.add(event); + events.add(event); } } } } - return fEvents.size() > 0; + boolean isEnabled = !events.isEmpty(); + + fLock.lock(); + try { + fParam = null; + if (isEnabled) { + fParam = new Parameter(channel, events); + } + } finally { + fLock.unlock(); + } + return isEnabled; } /** - * Reset members + * Class containing parameter for the command execution. */ - private void reset() { - fChannel = null; - fEvents.clear(); + protected class Parameter { + /** + * Channel component reference. + */ + final private TraceChannelComponent fChannel; + /** + * The list of kernel channel components the command is to be executed on. + */ + final private List fEvents = new ArrayList(); + + public Parameter(TraceChannelComponent channel, List events) { + fChannel = channel; + fEvents.addAll(events); + } + + /** + * Copy constructor + * @param other - a parameter to copy + */ + public Parameter(Parameter other) { + this(other.fChannel, other.fEvents); + } + + /** + * @return the trace channel component. + */ + public TraceChannelComponent getChannel() { + return fChannel; + } + + /** + * @return a list of trace event components. + */ + public List getEvents() { + return fEvents; + } } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeSessionStateHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeSessionStateHandler.java index 6ed94399f9..2065c30a82 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeSessionStateHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChangeSessionStateHandler.java @@ -81,28 +81,37 @@ abstract public class ChangeSessionStateHandler extends BaseControlViewHandler { return false; } - Job job = new Job(Messages.TraceControl_StartSessionJob) { - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - for (Iterator iterator = fSessions.iterator(); iterator.hasNext();) { + fLock.lock(); + try { + + final List sessions = new ArrayList(); + sessions.addAll(fSessions); - // Start all selected sessions - TraceSessionComponent session = (TraceSessionComponent) iterator.next(); - changeState(session, monitor); + Job job = new Job(Messages.TraceControl_StartSessionJob) { + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + for (Iterator iterator = sessions.iterator(); iterator.hasNext();) { - // Set Session state - session.setSessionState(getNewState()); - session.fireComponentChanged(session); - } - } catch (ExecutionException e) { - return new Status(Status.ERROR, Activator.PLUGIN_ID, e.toString()); - } - return Status.OK_STATUS; - } - }; - job.setUser(true); - job.schedule(); + // Start all selected sessions + TraceSessionComponent session = (TraceSessionComponent) iterator.next(); + changeState(session, monitor); + + // Set Session state + session.setSessionState(getNewState()); + session.fireComponentChanged(session); + } + } catch (ExecutionException e) { + return new Status(Status.ERROR, Activator.PLUGIN_ID, e.toString()); + } + return Status.OK_STATUS; + } + }; + job.setUser(true); + job.schedule(); + } finally { + fLock.unlock(); + } return null; } @@ -118,7 +127,7 @@ abstract public class ChangeSessionStateHandler extends BaseControlViewHandler { return false; } - fSessions.clear(); + List sessions = new ArrayList(0); // Check if one or more session are selected ISelection selection = page.getSelection(ControlView.ID); @@ -130,11 +139,21 @@ abstract public class ChangeSessionStateHandler extends BaseControlViewHandler { // Add only TraceSessionComponents that are inactive and not destroyed TraceSessionComponent session = (TraceSessionComponent) element; if ((session.getSessionState() != getNewState()) && (!session.isDestroyed())) { - fSessions.add((TraceSessionComponent)element); + sessions.add(session); } } } } - return fSessions.size() > 0; + boolean isEnabled = !sessions.isEmpty(); + fLock.lock(); + try { + fSessions = null; + if (isEnabled) { + fSessions = sessions; + } + } finally { + fLock.unlock(); + } + return isEnabled; } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChannelCommandParameter.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChannelCommandParameter.java new file mode 100644 index 0000000000..b08b4adaca --- /dev/null +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ChannelCommandParameter.java @@ -0,0 +1,68 @@ +/********************************************************************** + * 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.internal.lttng2.ui.views.control.handlers; + +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceChannelComponent; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceSessionComponent; + +/** + * Class containing parameter for the command execution. + */ +public class ChannelCommandParameter extends CommandParameter implements Cloneable { + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + + private TraceChannelComponent fChannel; + + + // ------------------------------------------------------------------------ + // Constructors + // ------------------------------------------------------------------------ + + /** + * Constructor + * @param session - a trace session component. + * @param channel - a trace channel component + */ + public ChannelCommandParameter(TraceSessionComponent session, TraceChannelComponent channel) { + super(session); + fChannel = channel; + } + + // ------------------------------------------------------------------------ + // Accessors + // ------------------------------------------------------------------------ + + /** + * @return the trace channel component + */ + public TraceChannelComponent getChannel() { + return fChannel; + } + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + + /* + * (non-Javadoc) + * @see java.lang.Object#clone() + */ + @Override + public ChannelCommandParameter clone() { + ChannelCommandParameter clone = (ChannelCommandParameter) super.clone(); + clone.fChannel = fChannel; + return clone; + } +} \ No newline at end of file diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CommandParameter.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CommandParameter.java new file mode 100644 index 0000000000..ccfb7c84e0 --- /dev/null +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CommandParameter.java @@ -0,0 +1,71 @@ +/********************************************************************** + * 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.internal.lttng2.ui.views.control.handlers; + +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceSessionComponent; + +/** + * Class containing parameter for the command execution. + */ +public class CommandParameter implements Cloneable { + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + + /** + * The trace session component. + */ + private TraceSessionComponent fSession; + + // ------------------------------------------------------------------------ + // Constructors + // ------------------------------------------------------------------------ + + /** + * Constructor + * @param session a trace session component. + */ + public CommandParameter(TraceSessionComponent session) { + fSession = session; + } + + // ------------------------------------------------------------------------ + // Accessors + // ------------------------------------------------------------------------ + + /** + * @return the session component. + */ + public TraceSessionComponent getSession() { + return fSession; + } + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + + /* + * (non-Javadoc) + * @see java.lang.Object#clone() + */ + @Override + public CommandParameter clone() { + CommandParameter clone = null; + try { + clone = (CommandParameter) super.clone(); + clone.fSession = fSession; + } catch (CloneNotSupportedException e) { + } + return clone; + } +} \ No newline at end of file diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ConnectHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ConnectHandler.java index 6a7794e40a..9bede57a2e 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ConnectHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/ConnectHandler.java @@ -33,7 +33,12 @@ public class ConnectHandler extends BaseNodeHandler { */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { - fTargetNode.connect(); + fLock.lock(); + try { + fTargetNode.connect(); + } finally { + fLock.unlock(); + } return null; } @@ -43,6 +48,13 @@ public class ConnectHandler extends BaseNodeHandler { */ @Override public boolean isEnabled() { - return (super.isEnabled() && (fTargetNode.getTargetNodeState() == TargetNodeState.DISCONNECTED)); + boolean isEnabled = false; + fLock.lock(); + try { + isEnabled = (super.isEnabled() && (fTargetNode.getTargetNodeState() == TargetNodeState.DISCONNECTED)); + } finally { + fLock.unlock(); + } + return isEnabled; } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateChannelOnDomainHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateChannelOnDomainHandler.java index b7d5c537ac..56b51c10bf 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateChannelOnDomainHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateChannelOnDomainHandler.java @@ -11,24 +11,15 @@ **********************************************************************/ package org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers; -import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.window.Window; -import org.eclipse.linuxtools.internal.lttng2.ui.Activator; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.ControlView; -import org.eclipse.linuxtools.internal.lttng2.ui.views.control.Messages; -import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateChannelDialog; -import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.TraceControlDialogFactory; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IChannelInfo; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.TraceSessionState; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceDomainComponent; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceSessionComponent; @@ -40,71 +31,35 @@ import org.eclipse.ui.IWorkbenchPage; * Command handler implementation to create a trace channel for known domain. *

*/ -public class CreateChannelOnDomainHandler extends BaseControlViewHandler { +public class CreateChannelOnDomainHandler extends BaseCreateChannelHandler { // ------------------------------------------------------------------------ // Attributes // ------------------------------------------------------------------------ - /** - * The the domain component the command is to be executed on. - */ - private TraceDomainComponent fDomain; // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ /* * (non-Javadoc) - * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseCreateChannelHandler#enableChannel(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, java.util.List, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IChannelInfo, boolean, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - - // Get channel information from user - final ICreateChannelDialog dialog = TraceControlDialogFactory.getInstance().getCreateChannelDialog(); - dialog.setDomainComponent(fDomain); - - if (dialog.open() != Window.OK) { - return null; + public void enableChannel(CommandParameter param, List channelNames, IChannelInfo info, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { + if (param instanceof DomainCommandParameter) { + ((DomainCommandParameter)param).getDomain().enableChannels(channelNames, info, monitor); + } + } + + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseCreateChannelHandler#getDomain(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter) + */ + @Override + public TraceDomainComponent getDomain(CommandParameter param) { + if (param instanceof DomainCommandParameter) { + return ((DomainCommandParameter)param).getDomain(); } - - Job job = new Job(Messages.TraceControl_ChangeChannelStateJob) { - @Override - protected IStatus run(IProgressMonitor monitor) { - String errorString = null; - - List channelNames = new ArrayList(); - channelNames.add(dialog.getChannelInfo().getName()); - - try { - fDomain.enableChannels(channelNames, dialog.getChannelInfo(), monitor); - } catch (ExecutionException e) { - if (errorString == null) { - errorString = new String(); - } - errorString += e.toString() + "\n"; //$NON-NLS-1$ - } - - // get session configuration in all cases - try { - fDomain.getConfigurationFromNode(monitor); - } catch (ExecutionException e) { - if (errorString == null) { - errorString = new String(); - } - errorString += Messages.TraceControl_ListSessionFailure + ": " + e.toString(); //$NON-NLS-1$ - } - - if (errorString != null) { - return new Status(Status.ERROR, Activator.PLUGIN_ID, errorString); - } - return Status.OK_STATUS; - } - }; - - job.setUser(true); - job.schedule(); - return null; } @@ -120,8 +75,10 @@ public class CreateChannelOnDomainHandler extends BaseControlViewHandler { if (page == null) { return false; } - fDomain = null; - + + TraceDomainComponent domain = null; + TraceSessionComponent session = null; + // Check if one domain is selected ISelection selection = page.getSelection(ControlView.ID); if (selection instanceof StructuredSelection) { @@ -129,15 +86,30 @@ public class CreateChannelOnDomainHandler extends BaseControlViewHandler { for (Iterator iterator = structered.iterator(); iterator.hasNext();) { Object element = (Object) iterator.next(); if (element instanceof TraceDomainComponent) { - TraceDomainComponent domain = (TraceDomainComponent) element; - TraceSessionComponent session = (TraceSessionComponent) domain.getParent(); + TraceDomainComponent tmpDomain = (TraceDomainComponent) element; + session = (TraceSessionComponent) tmpDomain.getParent(); + // Add only TraceDomainComponent whose TraceSessionComponent parent is inactive and not destroyed if ((session.getSessionState() == TraceSessionState.INACTIVE) && (!session.isDestroyed())) { - fDomain = domain; + domain = tmpDomain; } } } } - return fDomain != null; + + boolean isEnabled = domain != null; + + fLock.lock(); + try { + fParam = null; + if (isEnabled) { + fParam = new DomainCommandParameter(session, domain); + } + } finally { + fLock.unlock(); + } + + return isEnabled; } + } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateChannelOnSessionHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateChannelOnSessionHandler.java index a0ab18da03..425d814f9b 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateChannelOnSessionHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateChannelOnSessionHandler.java @@ -11,24 +11,15 @@ **********************************************************************/ package org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers; -import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.window.Window; -import org.eclipse.linuxtools.internal.lttng2.ui.Activator; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.ControlView; -import org.eclipse.linuxtools.internal.lttng2.ui.views.control.Messages; -import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.ICreateChannelOnSessionDialog; -import org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.TraceControlDialogFactory; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IChannelInfo; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.TraceSessionState; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceDomainComponent; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceSessionComponent; @@ -41,73 +32,33 @@ import org.eclipse.ui.IWorkbenchPage; * (on session level). *

*/ -public class CreateChannelOnSessionHandler extends BaseControlViewHandler { +public class CreateChannelOnSessionHandler extends BaseCreateChannelHandler { // ------------------------------------------------------------------------ // Attributes // ------------------------------------------------------------------------ - /** - * The session component the command is to be executed on. + /* + * (non-Javadoc) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseCreateChannelHandler#enableChannel(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, java.util.List, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IChannelInfo, boolean, org.eclipse.core.runtime.IProgressMonitor) */ - private TraceSessionComponent fSession = null; - - // ------------------------------------------------------------------------ - // Operations - // ------------------------------------------------------------------------ + @Override + public void enableChannel(CommandParameter param, List channelNames, IChannelInfo info, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { + param.getSession().enableChannels(channelNames, info, isKernel, monitor); + } + /* * (non-Javadoc) - * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseCreateChannelHandler#getDomain(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter) */ @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - - final ICreateChannelOnSessionDialog dialog = TraceControlDialogFactory.getInstance().getCreateChannelOnSessionDialog(); - - if (dialog.open() != Window.OK) { - return null; - } - - Job job = new Job(Messages.TraceControl_ChangeChannelStateJob) { - @Override - protected IStatus run(IProgressMonitor monitor) { - String errorString = null; - - List channelNames = new ArrayList(); - TraceDomainComponent newDomain = new TraceDomainComponent("dummy", fSession); //$NON-NLS-1$ - channelNames.add(dialog.getChannelInfo().getName()); - newDomain.setIsKernel(dialog.isKernel()); - - try { - newDomain.enableChannels(channelNames, dialog.getChannelInfo(), monitor); - } catch (ExecutionException e) { - if (errorString == null) { - errorString = new String(); - } - errorString += e.toString() + "\n"; //$NON-NLS-1$ - } - - // get session configuration in all cases - try { - fSession.getConfigurationFromNode(monitor); - } catch (ExecutionException e) { - if (errorString == null) { - errorString = new String(); - } - errorString += Messages.TraceControl_ListSessionFailure + ": " + e.toString(); //$NON-NLS-1$ - } - - if (errorString != null) { - return new Status(Status.ERROR, Activator.PLUGIN_ID, errorString); - } - return Status.OK_STATUS; - } - }; - job.setUser(true); - job.schedule(); - + public TraceDomainComponent getDomain(CommandParameter param) { return null; } + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + /* * (non-Javadoc) * @see org.eclipse.core.commands.AbstractHandler#isEnabled() @@ -120,8 +71,7 @@ public class CreateChannelOnSessionHandler extends BaseControlViewHandler { return false; } - fSession = null; - + TraceSessionComponent session = null; // Check if one session is selected ISelection selection = page.getSelection(ControlView.ID); if (selection instanceof StructuredSelection) { @@ -130,13 +80,25 @@ public class CreateChannelOnSessionHandler extends BaseControlViewHandler { Object element = (Object) iterator.next(); if (element instanceof TraceSessionComponent) { // Add only TraceSessionComponents that are inactive and not destroyed - TraceSessionComponent session = (TraceSessionComponent) element; - if ((session.getSessionState() == TraceSessionState.INACTIVE) && (!session.isDestroyed())) { - fSession = session; + TraceSessionComponent tmpSession = (TraceSessionComponent) element; + if ((tmpSession.getSessionState() == TraceSessionState.INACTIVE) && (!tmpSession.isDestroyed())) { + session = tmpSession; } } } } - return fSession != null; + boolean isEnabled = session != null; + + fLock.lock(); + try { + fParam = null; + if (isEnabled) { + fParam = new CommandParameter(session); + } + } finally { + fLock.unlock(); + } + + return isEnabled; } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateSessionHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateSessionHandler.java index f7756f11d7..08eb91621d 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateSessionHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/CreateSessionHandler.java @@ -54,31 +54,37 @@ public class CreateSessionHandler extends BaseControlViewHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { - // Open dialog box for the node name and address - ICreateSessionDialog dialog = TraceControlDialogFactory.getInstance().getCreateSessionDialog(); - dialog.setTraceSessionGroup(fSessionGroup); + fLock.lock(); + try { + final TraceSessionGroup sessionGroup = fSessionGroup; + + // Open dialog box for the node name and address + ICreateSessionDialog dialog = TraceControlDialogFactory.getInstance().getCreateSessionDialog(); + dialog.setTraceSessionGroup(sessionGroup); - if (dialog.open() != Window.OK) { - return null; - } + if (dialog.open() != Window.OK) { + return null; + } - final String sessionName = dialog.getSessionName(); - final String sessionPath = dialog.isDefaultSessionPath() ? null : dialog.getSessionPath(); + final String sessionName = dialog.getSessionName(); + final String sessionPath = dialog.isDefaultSessionPath() ? null : dialog.getSessionPath(); - Job job = new Job(Messages.TraceControl_CreateSessionJob) { - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - fSessionGroup.createSession(sessionName, sessionPath, monitor); - } catch (ExecutionException e) { - return new Status(Status.ERROR, Activator.PLUGIN_ID, e.toString()); - } - return Status.OK_STATUS; - } - }; - job.setUser(true); - job.schedule(); - + Job job = new Job(Messages.TraceControl_CreateSessionJob) { + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + sessionGroup.createSession(sessionName, sessionPath, monitor); + } catch (ExecutionException e) { + return new Status(Status.ERROR, Activator.PLUGIN_ID, e.toString()); + } + return Status.OK_STATUS; + } + }; + job.setUser(true); + job.schedule(); + } finally { + fLock.unlock(); + } return null; } @@ -95,14 +101,25 @@ public class CreateSessionHandler extends BaseControlViewHandler { return false; } - fSessionGroup = null; + TraceSessionGroup sessionGroup = null; // Check if the session group project is selected ISelection selection = page.getSelection(ControlView.ID); if (selection instanceof StructuredSelection) { Object element = ((StructuredSelection) selection).getFirstElement(); - fSessionGroup = (element instanceof TraceSessionGroup) ? (TraceSessionGroup) element : null; + sessionGroup = (element instanceof TraceSessionGroup) ? (TraceSessionGroup) element : null; + } + + boolean isEnabled = sessionGroup != null; + fLock.lock(); + try { + fSessionGroup = null; + if(isEnabled) { + fSessionGroup = sessionGroup; + } + } finally { + fLock.unlock(); } - return fSessionGroup != null; + return isEnabled; } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DeleteHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DeleteHandler.java index ffff78ef78..34cbe18791 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DeleteHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DeleteHandler.java @@ -33,9 +33,14 @@ public class DeleteHandler extends BaseNodeHandler { */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { - ITraceControlComponent root = fTargetNode.getParent(); - fTargetNode.removeAllChildren(); - root.removeChild(fTargetNode); + fLock.lock(); + try { + ITraceControlComponent root = fTargetNode.getParent(); + fTargetNode.removeAllChildren(); + root.removeChild(fTargetNode); + } finally { + fLock.unlock(); + } return null; } @@ -45,6 +50,13 @@ public class DeleteHandler extends BaseNodeHandler { */ @Override public boolean isEnabled() { - return (super.isEnabled() && (fTargetNode.getTargetNodeState() == TargetNodeState.DISCONNECTED)); + boolean isEnabled = false; + fLock.lock(); + try { + isEnabled = (super.isEnabled() && (fTargetNode.getTargetNodeState() == TargetNodeState.DISCONNECTED)); + } finally { + fLock.unlock(); + } + return isEnabled; } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DestroySessionHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DestroySessionHandler.java index 99c2cc75e0..e20da5fd53 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DestroySessionHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DestroySessionHandler.java @@ -130,6 +130,6 @@ public class DestroySessionHandler extends BaseControlViewHandler { } } } - return fSessions.size() > 0; + return !fSessions.isEmpty(); } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DisconnectHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DisconnectHandler.java index 25e3cc6e44..4aedb75e9e 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DisconnectHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DisconnectHandler.java @@ -13,6 +13,7 @@ package org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.ITraceControlComponent; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.TargetNodeState; /** @@ -33,7 +34,14 @@ public class DisconnectHandler extends BaseNodeHandler { */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { - fTargetNode.disconnect(); + fLock.lock(); + try { + ITraceControlComponent root = fTargetNode.getParent(); + fTargetNode.disconnect(); + root.removeChild(fTargetNode); + } finally { + fLock.unlock(); + } return null; } @@ -43,6 +51,13 @@ public class DisconnectHandler extends BaseNodeHandler { */ @Override public boolean isEnabled() { - return super.isEnabled() && (fTargetNode.getTargetNodeState() == TargetNodeState.CONNECTED); + boolean isEnabled = false; + fLock.lock(); + try { + isEnabled = super.isEnabled() && (fTargetNode.getTargetNodeState() == TargetNodeState.CONNECTED); + } finally { + fLock.unlock(); + } + return isEnabled; } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DomainCommandParameter.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DomainCommandParameter.java new file mode 100644 index 0000000000..715a23b674 --- /dev/null +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/DomainCommandParameter.java @@ -0,0 +1,68 @@ +/********************************************************************** + * 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.internal.lttng2.ui.views.control.handlers; + +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceDomainComponent; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.impl.TraceSessionComponent; + +/** + * Class containing parameter for the command execution. + */ +public class DomainCommandParameter extends CommandParameter { + + // ------------------------------------------------------------------------ + // Attributes + // ------------------------------------------------------------------------ + + private TraceDomainComponent fDomain; + + + // ------------------------------------------------------------------------ + // Constructors + // ------------------------------------------------------------------------ + + /** + * Constructor + * @param session - a trace session component. + * @param domain - a trace domain component + */ + public DomainCommandParameter(TraceSessionComponent session, TraceDomainComponent domain) { + super(session); + fDomain = domain; + } + + // ------------------------------------------------------------------------ + // Accessors + // ------------------------------------------------------------------------ + + /** + * @return the trace domain component + */ + public TraceDomainComponent getDomain() { + return fDomain; + } + + // ------------------------------------------------------------------------ + // Operations + // ------------------------------------------------------------------------ + + /* + * (non-Javadoc) + * @see java.lang.Object#clone() + */ + @Override + public DomainCommandParameter clone() { + DomainCommandParameter clone = (DomainCommandParameter) super.clone(); + clone.fDomain = fDomain; + return clone; + } +} \ No newline at end of file diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnChannelHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnChannelHandler.java index 596e19371d..1d714e81c2 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnChannelHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnChannelHandler.java @@ -38,57 +38,64 @@ public class EnableEventOnChannelHandler extends BaseEnableEventHandler { // ------------------------------------------------------------------------ // Attributes // ------------------------------------------------------------------------ - /** - * The channel component the command is to be executed on. - */ - private TraceChannelComponent fChannel = null; // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, boolean, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, java.util.List, boolean, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void enableEvents(List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { - fChannel.enableEvents(eventNames, monitor); + public void enableEvents(CommandParameter param, List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { + if (param instanceof ChannelCommandParameter) { + ((ChannelCommandParameter)param).getChannel().enableEvents(eventNames, monitor); + } } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { - fChannel.enableSyscalls(monitor); + public void enableSyscalls(CommandParameter param, IProgressMonitor monitor) throws ExecutionException { + if (param instanceof ChannelCommandParameter) { + ((ChannelCommandParameter)param).getChannel().enableSyscalls(monitor); + } } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableProbe(java.lang.String, boolean, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableProbe(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, java.lang.String, boolean, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void enableProbe(String eventName, boolean isFunction, String probe, IProgressMonitor monitor) throws ExecutionException { - fChannel.enableProbe(eventName, isFunction, probe, monitor); + public void enableProbe(CommandParameter param, String eventName, boolean isFunction, String probe, IProgressMonitor monitor) throws ExecutionException { + if (param instanceof ChannelCommandParameter) { + ((ChannelCommandParameter)param).getChannel().enableProbe(eventName, isFunction, probe, monitor); + } } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableLogLevel(java.lang.String, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.LogLevelType, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.TraceLogLevel, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableLogLevel(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, java.lang.String, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.LogLevelType, org.eclipse.linuxtools.internal.lttng2.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); + public void enableLogLevel(CommandParameter param, String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException { + if (param instanceof ChannelCommandParameter) { + ((ChannelCommandParameter)param).getChannel().enableLogLevel(eventName, logLevelType, level, monitor); + } } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#getDomain() + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#getDomain(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter) */ @Override - public TraceDomainComponent getDomain() { - return (TraceDomainComponent) fChannel.getParent(); + public TraceDomainComponent getDomain(CommandParameter param) { + if (param instanceof ChannelCommandParameter) { + return (TraceDomainComponent) ((ChannelCommandParameter)param).getChannel().getParent(); + } + return null; } /* @@ -103,7 +110,8 @@ public class EnableEventOnChannelHandler extends BaseEnableEventHandler { return false; } - fChannel = null; + TraceChannelComponent channel = null; + TraceSessionComponent session = null; ISelection selection = page.getSelection(ControlView.ID); if (selection instanceof StructuredSelection) { StructuredSelection structered = ((StructuredSelection) selection); @@ -111,16 +119,26 @@ public class EnableEventOnChannelHandler extends BaseEnableEventHandler { Object element = (Object) iterator.next(); if (element instanceof TraceChannelComponent) { // Add only if corresponding TraceSessionComponents is inactive and not destroyed - TraceChannelComponent channel = (TraceChannelComponent) element; - TraceSessionComponent session = channel.getSession(); + TraceChannelComponent tmpChannel = (TraceChannelComponent) element; + session = tmpChannel.getSession(); if(session.getSessionState() == TraceSessionState.INACTIVE && !session.isDestroyed()) { - fChannel = channel; - fSession = session; + channel = tmpChannel; } } } } - return fChannel != null; + + boolean isEnabled = (channel != null); + fLock.lock(); + try { + fParam = null; + if(isEnabled) { + fParam = new ChannelCommandParameter(session, channel); + } + } finally { + fLock.unlock(); + } + return isEnabled; } - } + diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnDomainHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnDomainHandler.java index b01a7b0f8c..17d0355521 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnDomainHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnDomainHandler.java @@ -38,58 +38,66 @@ public class EnableEventOnDomainHandler extends BaseEnableEventHandler { // ------------------------------------------------------------------------ // Attributes // ------------------------------------------------------------------------ - /** - * The domain component the command is to be executed on. - */ - private TraceDomainComponent fDomain = null; // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, boolean, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, java.util.List, boolean, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void enableEvents(List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { - fDomain.enableEvents(eventNames, monitor); + public void enableEvents(CommandParameter param, List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { + if (param instanceof DomainCommandParameter) { + ((DomainCommandParameter)param).getDomain().enableEvents(eventNames, monitor); + } } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { - fDomain.enableSyscalls(monitor); + public void enableSyscalls(CommandParameter param, IProgressMonitor monitor) throws ExecutionException { + if (param instanceof DomainCommandParameter) { + ((DomainCommandParameter)param).getDomain().enableSyscalls(monitor); + } } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableProbe(java.lang.String, boolean, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableProbe(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, java.lang.String, boolean, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void enableProbe(String eventName, boolean isFunction, String probe, IProgressMonitor monitor) throws ExecutionException { - fDomain.enableProbe(eventName, isFunction, probe, monitor); + public void enableProbe(CommandParameter param, String eventName, boolean isFunction, String probe, IProgressMonitor monitor) throws ExecutionException { + if (param instanceof DomainCommandParameter) { + ((DomainCommandParameter)param).getDomain().enableProbe(eventName, isFunction, probe, monitor); + } } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableLogLevel(java.lang.String, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.LogLevelType, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.TraceLogLevel, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableLogLevel(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, java.lang.String, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.LogLevelType, org.eclipse.linuxtools.internal.lttng2.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); + public void enableLogLevel(CommandParameter param, String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException { + if (param instanceof DomainCommandParameter) { + ((DomainCommandParameter)param).getDomain().enableLogLevel(eventName, logLevelType, level, monitor); + } } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#getDomain() + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#getDomain(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter) */ @Override - public TraceDomainComponent getDomain() { - return fDomain; + public TraceDomainComponent getDomain(CommandParameter param) { + if (param instanceof DomainCommandParameter) { + return ((DomainCommandParameter)param).getDomain(); + } + return null; } + /* * (non-Javadoc) * @see org.eclipse.core.commands.AbstractHandler#isEnabled() @@ -102,7 +110,8 @@ public class EnableEventOnDomainHandler extends BaseEnableEventHandler { return false; } - fDomain = null; + TraceDomainComponent domain = null; + TraceSessionComponent session = null; ISelection selection = page.getSelection(ControlView.ID); if (selection instanceof StructuredSelection) { StructuredSelection structered = ((StructuredSelection) selection); @@ -110,15 +119,25 @@ public class EnableEventOnDomainHandler extends BaseEnableEventHandler { Object element = (Object) iterator.next(); if (element instanceof TraceDomainComponent) { // Add only if corresponding TraceSessionComponents is inactive and not destroyed - TraceDomainComponent domain = (TraceDomainComponent) element; - TraceSessionComponent session = domain.getSession(); + TraceDomainComponent tmpDomain = (TraceDomainComponent) element; + session = tmpDomain.getSession(); if(session.getSessionState() == TraceSessionState.INACTIVE && !session.isDestroyed()) { - fDomain = domain; - fSession = session; + domain = tmpDomain; } } } } - return fDomain != null; + + boolean isEnabled = (domain != null); + fLock.lock(); + try { + fParam = null; + if(isEnabled) { + fParam = new DomainCommandParameter(session, domain); + } + } finally { + fLock.unlock(); + } + return isEnabled; } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnSessionHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnSessionHandler.java index 5aa9deb84a..ba455db82f 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnSessionHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/EnableEventOnSessionHandler.java @@ -44,47 +44,47 @@ public class EnableEventOnSessionHandler extends BaseEnableEventHandler { // ------------------------------------------------------------------------ /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(java.util.List, boolean, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableEvents(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, java.util.List, boolean, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void enableEvents(List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { - fSession.enableEvents(eventNames, isKernel, monitor); + public void enableEvents(CommandParameter param, List eventNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { + param.getSession().enableEvents(eventNames, isKernel, monitor); } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableSyscalls(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void enableSyscalls(IProgressMonitor monitor) throws ExecutionException { - fSession.enableSyscalls(monitor); + public void enableSyscalls(CommandParameter param, IProgressMonitor monitor) throws ExecutionException { + param.getSession().enableSyscalls(monitor); } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableProbe(java.lang.String, boolean, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableProbe(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, java.lang.String, boolean, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) */ @Override - public void enableProbe(String eventName, boolean isFunction, String probe, IProgressMonitor monitor) throws ExecutionException { - fSession.enableProbe(eventName, isFunction, probe, monitor); + public void enableProbe(CommandParameter param, String eventName, boolean isFunction, String probe, IProgressMonitor monitor) throws ExecutionException { + param.getSession().enableProbe(eventName, isFunction, probe, monitor); } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableLogLevel(java.lang.String, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.LogLevelType, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.TraceLogLevel, org.eclipse.core.runtime.IProgressMonitor) + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#enableLogLevel(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter, java.lang.String, org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.LogLevelType, org.eclipse.linuxtools.internal.lttng2.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); + public void enableLogLevel(CommandParameter param, String eventName, LogLevelType logLevelType, TraceLogLevel level, IProgressMonitor monitor) throws ExecutionException { + param.getSession().enableLogLevel(eventName, logLevelType, level, monitor); } /* * (non-Javadoc) - * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#getDomain() + * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.BaseEnableEventHandler#getDomain(org.eclipse.linuxtools.internal.lttng2.ui.views.control.handlers.CommandParameter) */ @Override - public TraceDomainComponent getDomain() { + public TraceDomainComponent getDomain(CommandParameter param) { return null; } @@ -100,8 +100,7 @@ public class EnableEventOnSessionHandler extends BaseEnableEventHandler { return false; } - fSession = null; - + TraceSessionComponent session = null; // Check if one session is selected ISelection selection = page.getSelection(ControlView.ID); if (selection instanceof StructuredSelection) { @@ -110,13 +109,23 @@ public class EnableEventOnSessionHandler extends BaseEnableEventHandler { Object element = (Object) iterator.next(); if (element instanceof TraceSessionComponent) { // Add only if corresponding TraceSessionComponents is inactive and not destroyed - TraceSessionComponent session = (TraceSessionComponent) element; - if(session.getSessionState() == TraceSessionState.INACTIVE && !session.isDestroyed()) { - fSession = session; + TraceSessionComponent tmpSession = (TraceSessionComponent) element; + if(tmpSession.getSessionState() == TraceSessionState.INACTIVE && !tmpSession.isDestroyed()) { + session = tmpSession; } } } } - return fSession != null; + boolean isEnabled = (session != null); + fLock.lock(); + try { + fParam = null; + if(isEnabled) { + fParam = new CommandParameter(session); + } + } finally { + fLock.unlock(); + } + return isEnabled; } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/NewConnectionHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/NewConnectionHandler.java index f635102a35..0f898eb3c0 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/NewConnectionHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/NewConnectionHandler.java @@ -114,19 +114,24 @@ public class NewConnectionHandler extends BaseControlViewHandler { return null; } } - + if (host != null) { - // successful creation of host - TargetNodeComponent node = null; - if (!fRoot.containsChild(hostName)) { - node = new TargetNodeComponent(hostName, fRoot, host); - fRoot.addChild(node); - } - else { - node = (TargetNodeComponent)fRoot.getChild(hostName); + fLock.lock(); + try { + // successful creation of host + TargetNodeComponent node = null; + if (!fRoot.containsChild(hostName)) { + node = new TargetNodeComponent(hostName, fRoot, host); + fRoot.addChild(node); + } + else { + node = (TargetNodeComponent)fRoot.getChild(hostName); + } + + node.connect(); + } finally { + fLock.unlock(); } - - node.connect(); } return null; } @@ -145,12 +150,24 @@ public class NewConnectionHandler extends BaseControlViewHandler { return false; } - fRoot = null; + ITraceControlComponent root = null; // no need to verify part because it has been already done in getWorkbenchPage() IWorkbenchPart part = page.getActivePart(); - fRoot = ((ControlView) part).getTraceControlRoot(); + root = ((ControlView) part).getTraceControlRoot(); + + boolean isEnabled = root != null; + + fLock.lock(); + try { + fRoot = null; + if (isEnabled) { + fRoot = root; + } + } finally { + fLock.unlock(); + } - return (fRoot != null); + return isEnabled; } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/RefreshHandler.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/RefreshHandler.java index 2a477972ba..ab6eae01d3 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/RefreshHandler.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/handlers/RefreshHandler.java @@ -49,7 +49,12 @@ public class RefreshHandler extends BaseControlViewHandler { */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { - fNode.refresh(); + fLock.lock(); + try { + fNode.refresh(); + } finally { + fLock.unlock(); + } return null; } @@ -59,7 +64,6 @@ public class RefreshHandler extends BaseControlViewHandler { */ @Override public boolean isEnabled() { - fNode = null; // Get workbench page for the Control View IWorkbenchPage page = getWorkbenchPage(); @@ -67,6 +71,7 @@ public class RefreshHandler extends BaseControlViewHandler { return false; } + TargetNodeComponent node = null; // Check if one or more session are selected ISelection selection = page.getSelection(ControlView.ID); if (selection instanceof StructuredSelection) { @@ -82,12 +87,25 @@ public class RefreshHandler extends BaseControlViewHandler { component = (TraceControlComponent) component.getParent(); } if (component != null) { - fNode = (TargetNodeComponent) component; + node = (TargetNodeComponent) component; } } } } } - return fNode != null; + + boolean isEnabled = node != null; + + fLock.lock(); + try { + fNode = null; + if (isEnabled) { + fNode = node; + } + } finally { + fLock.unlock(); + } + + return isEnabled; } } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/messages.properties b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/messages.properties index 24a2a96cde..8dc114118f 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/messages.properties +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/messages.properties @@ -103,6 +103,7 @@ TraceControl_EnableEventsLoglevelEventNameTooltip=Event name for enabling log le TraceControl_InvalidProbeNameError=The probe name is invalid TraceControl_InvalidWildcardError=The wild card name is invalid TraceControl_InvalidLogLevelEventNameError=The event name for log level is invalid +TraceControl_InvalidLogLevel=No log level selected # Tree structure strings TraceControl_KernelDomainDisplayName=Kernel diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/BaseEventInfo.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/BaseEventInfo.java index 2f4aa662c8..dd3db48249 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/BaseEventInfo.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/BaseEventInfo.java @@ -175,7 +175,7 @@ public class BaseEventInfo extends TraceInfo implements IBaseEventInfo { } output.append(" (type: "); output.append(fEventType.getInName()); - output.append(")"); + output.append(')'); return output.toString(); } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/ChannelInfo.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/ChannelInfo.java index 549bb31f8d..6d538073f2 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/ChannelInfo.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/ChannelInfo.java @@ -318,7 +318,7 @@ public class ChannelInfo extends TraceInfo implements IChannelInfo { output.append(event.formatString()); } } - output.append("\n"); + output.append('\n'); return output.toString(); } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/DomainInfo.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/DomainInfo.java index 375e960386..33692d9e37 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/DomainInfo.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/DomainInfo.java @@ -139,7 +139,7 @@ public class DomainInfo extends TraceInfo implements IDomainInfo { output.append(channel.formatString()); } } - output.append("\n"); + output.append('\n'); return output.toString(); } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/EventInfo.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/EventInfo.java index 0e7265b5ca..bf88b84098 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/EventInfo.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/EventInfo.java @@ -84,7 +84,7 @@ public class EventInfo extends BaseEventInfo implements IEventInfo { output.append(super.formatString()); output.append(" ["); output.append(fState.getInName()); - output.append("]"); + output.append(']'); return output.toString(); } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/ProbeEventInfo.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/ProbeEventInfo.java index 2cf38dfd3f..551a5d7268 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/ProbeEventInfo.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/ProbeEventInfo.java @@ -140,7 +140,7 @@ public class ProbeEventInfo extends EventInfo implements IProbeEventInfo { } else { output.append("\n offset: "); output.append(fOffset); - output.append("\n"); + output.append('\n'); output.append(" symbol: "); output.append(fSymbol); } diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/SessionInfo.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/SessionInfo.java index 61e01936e5..1817c1e267 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/SessionInfo.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/SessionInfo.java @@ -177,7 +177,7 @@ public class SessionInfo extends TraceInfo implements ISessionInfo { // Trace path: /home/user/lttng-traces/mysession-20120129-084256 output.append(" Trace path: "); output.append(getSessionPath()); - output.append("\n"); + output.append('\n'); for (Iterator iterator = fDomains.iterator(); iterator.hasNext();) { IDomainInfo domain = (IDomainInfo) iterator.next(); diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/TraceSessionComponent.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/TraceSessionComponent.java index 2203c73aed..e8cffe2da5 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/TraceSessionComponent.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/model/impl/TraceSessionComponent.java @@ -18,6 +18,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.linuxtools.internal.lttng2.ui.Activator; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.Messages; +import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IChannelInfo; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.IDomainInfo; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.ISessionInfo; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.model.ITraceControlComponent; @@ -251,6 +252,33 @@ public class TraceSessionComponent extends TraceControlComponent { getControlService().stopSession(getName(), monitor); } + /** + * Enables channels with given names which are part of this domain. If a given channel + * doesn't exists it creates a new channel with the given parameters (or default values + * if given parameter is null). + * @param channelNames - a list of channel names to enable on this domain + * @param info - channel information to set for the channel (use null for default) + * @param isKernel - a flag for indicating kernel or UST. + * @throws ExecutionException + */ + public void enableChannels(List channelNames, IChannelInfo info, boolean isKernel) throws ExecutionException { + enableChannels(channelNames, info, isKernel, new NullProgressMonitor()); + } + + /** + * Enables channels with given names which are part of this domain. If a given channel + * doesn't exists it creates a new channel with the given parameters (or default values + * if given parameter is null). + * @param channelNames - a list of channel names to enable on this domain + * @param info - channel information to set for the channel (use null for default) + * @param isKernel - a flag for indicating kernel or UST. + * @param monitor - a progress monitor + * @throws ExecutionException + */ + public void enableChannels(List channelNames, IChannelInfo info, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { + getControlService().enableChannels(getName(), channelNames, isKernel, info, 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.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/property/TraceProbeEventPropertySource.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/property/TraceProbeEventPropertySource.java index d33938eeba..75234ad07d 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/property/TraceProbeEventPropertySource.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/property/TraceProbeEventPropertySource.java @@ -12,6 +12,7 @@ package org.eclipse.linuxtools.internal.lttng2.ui.views.control.property; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.eclipse.linuxtools.internal.lttng2.ui.views.control.Messages; @@ -80,11 +81,11 @@ public class TraceProbeEventPropertySource extends TraceEventPropertySource { @Override public IPropertyDescriptor[] getPropertyDescriptors() { IPropertyDescriptor[] superProperties = super.getPropertyDescriptors(); - List list = new ArrayList(); - for (int i = 0; i < superProperties.length; i++) { - list.add(superProperties[i]); - } - + + List superList = Arrays.asList(superProperties); + ArrayList list = new ArrayList(); + list.addAll(superList); + if (fEvent instanceof TraceProbeEventComponent) { TraceProbeEventComponent event = (TraceProbeEventComponent) fEvent; if (event.getAddress() != null) { diff --git a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/LTTngControlService.java b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/LTTngControlService.java index 69aea44014..ef08cae9d8 100644 --- a/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/LTTngControlService.java +++ b/org.eclipse.linuxtools.lttng2.ui/src/org/eclipse/linuxtools/internal/lttng2/ui/views/control/service/LTTngControlService.java @@ -100,6 +100,10 @@ public class LTTngControlService implements ILttngControlService { private final static String COMMAND_DISABLE_EVENT = CONTROL_COMMAND + " disable-event "; //$NON-NLS-1$ // Command options constants + /** + * Command line option for output path. + */ + private final static String OPTION_OUTPUT_PATH = " -o "; //$NON-NLS-1$ /** * Command line option for kernel tracer. */ @@ -358,8 +362,7 @@ public class LTTngControlService implements ILttngControlService { String command = COMMAND_LIST + sessionName; ICommandResult result = fCommandShell.executeCommand(command, monitor); - - + if (isError(result)) { throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$ } @@ -531,12 +534,16 @@ public class LTTngControlService implements ILttngControlService { String newName = formatParameter(sessionName); String newPath = formatParameter(sessionPath); - String command = COMMAND_CREATE_SESSION + newName; + StringBuffer command = new StringBuffer(); + command.append(COMMAND_CREATE_SESSION); + command.append(newName); + if (newPath != null && !"".equals(newPath)) { //$NON-NLS-1$ - command += " -o " + newPath; //$NON-NLS-1$ + command.append(OPTION_OUTPUT_PATH); + command.append(newPath); } - ICommandResult result = fCommandShell.executeCommand(command, monitor); + 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$ @@ -597,15 +604,12 @@ public class LTTngControlService implements ILttngControlService { ICommandResult result = fCommandShell.executeCommand(command, monitor); String[] output = result.getOutput(); - if (isError(result)) { - // In case "session not found" treat it as success - if ((output == null) || (!SESSION_NOT_FOUND_ERROR_PATTERN.matcher(output[0]).matches())) { + if (isError(result) && ((output == null) || (!SESSION_NOT_FOUND_ERROR_PATTERN.matcher(output[0]).matches()))) { throw new ExecutionException(Messages.TraceControl_CommandError + " " + command + "\n" + formatOutput(result.getOutput())); //$NON-NLS-1$ //$NON-NLS-2$ - } - } + } //Session destroyed } - + /* * (non-Javadoc) * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.service.ILttngControlService#startSession(java.lang.String, org.eclipse.core.runtime.IProgressMonitor) @@ -651,7 +655,7 @@ public class LTTngControlService implements ILttngControlService { public void enableChannels(String sessionName, List channelNames, boolean isKernel, IChannelInfo info, IProgressMonitor monitor) throws ExecutionException { // no channels to enable - if (channelNames.size() == 0) { + if (channelNames.isEmpty()) { return; } @@ -663,7 +667,7 @@ public class LTTngControlService implements ILttngControlService { String channel = (String) iterator.next(); command.append(channel); if (iterator.hasNext()) { - command.append(","); //$NON-NLS-1$ + command.append(','); } } @@ -717,7 +721,7 @@ public class LTTngControlService implements ILttngControlService { public void disableChannels(String sessionName, List channelNames, boolean isKernel, IProgressMonitor monitor) throws ExecutionException { // no channels to enable - if (channelNames.size() == 0) { + if (channelNames.isEmpty()) { return; } @@ -729,7 +733,7 @@ public class LTTngControlService implements ILttngControlService { String channel = (String) iterator.next(); command.append(channel); if (iterator.hasNext()) { - command.append(","); //$NON-NLS-1$ + command.append(','); } } @@ -760,7 +764,7 @@ public class LTTngControlService implements ILttngControlService { StringBuffer command = new StringBuffer(COMMAND_ENABLE_EVENT); - if (eventNames == null || eventNames.size() == 0) { + if (eventNames == null || eventNames.isEmpty()) { command.append(OPTION_ALL); } else { @@ -768,7 +772,7 @@ public class LTTngControlService implements ILttngControlService { String event = (String) iterator.next(); command.append(event); if (iterator.hasNext()) { - command.append(","); //$NON-NLS-1$ + command.append(','); } } } @@ -912,7 +916,7 @@ public class LTTngControlService implements ILttngControlService { command.append(OPTION_ALL); } else { // no events to enable - if (eventNames.size() == 0) { + if (eventNames.isEmpty()) { return; } @@ -920,7 +924,7 @@ public class LTTngControlService implements ILttngControlService { String event = (String) iterator.next(); command.append(event); if (iterator.hasNext()) { - command.append(","); //$NON-NLS-1$ + command.append(','); } } } @@ -1223,12 +1227,14 @@ public class LTTngControlService implements ILttngControlService { */ private String formatParameter(String parameter) { if (parameter != null) { - String newString = String.valueOf(parameter); + StringBuffer newString = new StringBuffer(); + newString.append(parameter); if (parameter.contains(" ")) { //$NON-NLS-1$ - newString = "\"" + newString + "\""; //$NON-NLS-1$ //$NON-NLS-2$ + newString.insert(0, "\""); //$NON-NLS-1$ + newString.append("\""); //$NON-NLS-1$ } - return newString; + return newString.toString(); } return null; } -- 2.34.1