source: josm/trunk/src/org/openstreetmap/josm/command/RemoveRelationMemberCommand.java@ 2435

Last change on this file since 2435 was 2070, checked in by Gubaer, 15 years ago

new: rewrite of CombineWay action
new: conflict resolution dialog for CombineWay, including conflicts for different relation memberships
cleanup: cleanup in OsmReader, reduces memory footprint and reduces parsing time
cleanup: made most of the public fields in OsmPrimitive @deprecated, added accessors and changed the code
cleanup: replaced usages of @deprecated constructors for ExtendedDialog
fixed #3208: Combine ways brokes relation order

WARNING: this changeset touches a lot of code all over the code base. "latest" might become slightly unstable in the next days. Also experience incompatibility issues with plugins in the next few days.

File size: 3.2 KB
Line 
1// License: GPL. Copyright 2007 by Immanuel Scholz and others
2package org.openstreetmap.josm.command;
3
4import static org.openstreetmap.josm.tools.I18n.marktr;
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import java.util.Collection;
8
9import javax.swing.JLabel;
10import javax.swing.tree.DefaultMutableTreeNode;
11import javax.swing.tree.MutableTreeNode;
12
13import org.openstreetmap.josm.Main;
14import org.openstreetmap.josm.data.osm.OsmPrimitive;
15import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
16import org.openstreetmap.josm.data.osm.Relation;
17import org.openstreetmap.josm.data.osm.RelationMember;
18import org.openstreetmap.josm.gui.DefaultNameFormatter;
19import org.openstreetmap.josm.tools.ImageProvider;
20
21/**
22 * Command that adds a relation to an OSM object
23 *
24 * @author daveh
25 */
26public class RemoveRelationMemberCommand extends Command {
27
28 // container object in which to replace a sub object
29 private final Relation relation;
30 // the sub-object to be replaced
31 private final RelationMember member;
32 // its replacement
33 private int location = -1;
34
35 public RemoveRelationMemberCommand(Relation _relation, RelationMember _member) {
36 this.relation = _relation;
37 this.member = _member;
38 }
39 public RemoveRelationMemberCommand(Relation _relation, RelationMember _member, int _location) {
40 this.relation = _relation;
41 this.member = _member;
42 location = _location;
43 }
44
45 @Override public boolean executeCommand() {
46 super.executeCommand();
47 int removeIndex = relation.getMembers().indexOf(member);
48 if ((location != -1) && (removeIndex != location)) {
49 Main.debug("error removing relation member");
50 return false;
51 } else {
52 relation.removeMember(removeIndex);
53 relation.setModified(true);
54 return true;
55 }
56 }
57
58 @Override public void undoCommand() {
59 super.undoCommand();
60 relation.addMember(member);
61 relation.setModified(this.getOrig(relation).isModified());
62 }
63
64 @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) {}
65
66 @Override public MutableTreeNode description() {
67 String msg = "";
68 switch(OsmPrimitiveType.from(member.getMember())) {
69 case NODE: msg = marktr("Remove node ''{0}'' at position {1} from relation ''{2}''"); break;
70 case WAY: msg = marktr("Remove way ''{0}'' at position {1} from relation ''{2}''"); break;
71 case RELATION: msg = marktr("Remove relation ''{0}'' at position {1} from relation ''{2}''"); break;
72 }
73 return new DefaultMutableTreeNode(
74 new JLabel(
75 tr(msg,
76 member.getMember().getDisplayName(DefaultNameFormatter.getInstance()),
77 relation.getMembers().indexOf(member),
78 relation.getDisplayName(DefaultNameFormatter.getInstance())
79 ),
80 ImageProvider.get(OsmPrimitiveType.from(relation)),
81 JLabel.HORIZONTAL
82 )
83 );
84 }
85}
Note: See TracBrowser for help on using the repository browser.