| 1 | // License: GPL. For details, see LICENSE file.
|
|---|
| 2 | package org.openstreetmap.josm.gui.dialogs.properties;
|
|---|
| 3 |
|
|---|
| 4 | import static org.openstreetmap.josm.tools.I18n.tr;
|
|---|
| 5 |
|
|---|
| 6 | import java.util.Collection;
|
|---|
| 7 | import java.util.List;
|
|---|
| 8 |
|
|---|
| 9 | import javax.swing.JOptionPane;
|
|---|
| 10 |
|
|---|
| 11 | import org.openstreetmap.josm.command.ChangeMembersCommand;
|
|---|
| 12 | import org.openstreetmap.josm.data.UndoRedoHandler;
|
|---|
| 13 | import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
|
|---|
| 14 | import org.openstreetmap.josm.data.osm.Relation;
|
|---|
| 15 | import org.openstreetmap.josm.data.osm.RelationMember;
|
|---|
| 16 | import org.openstreetmap.josm.gui.MainApplication;
|
|---|
| 17 | import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
|
|---|
| 18 | import org.openstreetmap.josm.tools.Utils;
|
|---|
| 19 |
|
|---|
| 20 | /**
|
|---|
| 21 | * Quickly change the relation roles of the selected members.
|
|---|
| 22 | */
|
|---|
| 23 | final 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 | }
|
|---|