001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.actions.upload;
003
004 import static org.openstreetmap.josm.tools.I18n.tr;
005
006 import java.util.AbstractMap;
007 import java.util.Collection;
008 import java.util.HashMap;
009 import java.util.HashSet;
010 import java.util.List;
011
012 import org.openstreetmap.josm.Main;
013 import org.openstreetmap.josm.command.ChangePropertyCommand;
014 import org.openstreetmap.josm.command.SequenceCommand;
015 import org.openstreetmap.josm.data.APIDataSet;
016 import org.openstreetmap.josm.data.osm.OsmPrimitive;
017
018 /**
019 * Removes discardable tags such as created_by from all modified objects before upload
020 */
021 public class DiscardTagsHook implements UploadHook {
022
023 public boolean checkUpload(APIDataSet apiDataSet) {
024 List<OsmPrimitive> objectsToUpload = apiDataSet.getPrimitives();
025 Collection<String> discardableKeys = new HashSet<String>(OsmPrimitive.getDiscardableKeys());
026
027 boolean needsChange = false;
028 OUTER: for (OsmPrimitive osm : objectsToUpload) {
029 for (String key : osm.keySet()) {
030 if (discardableKeys.contains(key)) {
031 needsChange = true;
032 break OUTER;
033 }
034 }
035 }
036
037 if (needsChange) {
038 AbstractMap<String, String> map = new HashMap<String, String>();
039 for (String key : discardableKeys) {
040 map.put(key, null);
041 }
042
043 SequenceCommand removeKeys = new SequenceCommand(tr("Removed obsolete tags"),
044 new ChangePropertyCommand(objectsToUpload, map));
045 Main.main.undoRedo.add(removeKeys);
046 }
047 return true;
048 }
049
050 }