// License: GPL. For details, see LICENSE file. package org.openstreetmap.hot.sds; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Collection; import org.openstreetmap.hot.sds.SeparateDataStorePlugin.QueueItem; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.gui.progress.ProgressMonitor; import org.openstreetmap.josm.io.OsmServerWritePostprocessor; public class WritePostprocessor implements OsmServerWritePostprocessor { SeparateDataStorePlugin plugin; public WritePostprocessor(SeparateDataStorePlugin plugin) { this.plugin = plugin; } @Override public void postprocessUploadedPrimitives(Collection<OsmPrimitive> primitives, ProgressMonitor progress) { StringWriter swriter = new StringWriter(); try (SdsWriter sdsWriter = new SdsWriter(new PrintWriter(swriter))) { sdsWriter.header(); boolean somethingWritten = false; for (OsmPrimitive p : primitives) { for (QueueItem q : plugin.uploadQueue) { if (q.primitive.equals(p) && !q.sdsOnly) { sdsWriter.write(q.primitive, q.tags); somethingWritten = true; q.processed = true; continue; } } } for (QueueItem q : plugin.uploadQueue) { if (q.sdsOnly) { sdsWriter.write(q.primitive, q.tags); somethingWritten = true; q.processed = true; } } if (somethingWritten) { sdsWriter.footer(); SdsApi api = SdsApi.getSdsApi(); System.out.println("sending message:\n" + swriter.toString()); api.updateSds(swriter.toString(), progress); } } for (OsmPrimitive p : primitives) { plugin.learn(p); } for (QueueItem q : plugin.uploadQueue) { if (q.sdsOnly) { q.primitive.setModified(false); plugin.learn(q.primitive); } } plugin.clearQueue(); // TODO: if exception -> resetQueue } }