// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.dialogs.changeset;
import javax.swing.DefaultListSelectionModel;
import org.openstreetmap.josm.data.osm.Changeset;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
import org.openstreetmap.josm.data.osm.event.ChangesetIdChangedEvent;
import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
import org.openstreetmap.josm.data.osm.event.DataSetListener;
import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
import org.openstreetmap.josm.gui.MapView.EditLayerChangeListener;
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
/**
* This is the list model for the list of changeset in the current edit layer.
*
*/
public class ChangesetsInActiveDataLayerListModel extends ChangesetListModel implements DataSetListener, EditLayerChangeListener {
public ChangesetsInActiveDataLayerListModel(DefaultListSelectionModel selectionModel) {
super(selectionModel);
}
/* ------------------------------------------------------------------------------ */
/* interface DataSetListener */
/* ------------------------------------------------------------------------------ */
public void dataChanged(DataChangedEvent event) {
initFromDataSet(event.getDataset());
}
public void primtivesAdded(PrimitivesAddedEvent event) {
for (OsmPrimitive primitive:event.getPrimitives()) {
addChangeset(new Changeset(primitive.getChangesetId()));
}
}
public void primtivesRemoved(PrimitivesRemovedEvent event) {
for (OsmPrimitive primitive:event.getPrimitives()) {
removeChangeset(new Changeset(primitive.getChangesetId()));
}
}
public void otherDatasetChange(AbstractDatasetChangedEvent event) {
if (event instanceof ChangesetIdChangedEvent) {
ChangesetIdChangedEvent e = (ChangesetIdChangedEvent) event;
removeChangeset(new Changeset(e.getOldChangesetId()));
addChangeset(new Changeset(e.getNewChangesetId()));
}
}
public void nodeMoved(NodeMovedEvent event) {/* ignored */}
public void relationMembersChanged(RelationMembersChangedEvent event) {/* ignored */}
public void tagsChanged(TagsChangedEvent event) {/* ignored */}
public void wayNodesChanged(WayNodesChangedEvent event) {/* ignored */}
/* ------------------------------------------------------------------------------ */
/* interface EditLayerListener */
/* ------------------------------------------------------------------------------ */
public void editLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) {
// just init the model content. Don't register as DataSetListener. The mode
// is already registered to receive DataChangedEvents from the current
// edit layer
if (newLayer != null) {
initFromDataSet(newLayer.data);
} else {
initFromDataSet(null);
}
}
}