package org.archstudio.archipelago2; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.LabelProviderChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; public abstract class AbstractArchipelago2ContentProvider extends AbstractArchipelago2Provider implements IArchipelago2ContentProvider { /** An empty array to return when there are no children. */ protected static final Object[] EMPTY_ARRAY = new Object[0]; /** The viewer provided to {@link #inputChanged(Viewer, Object, Object)}. */ protected TreeViewer viewer = null; /** The list of label provider listeners. */ protected Set<ILabelProviderListener> labelListeners = new CopyOnWriteArraySet<>(); @Override public void addListener(ILabelProviderListener listener) { labelListeners.add(listener); } @Override public void removeListener(ILabelProviderListener listener) { labelListeners.remove(listener); } /** * This function is only pulled in because of {@link IBaseLabelProvider}, it is not used. */ @Override public final boolean isLabelProperty(Object element, String property) { return false; } /** * Fires a {@link LabelProviderChangedEvent} for the given elements to indicate that they should * be refreshed. The elements may be tree elements (i.e., lists of node objects) or nodes (the * objects themselves). * * @param elements The element whose contents should be refreshed. */ protected void fireLabelProviderEvent(Object... elements) { LabelProviderChangedEvent event = new LabelProviderChangedEvent(this, elements); for (ILabelProviderListener listener : labelListeners) { listener.labelProviderChanged(event); } } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { this.viewer = (TreeViewer) viewer; } }