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