[josm-dev] [PATCH 23/26] helper for Relation class

Dave Hansen dave at sr71.net
Tue Apr 29 03:03:05 BST 2008



---

 core-dave/src/org/openstreetmap/josm/data/osm/Relation.java |   33 ++++++++++++
 1 file changed, 33 insertions(+)

diff -puN src/org/openstreetmap/josm/data/osm/Relation.java~relation-updateMembers-p1 src/org/openstreetmap/josm/data/osm/Relation.java
--- core/src/org/openstreetmap/josm/data/osm/Relation.java~relation-updateMembers-p1	2008-04-28 18:59:32.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/data/osm/Relation.java	2008-04-28 18:59:32.000000000 -0700
@@ -1,9 +1,16 @@
 package org.openstreetmap.josm.data.osm;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.LinkedList;
 import java.util.List;
 
+import org.openstreetmap.josm.command.AddRelationMemberCommand;
+import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.command.RemoveRelationMemberCommand;
+import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.osm.visitor.Visitor;
 
 /**
@@ -73,4 +80,30 @@ public final class Relation extends OsmP
 				return true;
 		return false;
 	}
+
+	/**
+	 * @param from - the list of relation members that will get changed
+	 * @param to - relation member that will be the new target
+	 *
+	 * If any RelationMember is in @from, it will get updated to point
+	 * to @to.  If any RelationMember is no
+	 *
+	 * @return set of commands to perform the update
+	 */
+	public Command updateMembers(List<OsmPrimitive> _from, OsmPrimitive to) {
+		List<OsmPrimitive> from = new LinkedList<OsmPrimitive>(_from);
+		List<Command> cmds = new LinkedList<Command>();
+		if (from.contains(to))
+			from.remove(to);
+		for (RelationMember rm : this.members) {
+			// Don't copy the member if it to one of our ways, just keep a
+			// note to re-add it later on.
+			if (from.contains(rm.member)) {
+				RelationMember newrm = new RelationMember(rm.role, to);
+				cmds.add(new RemoveRelationMemberCommand(this, rm));
+				cmds.add(new AddRelationMemberCommand(this, newrm));
+			}
+		}
+		return new SequenceCommand(tr("Update relation members"), cmds);
+	}
 }
_




More information about the josm-dev mailing list