001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.osm.event;
003
004import org.openstreetmap.josm.data.osm.INode;
005import org.openstreetmap.josm.data.osm.IPrimitive;
006import org.openstreetmap.josm.data.osm.IRelation;
007import org.openstreetmap.josm.data.osm.IWay;
008import org.openstreetmap.josm.data.osm.OsmData;
009
010/**
011 * This interface indicates that the class can fire {@link IDataSelectionListener}.
012 * @author Taylor Smock, Michael Zangl (original code)
013 * @param <O> the base type of OSM primitives
014 * @param <N> type representing OSM nodes
015 * @param <W> type representing OSM ways
016 * @param <R> type representing OSM relations
017 * @param <D> The dataset type
018 * @since 17862
019 */
020public interface IDataSelectionEventSource<O extends IPrimitive, N extends INode, W extends IWay<N>, R extends IRelation<?>,
021       D extends OsmData<O, N, W, R>> {
022    /**
023     * Add a listener
024     * @param listener The listener to add
025     * @return {@code true} if the listener was added
026     */
027    boolean addSelectionListener(IDataSelectionListener<O, N, W, R, D> listener);
028
029    /**
030     * Remove a listener
031     * @param listener The listener to remove
032     * @return {@code true} if the listener was removed
033     */
034    boolean removeSelectionListener(IDataSelectionListener<O, N, W, R, D> listener);
035}