source: josm/trunk/src/org/openstreetmap/josm/command/UndeletePrimitivesCommand.java@ 4806

Last change on this file since 4806 was 4191, checked in by stoecker, 13 years ago

remove old debug stuff

  • Property svn:eol-style set to native
File size: 4.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.command;
3
4import static org.openstreetmap.josm.tools.I18n.trn;
5
6import java.util.ArrayList;
7import java.util.Collection;
8import java.util.Collections;
9import java.util.List;
10import java.util.ListIterator;
11
12import javax.swing.JLabel;
13
14import org.openstreetmap.josm.data.osm.DataSet;
15import org.openstreetmap.josm.data.osm.Node;
16import org.openstreetmap.josm.data.osm.OsmPrimitive;
17import org.openstreetmap.josm.data.osm.Relation;
18import org.openstreetmap.josm.data.osm.RelationMember;
19import org.openstreetmap.josm.data.osm.Way;
20import org.openstreetmap.josm.tools.ImageProvider;
21
22/**
23 * Represents a command for undeleting an {@see OsmPrimitive} which was deleted on the server.
24 * The command remembers the former node id and sets the node id to 0. This turns
25 * the node into a new node which can be uploaded to the server.
26 *
27 */
28@Deprecated
29public class UndeletePrimitivesCommand extends ConflictResolveCommand {
30 /** the node to undelete */
31 private final List<OsmPrimitive> toUndelete = new ArrayList<OsmPrimitive>();
32 /** primitives that replaced undeleted primitives */
33 private final List<OsmPrimitive> replacedPrimitives = new ArrayList<OsmPrimitive>();
34
35 /**
36 * constructor
37 * @param node the node to undelete
38 */
39 public UndeletePrimitivesCommand(OsmPrimitive node) {
40 toUndelete.add(node);
41 }
42
43 /**
44 * constructor
45 * @param node the node to undelete
46 */
47 public UndeletePrimitivesCommand(OsmPrimitive ... toUndelete) {
48 for (int i=0; i < toUndelete.length; i++) {
49 this.toUndelete.add(toUndelete[i]);
50 }
51 }
52
53 /**
54 * constructor
55 * @param node the node to undelete
56 */
57 public UndeletePrimitivesCommand(Collection<OsmPrimitive> toUndelete) {
58 this.toUndelete.addAll(toUndelete);
59 }
60
61 @Override public JLabel getDescription() {
62 return new JLabel(
63 trn("Undelete {0} object", "Undelete {0} objects", toUndelete.size(), toUndelete.size()),
64 ImageProvider.get("data", "object"),
65 JLabel.HORIZONTAL
66 );
67 }
68
69 @Override
70 public boolean executeCommand() {
71 super.executeCommand();
72
73 replacedPrimitives.clear();
74 for(OsmPrimitive primitive: toUndelete) {
75 if(getLayer().getConflicts().hasConflictForMy(primitive)) {
76 rememberConflict(getLayer().getConflicts().getConflictForMy(primitive));
77 getLayer().getConflicts().remove(primitive);
78 }
79 OsmPrimitive prim;
80 switch (primitive.getType()) {
81 case NODE:
82 prim = new Node((Node)primitive, true);
83 break;
84 case WAY:
85 prim = new Way((Way)primitive, true);
86 break;
87 case RELATION:
88 prim = new Relation((Relation)primitive, true);
89 break;
90 default:
91 throw new AssertionError();
92 }
93 replacedPrimitives.add(prim);
94 replacePrimitive(getLayer().data, primitive, prim);
95 }
96 return true;
97 }
98
99 private void replacePrimitive(DataSet dataSet, OsmPrimitive oldPrim, OsmPrimitive newPrim) {
100 dataSet.addPrimitive(newPrim);
101 for (OsmPrimitive referrer: oldPrim.getReferrers()) {
102 if (referrer instanceof Way) {
103 Way w = (Way)referrer;
104 List<Node> nodes = w.getNodes();
105 Collections.replaceAll(nodes, (Node)oldPrim, (Node)newPrim);
106 w.setNodes(nodes);
107 w.setModified(true);
108 } else if (referrer instanceof Relation) {
109 Relation r = (Relation)referrer;
110 List<RelationMember> members = r.getMembers();
111 ListIterator<RelationMember> it = members.listIterator();
112 while (it.hasNext()) {
113 RelationMember rm = it.next();
114 if (rm.getMember() == oldPrim) {
115 it.set(new RelationMember(rm.getRole(), newPrim));
116 }
117 }
118 r.setMembers(members);
119 r.setModified(true);
120 }
121 }
122 dataSet.removePrimitive(oldPrim);
123 }
124
125 @Override
126 public void undoCommand() {
127 for (int i=0; i<toUndelete.size(); i++) {
128 replacePrimitive(getLayer().data, replacedPrimitives.get(i), toUndelete.get(i));
129 }
130 super.undoCommand();
131 }
132
133 @Override
134 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
135 Collection<OsmPrimitive> added) {
136 }
137}
Note: See TracBrowser for help on using the repository browser.