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 = objectsToUpload.stream().flatMap(AbstractPrimitive::keys) 030 .anyMatch(discardableKeys::contains); 031 032 if (needsChange) { 033 Map<String, String> map = new HashMap<>(); 034 for (String key : discardableKeys) { 035 map.put(key, null); 036 } 037 038 SequenceCommand removeKeys = new SequenceCommand(tr("Removed obsolete tags"), 039 new ChangePropertyCommand(objectsToUpload, map)); 040 UndoRedoHandler.getInstance().add(removeKeys); 041 } 042 return true; 043 } 044 045}