001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.actions;
003    
004    import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
005    import static org.openstreetmap.josm.tools.I18n.tr;
006    
007    import java.awt.event.KeyEvent;
008    import java.util.Collection;
009    import java.util.Collections;
010    
011    import org.openstreetmap.josm.data.osm.OsmPrimitive;
012    import org.openstreetmap.josm.tools.Shortcut;
013    
014    /**
015     * This action synchronizes a set of primitives with their state on the server.
016     *
017     */
018    public class UpdateModifiedAction extends UpdateSelectionAction {
019    
020        /**
021         * constructor
022         */
023        public UpdateModifiedAction() {
024            super(tr("Update modified"),
025                    "updatemodified",
026                    tr("Updates the currently modified objects from the server (re-downloads data)"),
027                    Shortcut.registerShortcut("file:updatemodified",
028                            tr("File: {0}", tr("Update modified")), KeyEvent.VK_M,
029                            Shortcut.ALT_CTRL),
030                            true);
031            putValue("help", ht("/Action/UpdateModified"));
032        }
033    
034        // FIXME: overrides the behaviour of UpdateSelectionAction. Doesn't update
035        // the enabled state based on the current selection because
036        // it doesn't depend on it.
037        // The action should be enabled/disabled based on whether there is a least
038        // one modified object in the current dataset. Unfortunately, there is no
039        // efficient way to find out here. getDataSet().allModifiedPrimitives() is
040        // too heavy weight because it loops over the whole dataset.
041        // Perhaps this action should  be a DataSetListener? Or it could listen to the
042        // REQUIRES_SAVE_TO_DISK_PROP and REQUIRES_UPLOAD_TO_SERVER_PROP properties
043        // in the OsmLayer?
044        //
045        @Override
046        protected void updateEnabledState() {
047            setEnabled(getCurrentDataSet() != null);
048        }
049    
050        @Override
051        protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
052        }
053    
054        @Override
055        public Collection<OsmPrimitive> getData() {
056            if (getCurrentDataSet() == null) return Collections.emptyList();
057            return getCurrentDataSet().allModifiedPrimitives();
058        }
059    }