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        PRIMITIVE_FLAGS_CHANGED,
021    }
022
023    protected final DataSet dataSet;
024
025    protected AbstractDatasetChangedEvent(DataSet dataSet) {
026        this.dataSet = dataSet;
027    }
028
029    public abstract void fire(DataSetListener listener);
030
031    /**
032     * Returns list of primitives modified by this event.
033     * <br>
034     * <strong>WARNING</strong> This value might be incorrect in case
035     * of {@link DataChangedEvent}. It returns all primitives in the dataset
036     * when this method is called (live list), not list of primitives when
037     * the event was created
038     * @return List of modified primitives
039     */
040    public abstract Collection<? extends OsmPrimitive> getPrimitives();
041
042    public DataSet getDataset() {
043        return dataSet;
044    }
045
046    public abstract DatasetEventType getType();
047
048    @Override
049    public String toString() {
050        return getType().toString();
051    }
052
053}