001    // License: GPL. Copyright 2007 by Immanuel Scholz and others
002    // Author: David Earl
003    package org.openstreetmap.josm.actions;
004    
005    import static org.openstreetmap.josm.tools.I18n.tr;
006    import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
007    
008    import java.awt.event.ActionEvent;
009    import java.awt.event.KeyEvent;
010    import java.util.Collection;
011    import org.openstreetmap.josm.Main;
012    
013    import org.openstreetmap.josm.data.osm.OsmPrimitive;
014    import org.openstreetmap.josm.data.osm.PrimitiveDeepCopy;
015    import org.openstreetmap.josm.tools.Shortcut;
016    
017    public final class DuplicateAction extends JosmAction{
018    
019        public DuplicateAction() {
020            super(tr("Duplicate"), "duplicate",
021                    tr("Duplicate selection by copy and immediate paste."),
022                    Shortcut.registerShortcut("system:duplicate", tr("Edit: {0}", tr("Duplicate")), KeyEvent.VK_D, Shortcut.CTRL), true);
023            putValue("help", ht("/Action/Duplicate"));
024        }
025    
026        public void actionPerformed(ActionEvent e) {
027            Main.main.menu.paste.pasteData(new PrimitiveDeepCopy(getCurrentDataSet().getSelected()), getEditLayer(), e);
028        }
029    
030        @Override
031        protected void updateEnabledState() {
032            if (getCurrentDataSet() == null) {
033                setEnabled(false);
034            } else {
035                updateEnabledState(getCurrentDataSet().getSelected());
036            }
037        }
038    
039        @Override
040        protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
041            setEnabled(selection != null && !selection.isEmpty());
042        }
043    }