001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.data.osm.event;
003    
004    import java.util.Collection;
005    
006    import org.openstreetmap.josm.data.osm.DataSet;
007    import org.openstreetmap.josm.data.osm.OsmPrimitive;
008    
009    public 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    }