source: josm/trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java@ 16438

Last change on this file since 16438 was 16438, checked in by simon04, 4 years ago

see #19251 - Java 8: use Stream

  • Property svn:eol-style set to native
File size: 3.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions.relation;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5import static org.openstreetmap.josm.tools.I18n.trn;
6
7import java.awt.event.ActionEvent;
8import java.util.Collection;
9import java.util.Objects;
10
11import javax.swing.JOptionPane;
12
13import org.openstreetmap.josm.command.Command;
14import org.openstreetmap.josm.command.SequenceCommand;
15import org.openstreetmap.josm.data.UndoRedoHandler;
16import org.openstreetmap.josm.data.osm.DataSelectionListener;
17import org.openstreetmap.josm.data.osm.IPrimitive;
18import org.openstreetmap.josm.data.osm.OsmData;
19import org.openstreetmap.josm.data.osm.OsmUtils;
20import org.openstreetmap.josm.data.osm.Relation;
21import org.openstreetmap.josm.gui.MainApplication;
22import org.openstreetmap.josm.gui.Notification;
23import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor;
24import org.openstreetmap.josm.gui.util.GuiHelper;
25import org.openstreetmap.josm.tools.ImageProvider;
26import org.openstreetmap.josm.tools.StreamUtils;
27import org.openstreetmap.josm.tools.Utils;
28
29/**
30 * Add all objects selected in the current dataset after the last member of relation(s).
31 * @since 5799
32 */
33public class AddSelectionToRelations extends AbstractRelationAction implements DataSelectionListener {
34 /**
35 * Constructs a new <code>AddSelectionToRelation</code>.
36 */
37 public AddSelectionToRelations() {
38 new ImageProvider("dialogs/conflict", "copyendright").getResource().attachImageIcon(this, true);
39 putValue(SHORT_DESCRIPTION, tr("Add all objects selected in the current dataset after the last member"));
40 }
41
42 @Override
43 public void actionPerformed(ActionEvent e) {
44 Collection<Command> cmds = Utils.filteredCollection(relations, Relation.class).stream()
45 .map(orig -> GenericRelationEditor.addPrimitivesToRelation(orig, MainApplication.getLayerManager().getActiveDataSet().getSelected()))
46 .filter(Objects::nonNull)
47 .collect(StreamUtils.toUnmodifiableList());
48 if (!cmds.isEmpty()) {
49 UndoRedoHandler.getInstance().add(new SequenceCommand(tr("Add selection to relation"), cmds));
50 new Notification(
51 "<html>"+
52 tr("{0}Add selection to relation{1}: Verify every single relation to avoid damage!", "<strong>", "</strong>")+
53 "</html>")
54 .setIcon(JOptionPane.WARNING_MESSAGE)
55 .show();
56 }
57 }
58
59 @Override
60 public void updateEnabledState() {
61 int size = relations.size();
62 putValue(NAME, trn("Add selection to {0} relation", "Add selection to {0} relations", size, size));
63 OsmData<?, ?, ?, ?> ds = MainApplication.getLayerManager().getActiveData();
64 if (ds != null) {
65 selectionChanged(ds.getSelected());
66 } else {
67 setEnabled(false);
68 }
69 }
70
71 private void selectionChanged(final Collection<? extends IPrimitive> newSelection) {
72 GuiHelper.runInEDT(() -> setEnabled(newSelection != null && !newSelection.isEmpty()
73 && OsmUtils.isOsmCollectionEditable(relations)));
74 }
75
76 @Override
77 public void selectionChanged(SelectionChangeEvent event) {
78 selectionChanged(event.getSelection());
79 }
80}
Note: See TracBrowser for help on using the repository browser.