// License: GPL. For details, see LICENSE file.
package org.openstreetmap.hot.sds;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map.Entry;
import org.openstreetmap.josm.data.osm.Changeset;
import org.openstreetmap.josm.data.osm.Tagged;
import org.openstreetmap.josm.io.OsmWriter;
import org.openstreetmap.josm.io.XmlWriter;
/**
* This is a special version of JOSM's OsmWriter that makes
* sure that special tags are never written to JOSM's standard
* output channels.
*
* In the context of HOT's separate data store, this is very
* important as otherwise private/confidential information could
* end up on public servers.
*
* @author Frederik Ramm
*
*/
public class SdsOsmWriter extends OsmWriter {
private SeparateDataStorePlugin plugin;
public SdsOsmWriter(SeparateDataStorePlugin plugin, PrintWriter out, boolean osmConform, String version) {
super(out, osmConform, version);
this.plugin = plugin;
}
@Override
protected void addTags(Tagged osm, String tagname, boolean tagOpen) {
if (osm.hasKeys()) {
if (tagOpen) {
out.println(">");
}
List<Entry<String, String>> entries = new ArrayList<>(osm.getKeys().entrySet());
Collections.sort(entries, byKeyComparator);
for (Entry<String, String> e : entries) {
String key = e.getKey();
if (!(osm instanceof Changeset) && ("created_by".equals(key))) continue;
if (key.startsWith(plugin.getIgnorePrefix())) continue;
out.println(" <tag k='"+ XmlWriter.encode(e.getKey()) +
"' v='"+XmlWriter.encode(e.getValue())+ "' />");
}
out.println(" </" + tagname + ">");
} else if (tagOpen) {
out.println(" />");
} else {
out.println(" </" + tagname + ">");
}
}
}