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 }