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

Last change on this file since 13632 was 13611, checked in by Don-vip, 6 years ago

fix #16176 - NPE

  • Property svn:eol-style set to native
File size: 3.0 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.LinkedList;
10
11import javax.swing.JOptionPane;
12
13import org.openstreetmap.josm.command.Command;
14import org.openstreetmap.josm.command.SequenceCommand;
15import org.openstreetmap.josm.data.SelectionChangedListener;
16import org.openstreetmap.josm.data.osm.DataSet;
17import org.openstreetmap.josm.data.osm.OsmPrimitive;
18import org.openstreetmap.josm.data.osm.OsmUtils;
19import org.openstreetmap.josm.data.osm.Relation;
20import org.openstreetmap.josm.gui.MainApplication;
21import org.openstreetmap.josm.gui.Notification;
22import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor;
23import org.openstreetmap.josm.gui.util.GuiHelper;
24import org.openstreetmap.josm.tools.ImageProvider;
25
26/**
27 * Add all objects selected in the current dataset after the last member of relation(s).
28 * @since 5799
29 */
30public class AddSelectionToRelations extends AbstractRelationAction implements SelectionChangedListener {
31 /**
32 * Constructs a new <code>AddSelectionToRelation</code>.
33 */
34 public AddSelectionToRelations() {
35 new ImageProvider("dialogs/conflict", "copyendright").getResource().attachImageIcon(this, true);
36 putValue(SHORT_DESCRIPTION, tr("Add all objects selected in the current dataset after the last member"));
37 }
38
39 @Override
40 public void actionPerformed(ActionEvent e) {
41 Collection<Command> cmds = new LinkedList<>();
42 for (Relation orig : relations) {
43 Command c = GenericRelationEditor.addPrimitivesToRelation(orig, MainApplication.getLayerManager().getActiveDataSet().getSelected());
44 if (c != null) {
45 cmds.add(c);
46 }
47 }
48 if (!cmds.isEmpty()) {
49 MainApplication.undoRedo.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 DataSet ds = MainApplication.getLayerManager().getActiveDataSet();
64 if (ds != null) {
65 selectionChanged(ds.getSelected());
66 } else {
67 setEnabled(false);
68 }
69 }
70
71 @Override
72 public void selectionChanged(final Collection<? extends OsmPrimitive> newSelection) {
73 GuiHelper.runInEDT(() -> setEnabled(newSelection != null && !newSelection.isEmpty()
74 && OsmUtils.isOsmCollectionEditable(relations)));
75 }
76}
Note: See TracBrowser for help on using the repository browser.