001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.osm.event;
003
004import java.util.Collection;
005import java.util.Collections;
006import java.util.List;
007
008import org.openstreetmap.josm.data.osm.DataSet;
009import org.openstreetmap.josm.data.osm.OsmPrimitive;
010
011/**
012 * A combined data change event. It consists of multiple dataset events.
013 */
014public class DataChangedEvent extends AbstractDatasetChangedEvent {
015
016    private final List<AbstractDatasetChangedEvent> events;
017
018    /**
019     * Constructs a new {@code DataChangedEvent}
020     * @param dataSet the dataset from which the event comes from
021     * @param events list of change events
022     */
023    public DataChangedEvent(DataSet dataSet, List<AbstractDatasetChangedEvent> events) {
024        super(dataSet);
025        this.events = events;
026    }
027
028    /**
029     * Constructs a new {@code DataChangedEvent}
030     * @param dataSet data set. Can be null
031     */
032    public DataChangedEvent(DataSet dataSet) {
033        this(dataSet, null);
034    }
035
036    @Override
037    public void fire(DataSetListener listener) {
038        listener.dataChanged(this);
039    }
040
041    @Override
042    public Collection<OsmPrimitive> getPrimitives() {
043        return dataSet == null ? Collections.emptyList() : dataSet.allPrimitives();
044    }
045
046    @Override
047    public DatasetEventType getType() {
048        return DatasetEventType.DATA_CHANGED;
049    }
050
051    /**
052     * Returns list of events that caused this DataChangedEvent.
053     * @return List of events that caused this DataChangedEvent. Might be null
054     */
055    public List<AbstractDatasetChangedEvent> getEvents() {
056        return events;
057    }
058}