Changeset 1750 in josm for trunk/src/org/openstreetmap/josm/command
- Timestamp:
- 2009-07-08T21:50:32+02:00 (14 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/command
- Files:
-
- 1 added
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/command/AddCommand.java
r1169 r1750 10 10 import javax.swing.tree.MutableTreeNode; 11 11 12 import org.openstreetmap.josm.Main;13 import org.openstreetmap.josm.data.osm.DataSet;14 12 import org.openstreetmap.josm.data.osm.OsmPrimitive; 15 13 import org.openstreetmap.josm.data.osm.visitor.AddVisitor; 16 14 import org.openstreetmap.josm.data.osm.visitor.DeleteVisitor; 17 15 import org.openstreetmap.josm.data.osm.visitor.NameVisitor; 18 import org.openstreetmap.josm.gui.layer.Layer;19 import org.openstreetmap.josm.gui.layer.OsmDataLayer;20 16 21 17 /** … … 23 19 * way. 24 20 * 25 * See {@ link ChangeCommandChangeCommand} for comments on relation back references.21 * See {@see ChangeCommand} for comments on relation back references. 26 22 * 27 23 * @author imi … … 34 30 private final OsmPrimitive osm; 35 31 36 private DataSet ds;37 38 32 /** 39 33 * Create the command and specify the element to add. 40 34 */ 41 35 public AddCommand(OsmPrimitive osm) { 36 super(); 42 37 this.osm = osm; 43 this.ds = Main.main.editLayer().data;44 38 } 45 39 46 40 @Override public boolean executeCommand() { 47 osm.visit(new AddVisitor( ds));41 osm.visit(new AddVisitor(getLayer().data)); 48 42 return true; 49 43 } 50 44 51 45 @Override public void undoCommand() { 52 osm.visit(new DeleteVisitor( ds));46 osm.visit(new DeleteVisitor(getLayer().data)); 53 47 } 54 48 … … 57 51 } 58 52 59 // faster implementation60 @Override public boolean invalidBecauselayerRemoved(Layer oldLayer) {61 return oldLayer instanceof OsmDataLayer && ((OsmDataLayer)oldLayer).data == ds;62 }63 64 53 @Override public MutableTreeNode description() { 65 54 NameVisitor v = new NameVisitor(); 66 55 osm.visit(v); 67 return new DefaultMutableTreeNode(new JLabel(tr("Add")+" "+tr(v.className)+" "+v.name, v.icon, JLabel.HORIZONTAL)); 56 return new DefaultMutableTreeNode( 57 new JLabel(tr("Add {0} {1}", tr(v.className), v.name), v.icon, JLabel.HORIZONTAL)); 68 58 } 69 59 } -
trunk/src/org/openstreetmap/josm/command/ChangeCommand.java
r1169 r1750 25 25 26 26 public ChangeCommand(OsmPrimitive osm, OsmPrimitive newOsm) { 27 super(); 27 28 this.osm = osm; 28 29 this.newOsm = newOsm; … … 43 44 NameVisitor v = new NameVisitor(); 44 45 osm.visit(v); 45 return new DefaultMutableTreeNode(new JLabel(tr("Change ")+" "+tr(v.className)+" "+v.name, v.icon, JLabel.HORIZONTAL));46 return new DefaultMutableTreeNode(new JLabel(tr("Change {0} {1}", tr(v.className), v.name), v.icon, JLabel.HORIZONTAL)); 46 47 } 47 48 } -
trunk/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
r1347 r1750 40 40 41 41 public ChangePropertyCommand(Collection<? extends OsmPrimitive> objects, String key, String value) { 42 super(); 42 43 this.objects = new LinkedList<OsmPrimitive>(); 43 44 this.key = key; … … 45 46 if (value == null) { 46 47 for (OsmPrimitive osm : objects) { 47 if(osm.get(key) != null) 48 if(osm.get(key) != null) { 48 49 this.objects.add(osm); 50 } 49 51 } 50 52 } else { … … 64 66 String val = object.get(key); 65 67 if ((value == null && val != null) 66 || (value != null && (val == null || !value.equals(val))))68 || (value != null && (val == null || !value.equals(val)))) { 67 69 this.objects.add(object); 70 } 68 71 } 69 72 … … 95 98 text = value == null 96 99 ? tr("Remove \"{0}\" for {1} ''{2}''", key, tr(v.className), v.name) 97 : tr("Set {0}={1} for {2} ''{3}''",key,value, tr(v.className), v.name);100 : tr("Set {0}={1} for {2} ''{3}''",key,value, tr(v.className), v.name); 98 101 } 99 102 else … … 101 104 text = value == null 102 105 ? tr("Remove \"{0}\" for {1} {2}", key, objects.size(), trn("object","objects",objects.size())) 103 : tr("Set {0}={1} for {2} {3}",key,value, objects.size(), trn("object","objects",objects.size()));106 : tr("Set {0}={1} for {2} {3}",key,value, objects.size(), trn("object","objects",objects.size())); 104 107 } 105 108 DefaultMutableTreeNode root = new DefaultMutableTreeNode(new JLabel(text, ImageProvider.get("data", "key"), JLabel.HORIZONTAL)); -
trunk/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java
r1617 r1750 13 13 import org.openstreetmap.josm.data.osm.OsmPrimitive; 14 14 import org.openstreetmap.josm.data.osm.Relation; 15 import org.openstreetmap.josm.data.osm.RelationMember;16 17 15 import org.openstreetmap.josm.data.osm.visitor.NameVisitor; 18 16 … … 36 34 37 35 public ChangeRelationMemberRoleCommand(Relation relation, int position, String newRole) { 36 super(); 38 37 this.relation = relation; 39 38 this.position = position; … … 67 66 NameVisitor v = new NameVisitor(); 68 67 relation.visit(v); 69 return new DefaultMutableTreeNode(new JLabel(tr("ChangeRelationMemberRole ")+" "+tr(v.className)+" "+v.name, v.icon, JLabel.HORIZONTAL));68 return new DefaultMutableTreeNode(new JLabel(tr("ChangeRelationMemberRole {0} {1}", tr(v.className), v.name), v.icon, JLabel.HORIZONTAL)); 70 69 } 71 70 } -
trunk/src/org/openstreetmap/josm/command/Command.java
r1523 r1750 11 11 12 12 import org.openstreetmap.josm.Main; 13 import org.openstreetmap.josm.data.osm.DataSet;14 13 import org.openstreetmap.josm.data.osm.Node; 15 14 import org.openstreetmap.josm.data.osm.OsmPrimitive; … … 25 24 * one atomic action on a specific dataset, such as move or delete. 26 25 * 27 * Remember that the command must be executable and undoable, even if the 28 * Main.ds has changed, so the command must save the dataset it operates on 29 * if necessary. 30 * 26 * The command remembers the {@see OsmDataLayer} it is operating on. 27 * 31 28 * @author imi 32 29 */ 33 30 abstract public class Command { 34 31 35 private static final class CloneVisitor extends AbstractVisitor {36 public Map<OsmPrimitive, OsmPrimitive> orig = new HashMap<OsmPrimitive, OsmPrimitive>();32 private static final class CloneVisitor extends AbstractVisitor { 33 public Map<OsmPrimitive, OsmPrimitive> orig = new HashMap<OsmPrimitive, OsmPrimitive>(); 37 34 38 public void visit(Node n) {39 orig.put(n, new Node(n));40 }41 public void visit(Way w) {42 orig.put(w, new Way(w));43 }44 public void visit(Relation e) {45 orig.put(e, new Relation(e));46 }47 }35 public void visit(Node n) { 36 orig.put(n, new Node(n)); 37 } 38 public void visit(Way w) { 39 orig.put(w, new Way(w)); 40 } 41 public void visit(Relation e) { 42 orig.put(e, new Relation(e)); 43 } 44 } 48 45 49 private CloneVisitor orig; 46 /** the map of OsmPrimitives in the original state to OsmPrimitives in cloned state */ 47 private Map<OsmPrimitive, OsmPrimitive> cloneMap = new HashMap<OsmPrimitive, OsmPrimitive>(); 50 48 51 protected DataSet ds; 49 /** the layer which this command is applied to */ 50 private OsmDataLayer layer; 52 51 53 public Command() {54 this.ds = Main.main.editLayer().data;55 }56 /**57 * Executes the command on the dataset. This implementation will remember all58 * primitives returned by fillModifiedData for restoring them on undo.59 */60 public boolean did_execute = false;61 public boolean executeCommand() {62 did_execute = true;63 orig = new CloneVisitor();64 Collection<OsmPrimitive> all = new HashSet<OsmPrimitive>();65 fillModifiedData(all, all, all);66 for (OsmPrimitive osm : all)67 osm.visit(orig);68 return true;69 }52 public Command() { 53 this.layer = Main.main.map.mapView.getEditLayer(); 54 } 55 /** 56 * Executes the command on the dataset. This implementation will remember all 57 * primitives returned by fillModifiedData for restoring them on undo. 58 */ 59 public boolean executeCommand() { 60 CloneVisitor visitor = new CloneVisitor(); 61 Collection<OsmPrimitive> all = new HashSet<OsmPrimitive>(); 62 fillModifiedData(all, all, all); 63 for (OsmPrimitive osm : all) { 64 osm.visit(visitor); 65 } 66 cloneMap = visitor.orig; 67 return true; 68 } 70 69 71 /** 72 * Undoes the command. 73 * It can be assumed that all objects are in the same state they were before. 74 * It can also be assumed that executeCommand was called exactly once before. 75 * 76 * This implementation undoes all objects stored by a former call to executeCommand. 77 */ 78 public void undoCommand() { 79 for (Entry<OsmPrimitive, OsmPrimitive> e : orig.orig.entrySet()) 80 e.getKey().cloneFrom(e.getValue()); 81 } 70 /** 71 * Undoes the command. 72 * It can be assumed that all objects are in the same state they were before. 73 * It can also be assumed that executeCommand was called exactly once before. 74 * 75 * This implementation undoes all objects stored by a former call to executeCommand. 76 */ 77 public void undoCommand() { 78 for (Entry<OsmPrimitive, OsmPrimitive> e : cloneMap.entrySet()) { 79 e.getKey().cloneFrom(e.getValue()); 80 } 81 } 82 82 83 /** 84 * Called when a layer has been removed to have the command remove itself from 85 * any buffer if it is not longer applicable to the dataset (e.g. it was part of 86 * the removed layer) 87 */ 88 public boolean invalidBecauselayerRemoved(Layer oldLayer) { 89 if (!(oldLayer instanceof OsmDataLayer)) 90 return false; 91 HashSet<OsmPrimitive> modified = new HashSet<OsmPrimitive>(); 92 fillModifiedData(modified, modified, modified); 93 if (modified.isEmpty()) 94 return false; 95 96 HashSet<OsmPrimitive> all = new HashSet<OsmPrimitive>(((OsmDataLayer)oldLayer).data.allPrimitives()); 97 for (OsmPrimitive osm : all) 98 if (all.contains(osm)) 99 return true; 100 101 return false; 102 } 83 /** 84 * Called when a layer has been removed to have the command remove itself from 85 * any buffer if it is not longer applicable to the dataset (e.g. it was part of 86 * the removed layer) 87 * 88 * @param oldLayer the old layer 89 * @return true if this command 90 */ 91 public boolean invalidBecauselayerRemoved(Layer oldLayer) { 92 if (!(oldLayer instanceof OsmDataLayer)) 93 return false; 94 return layer == oldLayer; 95 } 103 96 104 97 /** … … 107 100 */ 108 101 public OsmPrimitive getOrig(OsmPrimitive osm) { 109 OsmPrimitive o = orig.orig.get(osm);102 OsmPrimitive o = cloneMap.get(osm); 110 103 if (o != null) 111 104 return o; 112 105 Main.debug("unable to find osm with id: " + osm.id + " hashCode: " + osm.hashCode()); 113 for (OsmPrimitive t : orig.orig.keySet()) {114 OsmPrimitive to = orig.orig.get(t);115 116 106 for (OsmPrimitive t : cloneMap.keySet()) { 107 OsmPrimitive to = cloneMap.get(t); 108 Main.debug("now: " + t.id + " hashCode: " + t.hashCode()); 109 Main.debug("orig: " + to.id + " hashCode: " + to.hashCode()); 117 110 } 118 111 return o; 119 112 } 120 113 121 /** 122 * Fill in the changed data this command operates on. 123 * Add to the lists, don't clear them. 124 * 125 * @param modified The modified primitives 126 * @param deleted The deleted primitives 127 * @param added The added primitives 128 */ 129 abstract public void fillModifiedData(Collection<OsmPrimitive> modified, 130 Collection<OsmPrimitive> deleted, 131 Collection<OsmPrimitive> added); 114 /** 115 * Replies the layer this command is (or was) applied to. 116 * 117 * @return 118 */ 119 protected OsmDataLayer getLayer() { 120 return layer; 121 } 132 122 133 abstract public MutableTreeNode description(); 123 /** 124 * Fill in the changed data this command operates on. 125 * Add to the lists, don't clear them. 126 * 127 * @param modified The modified primitives 128 * @param deleted The deleted primitives 129 * @param added The added primitives 130 */ 131 abstract public void fillModifiedData(Collection<OsmPrimitive> modified, 132 Collection<OsmPrimitive> deleted, 133 Collection<OsmPrimitive> added); 134 135 abstract public MutableTreeNode description(); 136 137 138 134 139 } -
trunk/src/org/openstreetmap/josm/command/CoordinateConflictResolveCommand.java
r1670 r1750 10 10 import javax.swing.tree.MutableTreeNode; 11 11 12 import org.openstreetmap.josm. Main;12 import org.openstreetmap.josm.data.conflict.Conflict; 13 13 import org.openstreetmap.josm.data.osm.Node; 14 14 import org.openstreetmap.josm.data.osm.OsmPrimitive; 15 import org.openstreetmap.josm.data.osm.Relation;16 import org.openstreetmap.josm.data.osm.Way;17 15 import org.openstreetmap.josm.gui.conflict.MergeDecisionType; 18 16 import org.openstreetmap.josm.tools.ImageProvider; … … 22 20 * 23 21 */ 24 public class CoordinateConflictResolveCommand extends Co mmand {22 public class CoordinateConflictResolveCommand extends ConflictResolveCommand { 25 23 26 /** my node (in the local dataset). merge decisions are applied to this 27 * node 28 */ 29 private final Node my; 30 /** their node (in the server dataset) */ 31 private final Node their; 24 /** the conflict to resolve */ 25 private Conflict<Node> conflict; 32 26 33 27 /** the merge decision */ … … 42 36 */ 43 37 public CoordinateConflictResolveCommand(Node my, Node their, MergeDecisionType decision) { 44 this.my = my; 45 this.their = their; 38 this.conflict = new Conflict<Node>(my,their); 46 39 this.decision = decision; 47 40 } … … 52 45 return new DefaultMutableTreeNode( 53 46 new JLabel( 54 tr("Resolve conflicts in coordinates in {0}", my.id),47 tr("Resolve conflicts in coordinates in {0}",conflict.getMy().id), 55 48 ImageProvider.get("data", "object"), 56 49 JLabel.HORIZONTAL … … 69 62 // do nothing 70 63 } else if (decision.equals(MergeDecisionType.KEEP_THEIR)) { 64 Node my = conflict.getMy(); 65 Node their = conflict.getTheir(); 71 66 my.setCoor(their.getCoor()); 72 67 } else 73 68 // should not happen 74 69 throw new IllegalStateException(tr("cannot resolve undecided conflict")); 70 71 // remember the layer this command was applied to 72 // 73 rememberConflict(conflict); 75 74 76 75 return true; … … 80 79 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, 81 80 Collection<OsmPrimitive> added) { 82 modified.add(my); 83 } 84 85 @Override 86 public void undoCommand() { 87 // restore former state of modified primitives 88 // 89 super.undoCommand(); 90 91 // restore a conflict if necessary 92 // 93 if (!Main.map.conflictDialog.conflicts.containsKey(my)) { 94 Main.map.conflictDialog.addConflict(my, their); 95 } 81 modified.add(conflict.getMy()); 96 82 } 97 83 } -
trunk/src/org/openstreetmap/josm/command/DeleteCommand.java
r1656 r1750 42 42 43 43 /** 44 * The primitive that get deleted.45 */ 46 private final Collection<? extends OsmPrimitive> data;44 * The primitives that get deleted. 45 */ 46 private final Collection<? extends OsmPrimitive> toDelete; 47 47 48 48 /** … … 50 50 */ 51 51 public DeleteCommand(Collection<? extends OsmPrimitive> data) { 52 this.data = data; 52 super(); 53 this.toDelete = data; 53 54 } 54 55 … … 58 59 */ 59 60 public DeleteCommand(OsmPrimitive data) { 60 this. data= Collections.singleton(data);61 this.toDelete = Collections.singleton(data); 61 62 } 62 63 63 64 @Override public boolean executeCommand() { 64 65 super.executeCommand(); 65 for (OsmPrimitive osm : data) {66 for (OsmPrimitive osm : toDelete) { 66 67 osm.delete(true); 67 68 } … … 71 72 @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, 72 73 Collection<OsmPrimitive> added) { 73 deleted.addAll( data);74 deleted.addAll(toDelete); 74 75 } 75 76 … … 77 78 NameVisitor v = new NameVisitor(); 78 79 79 if ( data.size() == 1) {80 data.iterator().next().visit(v);80 if (toDelete.size() == 1) { 81 toDelete.iterator().next().visit(v); 81 82 return new DefaultMutableTreeNode(new JLabel(tr("Delete {1} {0}", v.name, tr(v.className)), v.icon, 82 83 JLabel.HORIZONTAL)); … … 85 86 String cname = null; 86 87 String cnamem = null; 87 for (OsmPrimitive osm : data) {88 for (OsmPrimitive osm : toDelete) { 88 89 osm.visit(v); 89 90 if (cname == null) { … … 95 96 } 96 97 } 97 DefaultMutableTreeNode root = new DefaultMutableTreeNode(new JLabel(tr("Delete {0} {1}", data.size(), trn(98 cname, cnamem, data.size())), ImageProvider.get("data", cname), JLabel.HORIZONTAL));99 for (OsmPrimitive osm : data) {98 DefaultMutableTreeNode root = new DefaultMutableTreeNode(new JLabel(tr("Delete {0} {1}", toDelete.size(), trn( 99 cname, cnamem, toDelete.size())), ImageProvider.get("data", cname), JLabel.HORIZONTAL)); 100 for (OsmPrimitive osm : toDelete) { 100 101 osm.visit(v); 101 102 root.add(new DefaultMutableTreeNode(v.toLabel())); … … 276 277 Relation rel = new Relation(cur); 277 278 for (OsmPrimitive osm : relationsToBeChanged.get(cur)) { 278 for (RelationMember rm : rel.members) { 279 if (rm.member == osm) { 280 RelationMember mem = new RelationMember(); 281 mem.role = rm.role; 282 mem.member = rm.member; 283 rel.members.remove(mem); 284 break; 285 } 286 } 279 rel.removeMembersFor(osm); 287 280 } 288 281 cmds.add(new ChangeCommand(cur, rel)); -
trunk/src/org/openstreetmap/josm/command/DeletedStateConflictResolveCommand.java
r1690 r1750 10 10 import javax.swing.tree.MutableTreeNode; 11 11 12 import org.openstreetmap.josm. Main;12 import org.openstreetmap.josm.data.conflict.Conflict; 13 13 import org.openstreetmap.josm.data.osm.OsmPrimitive; 14 14 import org.openstreetmap.josm.gui.conflict.MergeDecisionType; 15 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 15 16 import org.openstreetmap.josm.tools.ImageProvider; 16 17 … … 19 20 * 20 21 */ 21 public class DeletedStateConflictResolveCommand extends Co mmand {22 public class DeletedStateConflictResolveCommand extends ConflictResolveCommand { 22 23 23 /** my primitive (in the local dataset). merge decisions are applied to this 24 * node 25 */ 26 private final OsmPrimitive my; 27 /** their primitive (in the server dataset) */ 28 private final OsmPrimitive their; 24 /** the conflict to resolve */ 25 private Conflict<OsmPrimitive> conflict; 29 26 30 27 /** the merge decision */ 31 28 private final MergeDecisionType decision; 32 33 34 29 35 30 /** … … 41 36 */ 42 37 public DeletedStateConflictResolveCommand(OsmPrimitive my, OsmPrimitive their, MergeDecisionType decision) { 43 this.my = my; 44 this.their = their; 38 this.conflict = new Conflict<OsmPrimitive>(my, their); 45 39 this.decision = decision; 46 40 } … … 51 45 return new DefaultMutableTreeNode( 52 46 new JLabel( 53 tr("Resolve conflicts in deleted state in {0}", my.id),47 tr("Resolve conflicts in deleted state in {0}",conflict.getMy().id), 54 48 ImageProvider.get("data", "object"), 55 49 JLabel.HORIZONTAL … … 65 59 super.executeCommand(); 66 60 61 OsmDataLayer layer = getLayer(); 62 67 63 if (decision.equals(MergeDecisionType.KEEP_MINE)) { 68 if ( my.deleted) {64 if (conflict.getMy().deleted) { 69 65 // because my was involved in a conflict it my still be referred 70 66 // to from a way or a relation. Fix this now. 71 67 // 72 Main.main.editLayer().data.unlinkReferencesToPrimitive(my);68 layer.data.unlinkReferencesToPrimitive(conflict.getMy()); 73 69 } 74 70 } else if (decision.equals(MergeDecisionType.KEEP_THEIR)) { 75 if ( their.deleted) {76 Main.main.editLayer().data.unlinkReferencesToPrimitive(my);77 my.delete(true);71 if (conflict.getTheir().deleted) { 72 layer.data.unlinkReferencesToPrimitive(conflict.getMy()); 73 conflict.getMy().delete(true); 78 74 } else { 79 my.deleted = their.deleted;75 conflict.getMy().deleted = conflict.getTheir().deleted; 80 76 } 81 77 } else … … 83 79 throw new IllegalStateException(tr("cannot resolve undecided conflict")); 84 80 81 rememberConflict(conflict); 85 82 return true; 86 83 } … … 89 86 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, 90 87 Collection<OsmPrimitive> added) { 91 modified.add(my); 92 } 93 94 @Override 95 public void undoCommand() { 96 // restore former state of modified primitives 97 // 98 super.undoCommand(); 99 100 // restore a conflict if necessary 101 // 102 if (!Main.map.conflictDialog.conflicts.containsKey(my)) { 103 Main.map.conflictDialog.addConflict(my, their); 104 } 88 modified.add(conflict.getMy()); 105 89 } 106 90 } -
trunk/src/org/openstreetmap/josm/command/MoveCommand.java
r1728 r1750 15 15 import javax.swing.tree.MutableTreeNode; 16 16 17 import org.openstreetmap.josm.data.coor.EastNorth;18 17 import org.openstreetmap.josm.data.coor.LatLon; 19 18 import org.openstreetmap.josm.data.osm.Node; … … 32 31 * The objects that should be moved. 33 32 */ 34 p ublic Collection<Node> objects = new LinkedList<Node>();33 private Collection<Node> nodes = new LinkedList<Node>(); 35 34 /** 36 35 * x difference movement. Coordinates are in northern/eastern … … 64 63 */ 65 64 public MoveCommand(Collection<OsmPrimitive> objects, double x, double y) { 65 super(); 66 66 this.x = x; 67 67 this.y = y; 68 this. objects = AllNodesVisitor.getAllNodes(objects);69 for (Node n : this. objects) {68 this.nodes = AllNodesVisitor.getAllNodes(objects); 69 for (Node n : this.nodes) { 70 70 OldState os = new OldState(); 71 71 os.latlon = new LatLon(n.getCoor()); … … 84 84 */ 85 85 public void moveAgain(double x, double y) { 86 for (Node n : objects) {86 for (Node n : nodes) { 87 87 n.setEastNorth(n.getEastNorth().add(x, y)); 88 88 } … … 92 92 93 93 @Override public boolean executeCommand() { 94 for (Node n : objects) {94 for (Node n : nodes) { 95 95 n.setEastNorth(n.getEastNorth().add(x, y)); 96 96 n.modified = true; … … 101 101 @Override public void undoCommand() { 102 102 Iterator<OldState> it = oldState.iterator(); 103 for (Node n : objects) {103 for (Node n : nodes) { 104 104 OldState os = it.next(); 105 105 n.setCoor(os.latlon); … … 109 109 110 110 @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) { 111 for (OsmPrimitive osm : objects)111 for (OsmPrimitive osm : nodes) { 112 112 modified.add(osm); 113 } 113 114 } 114 115 115 116 @Override public MutableTreeNode description() { 116 return new DefaultMutableTreeNode(new JLabel(tr("Move")+" "+objects.size()+" "+trn("node","nodes",objects.size()), ImageProvider.get("data", "node"), JLabel.HORIZONTAL)); 117 return new DefaultMutableTreeNode(new JLabel(tr("Move")+" "+nodes.size()+" "+trn("node","nodes",nodes.size()), ImageProvider.get("data", "node"), JLabel.HORIZONTAL)); 118 } 119 120 public Collection<Node> getMovedNodes() { 121 return nodes; 117 122 } 118 123 } -
trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java
r1690 r1750 6 6 import java.util.ArrayList; 7 7 import java.util.Collection; 8 import java.util.HashMap;9 8 import java.util.List; 10 import java.util. Map;9 import java.util.logging.Logger; 11 10 12 11 import javax.swing.JLabel; … … 15 14 16 15 import org.openstreetmap.josm.Main; 16 import org.openstreetmap.josm.data.conflict.ConflictCollection; 17 17 import org.openstreetmap.josm.data.osm.DataSet; 18 18 import org.openstreetmap.josm.data.osm.Node; … … 21 21 import org.openstreetmap.josm.data.osm.RelationMember; 22 22 import org.openstreetmap.josm.data.osm.Way; 23 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 23 24 import org.openstreetmap.josm.tools.ImageProvider; 24 25 … … 34 35 * 35 36 */ 36 public class PurgePrimitivesCommand extends Command{ 37 37 public class PurgePrimitivesCommand extends ConflictResolveCommand{ 38 39 static private final Logger logger = Logger.getLogger(PurgePrimitivesCommand.class.getName()); 38 40 39 41 /** … … 144 146 private ArrayList<OsmParentChildPair> pairs; 145 147 146 private Map<OsmPrimitive, OsmPrimitive> resolvedConflicts;147 148 148 149 /** … … 154 155 purgedPrimitives = new ArrayList<OsmPrimitive>(); 155 156 pairs = new ArrayList<OsmParentChildPair>(); 156 resolvedConflicts = new HashMap<OsmPrimitive, OsmPrimitive>();157 157 } 158 158 … … 219 219 purge(toPurge, Main.ds, hive); 220 220 if (toPurge instanceof Node) { 221 Main.ds.nodes.remove(toPurge);221 getLayer().data.nodes.remove(toPurge); 222 222 } else if (primitive instanceof Way) { 223 Main.ds.ways.remove(toPurge);223 getLayer().data.ways.remove(toPurge); 224 224 } else if (primitive instanceof Relation) { 225 Main.ds.relations.remove(toPurge);225 getLayer().data.relations.remove(toPurge); 226 226 } 227 227 purgedPrimitives.add(toPurge); 228 if (Main.map.conflictDialog.conflicts.containsKey(toPurge)) { 229 resolvedConflicts.put(toPurge, Main.map.conflictDialog.conflicts.get(toPurge)); 230 Main.map.conflictDialog.removeConflictForPrimitive(toPurge); 228 ConflictCollection conflicts = getLayer().getConflicts(); 229 if (conflicts.hasConflictForMy(toPurge)) { 230 rememberConflict(conflicts.getConflictForMy(toPurge)); 231 conflicts.remove(toPurge); 231 232 } 232 233 } … … 246 247 @Override 247 248 public void undoCommand() { 249 if (! Main.map.mapView.hasLayer(getLayer())) { 250 logger.warning(tr("Can't undo command ''{0}'' because layer ''{1}'' is not present anymore", 251 this.toString(), 252 getLayer().toString() 253 )); 254 return; 255 } 256 Main.map.mapView.setActiveLayer(getLayer()); 248 257 249 258 // restore purged primitives 250 259 // 251 260 for (OsmPrimitive purged : purgedPrimitives) { 252 Main.ds.addPrimitive(purged); 253 } 254 255 // restore conflicts 256 // 257 for (OsmPrimitive primitive : resolvedConflicts.keySet()) { 258 Main.map.conflictDialog.addConflict(primitive, resolvedConflicts.get(primitive)); 259 } 260 261 getLayer().data.addPrimitive(purged); 262 } 263 reconstituteConflicts(); 261 264 // will restore the former references to the purged nodes 262 265 // -
trunk/src/org/openstreetmap/josm/command/RelationMemberConflictResolverCommand.java
r1676 r1750 6 6 import java.util.Collection; 7 7 import java.util.List; 8 import java.util.logging.Logger; 8 9 9 10 import javax.swing.JLabel; … … 15 16 import org.openstreetmap.josm.data.osm.Relation; 16 17 import org.openstreetmap.josm.data.osm.RelationMember; 18 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 17 19 import org.openstreetmap.josm.tools.ImageProvider; 18 20 … … 23 25 */ 24 26 public class RelationMemberConflictResolverCommand extends Command { 27 private static final Logger logger = Logger.getLogger(RelationMemberConflictResolverCommand.class.getName()); 25 28 26 29 /** my relation */ … … 32 35 */ 33 36 private final List<RelationMember> mergedMembers; 37 38 /** the layer this conflict is resolved in */ 39 private OsmDataLayer layer; 34 40 35 41 /** … … 71 77 my.members.add(n); 72 78 } 79 80 // remember the layer 81 layer = Main.main.map.mapView.getEditLayer(); 73 82 return true; 74 83 } … … 82 91 @Override 83 92 public void undoCommand() { 93 if (! Main.map.mapView.hasLayer(layer)) { 94 logger.warning(tr("Can't undo command ''{0}'' because layer ''{1}'' is not present anymore", 95 this.toString(), 96 layer.toString() 97 )); 98 return; 99 } 100 101 Main.map.mapView.setActiveLayer(layer); 102 OsmDataLayer editLayer = Main.map.mapView.getEditLayer(); 103 84 104 // restore the former state 85 105 // … … 88 108 // restore a conflict if necessary 89 109 // 90 if (! Main.map.conflictDialog.conflicts.containsKey(my)) {91 Main.map.conflictDialog.conflicts.put(my,their);110 if (!editLayer.getConflicts().hasConflictForMy(my)) { 111 editLayer.getConflicts().add(my,their); 92 112 } 93 113 } -
trunk/src/org/openstreetmap/josm/command/RemoveRelationMemberCommand.java
r630 r1750 64 64 NameVisitor v = new NameVisitor(); 65 65 relation.visit(v); 66 return new DefaultMutableTreeNode(new JLabel(tr("RemoveRelationMember ")+" "+tr(v.className)+" "+v.name, v.icon, JLabel.HORIZONTAL));66 return new DefaultMutableTreeNode(new JLabel(tr("RemoveRelationMember {0} {1}", tr(v.className), v.name), v.icon, JLabel.HORIZONTAL)); 67 67 } 68 68 } -
trunk/src/org/openstreetmap/josm/command/RotateCommand.java
r1728 r1750 30 30 * The objects to rotate. 31 31 */ 32 p ublic Collection<Node> objects = new LinkedList<Node>();32 private Collection<Node> nodes = new LinkedList<Node>(); 33 33 34 34 /** … … 70 70 public RotateCommand(Collection<OsmPrimitive> objects, EastNorth start, EastNorth end) { 71 71 72 this. objects = AllNodesVisitor.getAllNodes(objects);72 this.nodes = AllNodesVisitor.getAllNodes(objects); 73 73 pivot = new EastNorth(0,0); 74 74 75 for (Node n : this. objects) {75 for (Node n : this.nodes) { 76 76 OldState os = new OldState(); 77 77 os.latlon = new LatLon(n.getCoor()); … … 81 81 pivot = pivot.add(os.eastNorth.east(), os.eastNorth.north()); 82 82 } 83 pivot = new EastNorth(pivot.east()/this. objects.size(), pivot.north()/this.objects.size());83 pivot = new EastNorth(pivot.east()/this.nodes.size(), pivot.north()/this.nodes.size()); 84 84 85 85 rotationAngle = Math.PI/2; … … 105 105 */ 106 106 private void rotateNodes(boolean setModified) { 107 for (Node n : objects) {107 for (Node n : nodes) { 108 108 double cosPhi = Math.cos(rotationAngle); 109 109 double sinPhi = Math.sin(rotationAngle); … … 114 114 double ny = -cosPhi * x + sinPhi * y + pivot.north(); 115 115 n.setEastNorth(new EastNorth(nx, ny)); 116 if (setModified) 116 if (setModified) { 117 117 n.modified = true; 118 } 118 119 } 119 120 } … … 125 126 126 127 @Override public void undoCommand() { 127 for (Node n : objects) {128 for (Node n : nodes) { 128 129 OldState os = oldState.get(n); 129 130 n.setCoor(os.latlon); … … 133 134 134 135 @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) { 135 for (OsmPrimitive osm : objects)136 for (OsmPrimitive osm : nodes) { 136 137 modified.add(osm); 138 } 137 139 } 138 140 139 141 @Override public MutableTreeNode description() { 140 return new DefaultMutableTreeNode(new JLabel(tr("Rotate")+" "+objects.size()+" "+trn("node","nodes",objects.size()), ImageProvider.get("data", "node"), JLabel.HORIZONTAL)); 142 return new DefaultMutableTreeNode(new JLabel(tr("Rotate {0} {1}",nodes.size(),trn("node","nodes",nodes.size())), ImageProvider.get("data", "node"), JLabel.HORIZONTAL)); 143 } 144 145 public Collection<Node> getRotatedNodes() { 146 return nodes; 141 147 } 142 148 } -
trunk/src/org/openstreetmap/josm/command/SequenceCommand.java
r1169 r1750 33 33 */ 34 34 public SequenceCommand(String name, Collection<Command> sequenz) { 35 super(); 35 36 this.name = name; 36 37 this.sequence = new Command[sequenz.size()]; … … 45 46 } 46 47 47 public int executed_commands = 0;48 48 @Override public boolean executeCommand() { 49 49 for (int i=0; i < sequence.length; i++) { 50 50 Command c = sequence[i]; 51 51 boolean result = c.executeCommand(); 52 if (!result) 52 if (!result) { 53 53 Main.debug("SequenceCommand, executing command[" + i + "] " + c + " result: " + result); 54 } 54 55 if (!result && !continueOnError) { 55 56 this.undoCommands(i-1); … … 72 73 if (!sequence_complete) 73 74 return; 74 for (int i = start; i >= 0; --i) 75 for (int i = start; i >= 0; --i) { 75 76 sequence[i].undoCommand(); 77 } 76 78 } 77 79 … … 81 83 82 84 @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) { 83 for (Command c : sequence) 85 for (Command c : sequence) { 84 86 c.fillModifiedData(modified, deleted, added); 87 } 85 88 } 86 89 87 90 @Override public MutableTreeNode description() { 88 91 DefaultMutableTreeNode root = new DefaultMutableTreeNode(tr("Sequence")+": "+name); 89 for (Command c : sequence) 92 for (Command c : sequence) { 90 93 root.add(c.description()); 94 } 91 95 return root; 92 96 } -
trunk/src/org/openstreetmap/josm/command/TagConflictResolveCommand.java
r1670 r1750 6 6 import java.util.Collection; 7 7 import java.util.List; 8 import java.util.logging.Logger; 8 9 9 10 import javax.swing.JLabel; … … 11 12 import javax.swing.tree.MutableTreeNode; 12 13 13 import org.openstreetmap.josm.Main; 14 import org.openstreetmap.josm.data.osm.Node; 14 import org.openstreetmap.josm.data.conflict.Conflict; 15 15 import org.openstreetmap.josm.data.osm.OsmPrimitive; 16 16 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 17 import org.openstreetmap.josm.data.osm.Relation;18 import org.openstreetmap.josm.data.osm.Way;19 17 import org.openstreetmap.josm.gui.conflict.MergeDecisionType; 20 18 import org.openstreetmap.josm.gui.conflict.tags.TagMergeItem; … … 25 23 * 26 24 */ 27 public class TagConflictResolveCommand extends Command { 25 public class TagConflictResolveCommand extends ConflictResolveCommand { 26 private static final Logger logger = Logger.getLogger(TagConflictResolveCommand.class.getName()); 28 27 29 /** my primitive (in the local dataset). merge decisions are applied to this 30 * primitive 31 */ 32 private final OsmPrimitive my; 33 /** their primitive (in the server dataset) */ 34 private final OsmPrimitive their; 28 29 /** the conflict to resolve */ 30 private Conflict<OsmPrimitive> conflict; 35 31 36 32 /** the list of merge decisions, represented as {@see TagMergeItem}s */ 37 33 private final List<TagMergeItem> mergeItems; 34 38 35 39 36 /** … … 60 57 */ 61 58 public TagConflictResolveCommand(OsmPrimitive my, OsmPrimitive their, List<TagMergeItem> mergeItems) { 62 this.my = my; 63 this.their = their; 59 this.conflict = new Conflict<OsmPrimitive>(my,their); 64 60 this.mergeItems = mergeItems; 65 61 } … … 70 66 return new DefaultMutableTreeNode( 71 67 new JLabel( 72 tr("Resolve {0} tag conflicts in {1} {2}",getNumDecidedConflicts(), OsmPrimitiveType.from( my).getLocalizedDisplayNameSingular(), my.id),68 tr("Resolve {0} tag conflicts in {1} {2}",getNumDecidedConflicts(), OsmPrimitiveType.from(conflict.getMy()).getLocalizedDisplayNameSingular(), conflict.getMy().id), 73 69 ImageProvider.get("data", "object"), 74 70 JLabel.HORIZONTAL … … 88 84 for (TagMergeItem item: mergeItems) { 89 85 if (! item.getMergeDecision().equals(MergeDecisionType.UNDECIDED)) { 90 item.applyToMyPrimitive( my);86 item.applyToMyPrimitive(conflict.getMy()); 91 87 } 92 88 } 89 rememberConflict(conflict); 93 90 return true; 94 91 } … … 97 94 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, 98 95 Collection<OsmPrimitive> added) { 99 modified.add(my); 100 } 101 102 @Override 103 public void undoCommand() { 104 // restore former state of modified primitives 105 // 106 super.undoCommand(); 107 108 // restore a conflict if necessary 109 // 110 if (!Main.map.conflictDialog.conflicts.containsKey(my)) { 111 Main.map.conflictDialog.addConflict(my, their); 112 } 96 modified.add(conflict.getMy()); 113 97 } 114 98 } -
trunk/src/org/openstreetmap/josm/command/UndeletePrimitivesCommand.java
r1690 r1750 6 6 import java.util.ArrayList; 7 7 import java.util.Collection; 8 import java.util.HashMap; 9 import java.util.Map; 8 import java.util.logging.Logger; 10 9 11 10 import javax.swing.JLabel; … … 15 14 import org.openstreetmap.josm.Main; 16 15 import org.openstreetmap.josm.data.osm.OsmPrimitive; 16 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 17 17 import org.openstreetmap.josm.tools.ImageProvider; 18 18 19 19 /** 20 * Represents a command for undeleting a nodewhich was deleted on the server.20 * Represents a command for undeleting an {@see OsmPrimitive} which was deleted on the server. 21 21 * The command remembers the former node id and sets the node id to 0. This turns 22 22 * the node into a new node which can be uploaded to the server. 23 23 * 24 24 */ 25 public class UndeletePrimitivesCommand extends Command { 25 public class UndeletePrimitivesCommand extends ConflictResolveCommand { 26 static private final Logger logger = Logger.getLogger(UndeletePrimitivesCommand.class.getName()); 26 27 27 28 /** the node to undelete */ 28 29 private ArrayList<OsmPrimitive> toUndelete; 29 private Map<OsmPrimitive,OsmPrimitive> resolvedConflicts;30 30 31 31 protected UndeletePrimitivesCommand() { 32 32 toUndelete = new ArrayList<OsmPrimitive>(); 33 resolvedConflicts = new HashMap<OsmPrimitive, OsmPrimitive>();34 33 } 35 34 /** … … 77 76 public boolean executeCommand() { 78 77 super.executeCommand(); 78 79 79 for(OsmPrimitive primitive: toUndelete) { 80 if (Main.map.conflictDialog.conflicts.containsKey(primitive)) {81 re solvedConflicts.put(primitive, Main.map.conflictDialog.conflicts.get(primitive));82 Main.map.conflictDialog.removeConflictForPrimitive(primitive);80 if(getLayer().getConflicts().hasConflictForMy(primitive)) { 81 rememberConflict(getLayer().getConflicts().getConflictForMy(primitive)); 82 getLayer().getConflicts().remove(primitive); 83 83 } 84 84 primitive.id = 0; … … 92 92 modified.addAll(toUndelete); 93 93 } 94 @Override95 public void undoCommand() {96 super.undoCommand();97 98 for (OsmPrimitive my: resolvedConflicts.keySet()) {99 if (!Main.map.conflictDialog.conflicts.containsKey(my)) {100 Main.map.conflictDialog.addConflict(my, resolvedConflicts.get(my));101 }102 }103 }104 94 } -
trunk/src/org/openstreetmap/josm/command/VersionConflictResolveCommand.java
r1690 r1750 10 10 import javax.swing.tree.MutableTreeNode; 11 11 12 import org.openstreetmap.josm. Main;12 import org.openstreetmap.josm.data.conflict.Conflict; 13 13 import org.openstreetmap.josm.data.osm.OsmPrimitive; 14 14 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; … … 20 20 * 21 21 */ 22 public class VersionConflictResolveCommand extends Co mmand {22 public class VersionConflictResolveCommand extends ConflictResolveCommand { 23 23 24 private final OsmPrimitive my;25 private final OsmPrimitive their;24 /** the conflict to resolve */ 25 private Conflict<OsmPrimitive> conflict; 26 26 27 27 /** … … 31 31 */ 32 32 public VersionConflictResolveCommand(OsmPrimitive my, OsmPrimitive their) { 33 this.my = my; 34 this.their = their; 33 conflict = new Conflict<OsmPrimitive>(my, their); 35 34 } 36 35 … … 39 38 return new DefaultMutableTreeNode( 40 39 new JLabel( 41 tr("Resolve version conflicts for {0} {1}",OsmPrimitiveType.from( my).getLocalizedDisplayNameSingular(), my.id),40 tr("Resolve version conflicts for {0} {1}",OsmPrimitiveType.from(conflict.getMy()).getLocalizedDisplayNameSingular(),conflict.getMy().id), 42 41 ImageProvider.get("data", "object"), 43 42 JLabel.HORIZONTAL … … 49 48 public boolean executeCommand() { 50 49 super.executeCommand(); 51 my.version = Math.max(my.version, their.version); 52 Main.map.conflictDialog.removeConflictForPrimitive(my); 50 conflict.getMy().version = Math.max(conflict.getMy().version, conflict.getTheir().version); 51 getLayer().getConflicts().remove(conflict); 52 rememberConflict(conflict); 53 53 return true; 54 54 } … … 57 57 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, 58 58 Collection<OsmPrimitive> added) { 59 modified.add(my); 60 } 61 62 @Override 63 public void undoCommand() { 64 super.undoCommand(); 65 66 // restore a conflict if necessary 67 // 68 if (!Main.map.conflictDialog.conflicts.containsKey(my)) { 69 Main.map.conflictDialog.addConflict(my, their); 70 } 59 modified.add(conflict.getMy()); 71 60 } 72 61 } -
trunk/src/org/openstreetmap/josm/command/WayNodesConflictResolverCommand.java
r1654 r1750 6 6 import java.util.Collection; 7 7 import java.util.List; 8 import java.util.logging.Logger; 8 9 9 10 import javax.swing.JLabel; … … 11 12 import javax.swing.tree.MutableTreeNode; 12 13 13 import org.openstreetmap.josm. Main;14 import org.openstreetmap.josm.data.conflict.Conflict; 14 15 import org.openstreetmap.josm.data.osm.Node; 15 16 import org.openstreetmap.josm.data.osm.OsmPrimitive; … … 22 23 * 23 24 */ 24 public class WayNodesConflictResolverCommand extends Co mmand {25 public class WayNodesConflictResolverCommand extends ConflictResolveCommand { 25 26 26 /** my way */ 27 private final Way my; 28 /** their way */ 29 private final Way their; 27 static private final Logger logger = Logger.getLogger(WayNodesConflictResolverCommand.class.getName()); 28 29 /** the conflict to resolve */ 30 private Conflict<Way> conflict; 31 30 32 /** the list of merged nodes. This becomes the list of news of my way after the 31 33 * command is executed 32 34 */ 33 35 private final List<Node> mergedNodeList; 36 34 37 35 38 /** … … 40 43 */ 41 44 public WayNodesConflictResolverCommand(Way my, Way their, List<Node> mergedNodeList) { 42 this.my = my; 43 this.their = their; 45 conflict = new Conflict<Way>(my,their); 44 46 this.mergedNodeList = mergedNodeList; 45 47 } … … 50 52 return new DefaultMutableTreeNode( 51 53 new JLabel( 52 tr("Resolve conflicts in node list of of way {0}", my.id),54 tr("Resolve conflicts in node list of of way {0}", conflict.getMy().id), 53 55 ImageProvider.get("data", "object"), 54 56 JLabel.HORIZONTAL … … 66 68 // nodes 67 69 // 68 my.nodes.clear();70 conflict.getMy().nodes.clear(); 69 71 for (int i=0; i<mergedNodeList.size();i++) { 70 72 Node n = mergedNodeList.get(i); 71 my.nodes.add(n);72 if (! Main.ds.nodes.contains(n)) {73 System.out.println("Main.ds doesn't include node " + n.toString());73 conflict.getMy().nodes.add(n); 74 if (! getLayer().data.nodes.contains(n)) { 75 logger.warning(tr("Main.ds doesn't include node {0}", n.toString())); 74 76 } 75 77 } 78 rememberConflict(conflict); 76 79 return true; 77 80 } … … 80 83 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, 81 84 Collection<OsmPrimitive> added) { 82 modified.add(my); 83 } 84 85 @Override 86 public void undoCommand() { 87 // restore the former state 88 // 89 super.undoCommand(); 90 91 // restore a conflict if necessary 92 // 93 if (!Main.map.conflictDialog.conflicts.containsKey(my)) { 94 Main.map.conflictDialog.addConflict(my, their); 95 } 85 modified.add(conflict.getMy()); 96 86 } 97 87 }
Note: See TracChangeset
for help on using the changeset viewer.