source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/properties/RelationRoleEditor.java

Last change on this file was 18692, checked in by taylor.smock, 3 years ago

Fix #21965: Reuse same instance of "<different>" for consistency (patch by gaben)

File size: 2.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.properties;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.util.Collection;
7import java.util.List;
8
9import javax.swing.JOptionPane;
10
11import org.openstreetmap.josm.command.ChangeMembersCommand;
12import org.openstreetmap.josm.data.UndoRedoHandler;
13import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
14import org.openstreetmap.josm.data.osm.Relation;
15import org.openstreetmap.josm.data.osm.RelationMember;
16import org.openstreetmap.josm.gui.MainApplication;
17import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
18import org.openstreetmap.josm.tools.Utils;
19
20/**
21 * Quickly change the relation roles of the selected members.
22 */
23final class RelationRoleEditor {
24
25 private RelationRoleEditor() {
26 }
27
28 /**
29 * Shows an {{@linkplain JOptionPane#showInputDialog input dialog} in order to quickly change
30 * the roles of the selected members.
31 * @param relation the relation to edit
32 * @param memberInfo the corresponding member info
33 */
34 static void editRole(Relation relation, PropertiesDialog.MemberInfo memberInfo) {
35 if (MainApplication.getLayerManager().getActiveDataLayer().isLocked()) {
36 return;
37 }
38 final Collection<RelationMember> members = Utils.filteredCollection(memberInfo.getRole(), RelationMember.class);
39 final String oldRole = memberInfo.getRoleString();
40 final DefaultNameFormatter formatter = DefaultNameFormatter.getInstance();
41 final String newRole = JOptionPane.showInputDialog("<html>" + tr("Change role for {0} in relation {1}",
42 formatter.formatAsHtmlUnorderedList(Utils.transform(members, RelationMember::getMember), 5),
43 formatter.formatAsHtmlUnorderedList(relation)),
44 oldRole);
45 if (newRole == null || oldRole.equals(newRole) || KeyedItem.DIFFERENT_I18N.equals(newRole)) {
46 return;
47 }
48 final List<RelationMember> newMembers = relation.getMembers();
49 newMembers.replaceAll(m -> members.contains(m) ? new RelationMember(Utils.strip(newRole), m.getMember()) : m);
50 UndoRedoHandler.getInstance().add(new ChangeMembersCommand(relation, newMembers));
51 }
52}
Note: See TracBrowser for help on using the repository browser.