org.eclipse.ui.AbstractSourceProvider Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2005, 2015 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui;
import java.util.Map;
import org.eclipse.core.commands.util.Tracing;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.ui.internal.misc.Policy;
import org.eclipse.ui.services.IServiceLocator;
/**
*
* An implementation of ISourceProvider
that provides listener
* support. Subclasses need only call fireSourceChanged
whenever
* appropriate.
*
*
* @since 3.1
*/
public abstract class AbstractSourceProvider implements ISourceProvider {
/**
* Whether source providers should print out debugging information to the
* console when events arrive.
*
* @since 3.2
*/
protected static boolean DEBUG = Policy.DEBUG_SOURCES;
/**
* The listeners to this source provider. This value is never
* null
.
*/
private final ListenerList listeners = new ListenerList(ListenerList.IDENTITY);
@Override
public final void addSourceProviderListener(
final ISourceProviderListener listener) {
if (listener == null) {
throw new NullPointerException("The listener cannot be null"); //$NON-NLS-1$
}
listeners.add(listener);
}
/**
* Notifies all listeners that a single source has changed.
*
* @param sourcePriority
* The source priority that has changed.
* @param sourceName
* The name of the source that has changed; must not be
* null
.
* @param sourceValue
* The new value for the source; may be null
.
*/
protected final void fireSourceChanged(final int sourcePriority,
final String sourceName, final Object sourceValue) {
for (Object listener : listeners.getListeners()) {
((ISourceProviderListener) listener).sourceChanged(sourcePriority, sourceName,
sourceValue);
}
}
/**
* Notifies all listeners that multiple sources have changed.
*
* @param sourcePriority
* The source priority that has changed.
* @param sourceValuesByName
* The map of source names (String
) to source
* values (Object
) that have changed; must not
* be null
. The names must not be
* null
, but the values may be null
.
*/
protected final void fireSourceChanged(final int sourcePriority,
final Map sourceValuesByName) {
for (Object listener : listeners.getListeners()) {
((ISourceProviderListener) listener).sourceChanged(sourcePriority, sourceValuesByName);
}
}
/**
* Logs a debugging message in an appropriate manner. If the message is
* null
or the DEBUG
is false
,
* then this method does nothing.
*
* @param message
* The debugging message to log; if null
, then
* nothing is logged.
* @since 3.2
*/
protected final void logDebuggingInfo(final String message) {
if (DEBUG && (message != null)) {
Tracing.printTrace("SOURCES", message); //$NON-NLS-1$
}
}
@Override
public final void removeSourceProviderListener(
final ISourceProviderListener listener) {
if (listener == null) {
throw new NullPointerException("The listener cannot be null"); //$NON-NLS-1$
}
listeners.remove(listener);
}
/**
* This method is called when the source provider is instantiated by
* org.eclipse.ui.services
. Clients may override this method
* to perform initialization.
*
* @param locator
* The global service locator. It can be used to retrieve
* services like the IContextService
* @since 3.4
*/
public void initialize(final IServiceLocator locator) {
}
}