source: josm/trunk/src/org/openstreetmap/josm/command/ChangeMembersCommand.java

Last change on this file was 17242, checked in by GerdP, 3 years ago

see #19885: memory leak with "temporary" objects in validator and actions
Allow empty member list. Unlike with ways we allow empty relations.

File size: 2.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.command;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.util.Collection;
7import java.util.List;
8import java.util.Objects;
9
10import org.openstreetmap.josm.data.osm.DataSet;
11import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
12import org.openstreetmap.josm.data.osm.OsmPrimitive;
13import org.openstreetmap.josm.data.osm.Relation;
14import org.openstreetmap.josm.data.osm.RelationMember;
15
16/**
17 * Command that changes the members of a relation.
18 * The same can be done with ChangeCommand, but this is more efficient.
19 * @author Gerd Petermann
20 * @since 17199
21 *
22 */
23public class ChangeMembersCommand extends Command {
24
25 private final Relation relation;
26 private final List<RelationMember> cmdMembers;
27
28 /**
29 * Constructs a new {@code ChangeMembersCommand} in the context of a given data set.
30 * @param data the data set. Must not be null.
31 * @param relation the relation
32 * @param newMembers the new member list, must not be empty
33 */
34 public ChangeMembersCommand(DataSet data, Relation relation, List<RelationMember> newMembers) {
35 super(data);
36 this.relation = Objects.requireNonNull(relation, "relation");
37 this.cmdMembers = Objects.requireNonNull(newMembers, "newMembers");
38 }
39
40 /**
41 * Constructs a new {@code ChangeMembersCommand} in the context of {@code r} data set.
42 * @param relation the relation. It must belong to a data set
43 * @param newMembers the new member list, must not be empty
44 */
45 public ChangeMembersCommand(Relation relation, List<RelationMember> newMembers) {
46 this(relation.getDataSet(), relation, newMembers);
47 }
48
49 @Override
50 public boolean executeCommand() {
51 super.executeCommand();
52 relation.setMembers(cmdMembers);
53 relation.setModified(true);
54 return true;
55
56 }
57
58 @Override
59 public String getDescriptionText() {
60 return tr("Change members of {0}", relation.getDisplayName(DefaultNameFormatter.getInstance()));
61 }
62
63 @Override
64 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
65 Collection<OsmPrimitive> added) {
66 modified.add(relation);
67 }
68
69 @Override
70 public int hashCode() {
71 return Objects.hash(super.hashCode(), relation, cmdMembers);
72 }
73
74 @Override
75 public boolean equals(Object obj) {
76 if (this == obj) return true;
77 if (obj == null || getClass() != obj.getClass()) return false;
78 if (!super.equals(obj)) return false;
79 ChangeMembersCommand that = (ChangeMembersCommand) obj;
80 return Objects.equals(relation, that.relation) &&
81 Objects.equals(cmdMembers, that.cmdMembers);
82 }
83
84}
Note: See TracBrowser for help on using the repository browser.