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);