diff --git a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/ILaunchBarListener.java b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/ILaunchBarListener.java
new file mode 100644
index 00000000000..2db287409a0
--- /dev/null
+++ b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/ILaunchBarListener.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) Jan 29, 2016 QNX Software Systems. All Rights Reserved.
+ *
+ * You must obtain a written license from and pay applicable license fees to QNX
+ * Software Systems before you may reproduce, modify or distribute this software,
+ * or any work that includes all or part of this software. Free development
+ * licenses are available for evaluation and non-commercial purposes. For more
+ * information visit [http://licensing.qnx.com] or email licensing@qnx.com.
+ *
+ * This file may contain contributions from others. Please review this entire
+ * file for other proprietary rights or license notices, as well as the QNX
+ * Development Suite License Guide at [http://licensing.qnx.com/license-guide/]
+ * for other information.
+ *******************************************************************************/
+package org.eclipse.launchbar.core;
+
+import org.eclipse.debug.core.ILaunchMode;
+import org.eclipse.launchbar.core.target.ILaunchTarget;
+
+/**
+ * Listener that can be installed on launch bar to listen for state changes.
+ * {@link ILaunchBarManager#addListener(ILaunchBarListener)}.
+ *
+ *
+ * Activator.getService(ILaunchBarManager.class).addListener(new ILaunchBarListener(){
+ * public void activeLaunchTargetChanged(ILaunchTarget target) {
+ * // do something
+ * }
+ * });
+ *
+ */
+public interface ILaunchBarListener {
+ default void activeLaunchDescriptorChanged(ILaunchDescriptor descriptor) {
+ }
+
+ default void activeLaunchModeChanged(ILaunchMode mode) {
+ }
+
+ default void activeLaunchTargetChanged(ILaunchTarget target) {
+ }
+
+ default void launchTargetsChanged() {
+ }
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/ILaunchBarManager.java b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/ILaunchBarManager.java
index 9f6f4387d35..6817509f546 100644
--- a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/ILaunchBarManager.java
+++ b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/ILaunchBarManager.java
@@ -23,7 +23,7 @@ public interface ILaunchBarManager extends ILaunchConfigurationListener {
/**
* A launch object has been added. Create a matching launch descriptor if
* available.
- *
+ *
* @param element
* launch object
* @return the launch descriptor that got created, null of none was
@@ -34,7 +34,7 @@ public interface ILaunchBarManager extends ILaunchConfigurationListener {
/**
* A launch object has been removed. Remove the associated launch descriptor
* if there is one.
- *
+ *
* @param element
* launch object
* @throws CoreException
@@ -43,10 +43,22 @@ public interface ILaunchBarManager extends ILaunchConfigurationListener {
/**
* A launch object has changed in some way that affects the launch bar.
- *
+ *
* @param launchObject
* @throws CoreException
*/
void launchObjectChanged(Object launchObject) throws CoreException;
+
+ /**
+ * Add a linstener that can react to launch bar changes
+ * @param listener
+ */
+ public void addListener(ILaunchBarListener listener);
+
+ /**
+ * Remove a linstener
+ * @param listener
+ */
+ public void removeListener(ILaunchBarListener listener);
}
diff --git a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/LaunchBarManager.java b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/LaunchBarManager.java
index 9908602ddb8..eca2691ddcb 100644
--- a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/LaunchBarManager.java
+++ b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/LaunchBarManager.java
@@ -38,6 +38,7 @@ import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchListener;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.ILaunchMode;
+import org.eclipse.launchbar.core.ILaunchBarListener;
import org.eclipse.launchbar.core.ILaunchBarManager;
import org.eclipse.launchbar.core.ILaunchConfigurationProvider;
import org.eclipse.launchbar.core.ILaunchDescriptor;
@@ -54,23 +55,7 @@ import org.osgi.service.prefs.Preferences;
* The brains of the launch bar.
*/
public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListener {
- public interface Listener {
- default void activeLaunchDescriptorChanged() {
- }
-
- default void activeLaunchModeChanged() {
- }
-
- default void activeLaunchTargetChanged() {
- }
-
- default void launchDescriptorRemoved(ILaunchDescriptor descriptor) {
- }
-
- default void launchTargetsChanged() {
- }
- }
- private final List listeners = new LinkedList<>();
+ private final List listeners = new LinkedList<>();
// The launch object providers
private final List objectProviders = new ArrayList<>();
// The descriptor types
@@ -615,9 +600,9 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene
private void fireActiveLaunchDescriptorChanged() {
if (!initialized)
return;
- for (Listener listener : listeners) {
+ for (ILaunchBarListener listener : listeners) {
try {
- listener.activeLaunchDescriptorChanged();
+ listener.activeLaunchDescriptorChanged(activeLaunchDesc);
} catch (Exception e) {
Activator.log(e);
}
@@ -671,9 +656,9 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene
private void fireActiveLaunchModeChanged() {
if (!initialized)
return;
- for (Listener listener : listeners) {
+ for (ILaunchBarListener listener : listeners) {
try {
- listener.activeLaunchModeChanged();
+ listener.activeLaunchModeChanged(activeLaunchMode);
} catch (Exception e) {
Activator.log(e);
}
@@ -759,9 +744,9 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene
private void fireActiveLaunchTargetChanged() {
if (!initialized)
return;
- for (Listener listener : listeners) {
+ for (ILaunchBarListener listener : listeners) {
try {
- listener.activeLaunchTargetChanged();
+ listener.activeLaunchTargetChanged(activeLaunchTarget);
} catch (Exception e) {
Activator.log(e);
}
@@ -811,13 +796,16 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene
return null;
}
- public void addListener(Listener listener) {
+ @Override
+ public void addListener(ILaunchBarListener listener) {
if (listener == null)
return;
- listeners.add(listener);
+ if (!listeners.contains(listener)) // cannot add duplicates
+ listeners.add(listener);
}
- public void removeListener(Listener listener) {
+ @Override
+ public void removeListener(ILaunchBarListener listener) {
if (listener == null)
return;
listeners.remove(listener);
@@ -901,7 +889,7 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene
private void fireLaunchTargetsChanged() {
if (!initialized)
return;
- for (Listener listener : listeners) {
+ for (ILaunchBarListener listener : listeners) {
try {
listener.launchTargetsChanged();
} catch (Exception e) {
diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarControl.java b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarControl.java
index b375dc331d4..b3a9b0d1cbd 100644
--- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarControl.java
+++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarControl.java
@@ -16,9 +16,9 @@ import javax.annotation.PreDestroy;
import org.eclipse.debug.core.ILaunchMode;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.launchbar.core.ILaunchBarListener;
import org.eclipse.launchbar.core.ILaunchDescriptor;
import org.eclipse.launchbar.core.internal.LaunchBarManager;
-import org.eclipse.launchbar.core.internal.LaunchBarManager.Listener;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.ui.internal.Activator;
import org.eclipse.launchbar.ui.internal.Messages;
@@ -34,7 +34,7 @@ import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
-public class LaunchBarControl implements Listener {
+public class LaunchBarControl implements ILaunchBarListener {
public static final String ID = "org.eclipse.launchbar"; //$NON-NLS-1$
public static final String CLASS_URI = "bundleclass://" + Activator.PLUGIN_ID + "/" //$NON-NLS-1$ //$NON-NLS-2$
+ LaunchBarControl.class.getName();
@@ -122,35 +122,26 @@ public class LaunchBarControl implements Listener {
}
@Override
- public void activeLaunchDescriptorChanged() {
+ public void activeLaunchDescriptorChanged(ILaunchDescriptor descriptor) {
if (configSelector != null) {
- final ILaunchDescriptor descriptor = manager.getActiveLaunchDescriptor();
configSelector.setDelayedSelection(descriptor, SELECTION_DELAY);
}
}
@Override
- public void activeLaunchModeChanged() {
+ public void activeLaunchModeChanged(ILaunchMode mode) {
if (modeSelector != null) {
- final ILaunchMode mode = manager.getActiveLaunchMode();
modeSelector.setDelayedSelection(mode, SELECTION_DELAY);
}
}
@Override
- public void activeLaunchTargetChanged() {
+ public void activeLaunchTargetChanged(ILaunchTarget target) {
if (targetSelector != null) {
- final ILaunchTarget target = manager.getActiveLaunchTarget();
targetSelector.setDelayedSelection(target, SELECTION_DELAY);
}
}
- @Override
- public void launchDescriptorRemoved(ILaunchDescriptor descriptor) {
- // TODO Auto-generated method stub
-
- }
-
@Override
public void launchTargetsChanged() {
if (targetSelector != null) {
diff --git a/tests/org.eclipse.launchbar.core.tests/src/org/eclipse/launchbar/core/internal/LaunchBarManager2Test.java b/tests/org.eclipse.launchbar.core.tests/src/org/eclipse/launchbar/core/internal/LaunchBarManager2Test.java
index b5833ecd082..2e000a0d190 100644
--- a/tests/org.eclipse.launchbar.core.tests/src/org/eclipse/launchbar/core/internal/LaunchBarManager2Test.java
+++ b/tests/org.eclipse.launchbar.core.tests/src/org/eclipse/launchbar/core/internal/LaunchBarManager2Test.java
@@ -50,12 +50,12 @@ import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.ILaunchMode;
import org.eclipse.launchbar.core.DefaultLaunchConfigProvider;
+import org.eclipse.launchbar.core.ILaunchBarListener;
import org.eclipse.launchbar.core.ILaunchConfigurationProvider;
import org.eclipse.launchbar.core.ILaunchDescriptor;
import org.eclipse.launchbar.core.ILaunchDescriptorType;
import org.eclipse.launchbar.core.ProjectLaunchDescriptor;
import org.eclipse.launchbar.core.ProjectPerTargetLaunchConfigProvider;
-import org.eclipse.launchbar.core.internal.LaunchBarManager.Listener;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.ILaunchTargetManager;
import org.junit.Before;
@@ -670,12 +670,12 @@ public class LaunchBarManager2Test {
@Test
public void testGetActiveLaunchDescriptor() throws CoreException {
- Listener lis = mock(Listener.class);
+ ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis);
manager.launchObjectAdded(launchObject);
// manager.setActiveLaunchDescriptor(desc);
assertEquals(descriptor, manager.getActiveLaunchDescriptor());
- verify(lis).activeLaunchDescriptorChanged();
+ verify(lis).activeLaunchDescriptorChanged(descriptor);
}
@Test
@@ -697,12 +697,12 @@ public class LaunchBarManager2Test {
@Test
public void testSetActiveLaunchDescriptorLisBad() throws CoreException {
- Listener lis = mock(Listener.class);
+ ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis);
- doThrow(new NullPointerException()).when(lis).activeLaunchDescriptorChanged();
+ doThrow(new NullPointerException()).when(lis).activeLaunchDescriptorChanged(any(ILaunchDescriptor.class));
manager.launchObjectAdded(launchObject);
manager.launchConfigurationAdded(launchConfig);
- verify(lis).activeLaunchDescriptorChanged();
+ verify(lis).activeLaunchDescriptorChanged(descriptor);
}
@Test
@@ -774,22 +774,23 @@ public class LaunchBarManager2Test {
public void testSetActiveLaunchModeLis() throws CoreException {
ILaunchMode mode = mock(ILaunchMode.class);
doReturn("bla").when(mode).getIdentifier();
- Listener lis = mock(Listener.class);
+ ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis);
manager.setActiveLaunchMode(mode);
manager.setActiveLaunchMode(null);
- verify(lis, times(2)).activeLaunchModeChanged();
+ verify(lis, times(1)).activeLaunchModeChanged(mode);
+ verify(lis, times(1)).activeLaunchModeChanged(null);
}
@Test
public void testSetActiveLaunchModeLisBad() throws CoreException {
ILaunchMode mode = mock(ILaunchMode.class);
doReturn("bla").when(mode).getIdentifier();
- Listener lis = mock(Listener.class);
+ ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis);
- doThrow(new NullPointerException()).when(lis).activeLaunchModeChanged();
+ doThrow(new NullPointerException()).when(lis).activeLaunchModeChanged(mode);
manager.setActiveLaunchMode(mode);
- verify(lis).activeLaunchModeChanged();
+ verify(lis).activeLaunchModeChanged(mode);
}
@Test
@@ -857,28 +858,28 @@ public class LaunchBarManager2Test {
@Test
public void testAddListener() throws CoreException {
- Listener lis = mock(Listener.class);
+ ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis);
// check events
manager.launchObjectAdded(launchObject);
manager.setActiveLaunchDescriptor(descriptor);
- verify(lis).activeLaunchTargetChanged();
+ verify(lis).activeLaunchTargetChanged(any(ILaunchTarget.class));
}
@Test
public void testAddListenerBad() throws CoreException {
- Listener lis = mock(Listener.class);
+ ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis);
- doThrow(new NullPointerException()).when(lis).activeLaunchTargetChanged();
+ doThrow(new NullPointerException()).when(lis).activeLaunchTargetChanged(any(ILaunchTarget.class));
// check events
manager.launchObjectAdded(launchObject);
manager.setActiveLaunchDescriptor(descriptor);
- verify(lis).activeLaunchTargetChanged();
+ verify(lis).activeLaunchTargetChanged(any(ILaunchTarget.class));
}
@Test
public void testRemoveListener() {
- Listener lis = mock(Listener.class);
+ ILaunchBarListener lis = mock(ILaunchBarListener.class);
manager.addListener(lis);
manager.removeListener(lis);
verifyZeroInteractions(lis);