// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.command; import static org.openstreetmap.josm.tools.I18n.trn; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import javax.swing.JLabel; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.NodeData; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.PrimitiveData; import org.openstreetmap.josm.gui.layer.OsmDataLayer; public class AddPrimitivesCommand extends Command { private final List data = new ArrayList(); public AddPrimitivesCommand(List data) { this.data.addAll(data); } public AddPrimitivesCommand(List data, OsmDataLayer layer) { super(layer); this.data.addAll(data); } @SuppressWarnings("null") @Override public boolean executeCommand() { List createdPrimitives = new ArrayList(data.size()); for (PrimitiveData pd:data) { OsmPrimitive primitive = getLayer().data.getPrimitiveById(pd); boolean created = primitive == null; if (created) { primitive = pd.getType().newInstance(pd.getUniqueId(), true); } if (pd instanceof NodeData) { // Load nodes immediately because they can't be added to dataset without coordinates primitive.load(pd); } if (created) { getLayer().data.addPrimitive(primitive); } createdPrimitives.add(primitive); } //Then load ways and relations for (int i=0; i modified, Collection deleted, Collection added) { // Does nothing because we don't want to create OsmPrimitives. } @Override public Collection getParticipatingPrimitives() { Collection prims = new HashSet(); for (PrimitiveData d : data) { OsmPrimitive osm = getLayer().data.getPrimitiveById(d); if (osm == null) throw new RuntimeException(); prims.add(osm); } return prims; } }