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.Collection; 007import java.util.HashMap; 008import java.util.HashSet; 009import java.util.List; 010import java.util.Map; 011 012import org.openstreetmap.josm.command.ChangePropertyCommand; 013import org.openstreetmap.josm.command.SequenceCommand; 014import org.openstreetmap.josm.data.APIDataSet; 015import org.openstreetmap.josm.data.UndoRedoHandler; 016import org.openstreetmap.josm.data.osm.AbstractPrimitive; 017import org.openstreetmap.josm.data.osm.OsmPrimitive; 018 019/** 020 * Removes discardable tags such as created_by from all modified objects before upload 021 */ 022public class DiscardTagsHook implements UploadHook { 023 024 @Override 025 public boolean checkUpload(APIDataSet apiDataSet) { 026 List<OsmPrimitive> objectsToUpload = apiDataSet.getPrimitives(); 027 Collection<String> discardableKeys = new HashSet<>(AbstractPrimitive.getDiscardableKeys()); 028 029 boolean needsChange = false; 030 OUTER: for (OsmPrimitive osm : objectsToUpload) { 031 for (String key : osm.keySet()) { 032 if (discardableKeys.contains(key)) { 033 needsChange = true; 034 break OUTER; 035 } 036 } 037 } 038 039 if (needsChange) { 040 Map<String, String> map = new HashMap<>(); 041 for (String key : discardableKeys) { 042 map.put(key, null); 043 } 044 045 SequenceCommand removeKeys = new SequenceCommand(tr("Removed obsolete tags"), 046 new ChangePropertyCommand(objectsToUpload, map)); 047 UndoRedoHandler.getInstance().add(removeKeys); 048 } 049 return true; 050 } 051 052}