001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.osm.event;
003
004import java.util.Collection;
005
006import org.openstreetmap.josm.data.osm.DataSet;
007import org.openstreetmap.josm.data.osm.OsmPrimitive;
008
009public abstract class AbstractDatasetChangedEvent {
010
011    public enum DatasetEventType {
012        DATA_CHANGED,
013        NODE_MOVED,
014        PRIMITIVES_ADDED,
015        PRIMITIVES_REMOVED,
016        RELATION_MEMBERS_CHANGED,
017        TAGS_CHANGED,
018        WAY_NODES_CHANGED,
019        CHANGESET_ID_CHANGED
020    }
021
022    protected final DataSet dataSet;
023
024    protected AbstractDatasetChangedEvent(DataSet dataSet) {
025        this.dataSet = dataSet;
026    }
027
028    public abstract void fire(DataSetListener listener);
029
030    /**
031     * Returns list of primitives modified by this event.
032     * <br>
033     * <strong>WARNING</strong> This value might be incorrect in case
034     * of {@link DataChangedEvent}. It returns all primitives in the dataset
035     * when this method is called (live list), not list of primitives when
036     * the event was created
037     * @return List of modified primitives
038     */
039    public abstract Collection<? extends OsmPrimitive> getPrimitives();
040
041    public DataSet getDataset() {
042        return dataSet;
043    }
044
045    public abstract DatasetEventType getType();
046
047    @Override
048    public String toString() {
049        return getType().toString();
050    }
051
052}