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