// 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.List;
import javax.swing.JLabel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.MutableTreeNode;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.PrimitiveData;
public class AddPrimitivesCommand extends Command {
private final List<PrimitiveData> data = new ArrayList<PrimitiveData>();
public AddPrimitivesCommand(List<PrimitiveData> data) {
this.data.addAll(data);
}
@Override public boolean executeCommand() {
List<OsmPrimitive> createdPrimitives = new ArrayList<OsmPrimitive>(data.size());
for (PrimitiveData pd:data) {
createdPrimitives.add(getLayer().data.getPrimitiveById(pd, true));
}
for (int i=0; i<createdPrimitives.size(); i++) {
createdPrimitives.get(i).load(data.get(i));
}
getLayer().data.setSelected(createdPrimitives);
return true;
}
@Override public void undoCommand() {
for (PrimitiveData p:data) {
getLayer().data.removePrimitive(p);
}
}
@Override
public MutableTreeNode description() {
return new DefaultMutableTreeNode(
new JLabel(trn("Added {0} object", "Added {0} objects", data.size(), data.size()), null,
JLabel.HORIZONTAL
)
);
}
@Override
public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
Collection<OsmPrimitive> added) {
// Does nothing because we don't want to create OsmPrimitives.
}
}