001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.actions.relation; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005import static org.openstreetmap.josm.tools.I18n.trn; 006 007import java.awt.event.ActionEvent; 008import java.util.Collection; 009import java.util.LinkedList; 010 011import javax.swing.JOptionPane; 012 013import org.openstreetmap.josm.Main; 014import org.openstreetmap.josm.command.Command; 015import org.openstreetmap.josm.command.SequenceCommand; 016import org.openstreetmap.josm.data.SelectionChangedListener; 017import org.openstreetmap.josm.data.osm.OsmPrimitive; 018import org.openstreetmap.josm.data.osm.Relation; 019import org.openstreetmap.josm.gui.Notification; 020import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor; 021import org.openstreetmap.josm.gui.util.GuiHelper; 022import org.openstreetmap.josm.tools.ImageProvider; 023 024/** 025 * Add all objects selected in the current dataset after the last member of relation(s). 026 * @since 5799 027 */ 028public class AddSelectionToRelations extends AbstractRelationAction implements SelectionChangedListener { 029 /** 030 * Constructs a new <code>AddSelectionToRelation</code>. 031 */ 032 public AddSelectionToRelations() { 033 putValue(SMALL_ICON, ImageProvider.get("dialogs/conflict", "copyendright")); 034 putValue(SHORT_DESCRIPTION, tr("Add all objects selected in the current dataset after the last member")); 035 } 036 037 @Override 038 public void actionPerformed(ActionEvent e) { 039 Collection<Command> cmds = new LinkedList<>(); 040 for (Relation orig : relations) { 041 Command c = GenericRelationEditor.addPrimitivesToRelation(orig, Main.getLayerManager().getEditDataSet().getSelected()); 042 if (c != null) { 043 cmds.add(c); 044 } 045 } 046 if (!cmds.isEmpty()) { 047 Main.main.undoRedo.add(new SequenceCommand(tr("Add selection to relation"), cmds)); 048 new Notification( 049 "<html>"+ 050 tr("{0}Add selection to relation{1}: Verify every single relation to avoid damage!", "<strong>", "</strong>")+ 051 "</html>") 052 .setIcon(JOptionPane.WARNING_MESSAGE) 053 .show(); 054 } 055 } 056 057 @Override 058 public void updateEnabledState() { 059 putValue(NAME, trn("Add selection to {0} relation", "Add selection to {0} relations", 060 relations.size(), relations.size())); 061 } 062 063 @Override 064 public void selectionChanged(final Collection<? extends OsmPrimitive> newSelection) { 065 GuiHelper.runInEDT(() -> setEnabled(newSelection != null && !newSelection.isEmpty())); 066 } 067}