// License: GPL. For details, see LICENSE file. package public_transport; import static org.openstreetmap.josm.tools.I18n.tr; import java.util.Collection; import java.util.Vector; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.command.Command; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; public class TrackStoplistDeleteCommand extends Command { private static class NodeTimeName { NodeTimeName(Node node, String time, String name, TransText shelter) { this.node = node; this.time = time; this.name = name; this.shelter = shelter; } public Node node; public String time; public String name; public TransText shelter; } private Vector<Integer> workingLines = null; private Vector<NodeTimeName> nodesForUndo = null; private TrackStoplistTableModel stoplistTM = null; public TrackStoplistDeleteCommand(StopImporterAction controller) { stoplistTM = controller.getCurrentTrack().stoplistTM; workingLines = new Vector<>(); nodesForUndo = new Vector<>(); // use selected lines or all lines if no line is selected int[] selectedLines = controller.getDialog().getStoplistTable().getSelectedRows(); if (selectedLines.length > 0) { for (int i = 0; i < selectedLines.length; ++i) { workingLines.add(selectedLines[i]); } } else { for (int i = 0; i < stoplistTM.getRowCount(); ++i) { workingLines.add(Integer.valueOf(i)); } } } @Override public boolean executeCommand() { nodesForUndo.clear(); for (int i = workingLines.size() - 1; i >= 0; --i) { int j = workingLines.elementAt(i).intValue(); Node node = stoplistTM.nodeAt(j); nodesForUndo.add(new NodeTimeName(node, (String) stoplistTM.getValueAt(j, 0), (String) stoplistTM.getValueAt(j, 1), (TransText) stoplistTM.getValueAt(j, 2))); stoplistTM.removeRow(j); if (node == null) continue; Main.getLayerManager().getEditDataSet().removePrimitive(node); node.setDeleted(true); } return true; } @Override public void undoCommand() { for (int i = 0; i < workingLines.size(); ++i) { int j = workingLines.elementAt(i).intValue(); NodeTimeName ntn = nodesForUndo.elementAt(workingLines.size() - i - 1); stoplistTM.insertRow(j, ntn.node, ntn.time, ntn.name, ntn.shelter); if (ntn.node == null) continue; ntn.node.setDeleted(false); Main.getLayerManager().getEditDataSet().addPrimitive(ntn.node); } } @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) { } @Override public String getDescriptionText() { return tr("Public Transport: Delete track stop"); } }