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 {DATA_CHANGED, NODE_MOVED, PRIMITIVES_ADDED, PRIMITIVES_REMOVED,
012        RELATION_MEMBERS_CHANGED, TAGS_CHANGED, WAY_NODES_CHANGED, CHANGESET_ID_CHANGED}
013
014    protected final DataSet dataSet;
015
016    protected AbstractDatasetChangedEvent(DataSet dataSet) {
017        this.dataSet = dataSet;
018    }
019
020    public abstract void fire(DataSetListener listener);
021
022    /**
023     * Returns list of primitives modified by this event.
024     * <br/>
025     * <strong>WARNING</strong> This value might be incorrect in case
026     * of {@link DataChangedEvent}. It returns all primitives in the dataset
027     * when this method is called (live list), not list of primitives when
028     * the event was created
029     * @return List of modified primitives
030     */
031    public abstract Collection<? extends OsmPrimitive> getPrimitives();
032
033    public DataSet getDataset() {
034        return dataSet;
035    }
036
037    public abstract DatasetEventType getType();
038
039    @Override
040    public String toString() {
041        return getType().toString();
042    }
043
044}