// License: GPL. For details, see LICENSE file.
package reverter;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.io.IOException;
import java.io.InputStream;
import org.openstreetmap.josm.data.osm.DataSet;
import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
import org.openstreetmap.josm.data.osm.PrimitiveId;
import org.openstreetmap.josm.gui.progress.ProgressMonitor;
import org.openstreetmap.josm.io.IllegalDataException;
import org.openstreetmap.josm.io.OsmServerReader;
import org.openstreetmap.josm.io.OsmTransferException;
import org.xml.sax.SAXException;
public class OsmServerMultiObjectReader extends OsmServerReader {
private final MultiOsmReader rdr = new MultiOsmReader();
public void readObject(PrimitiveId id, int version, ProgressMonitor progressMonitor) throws OsmTransferException {
readObject(id.getUniqueId(), version, id.getType(), progressMonitor);
}
public void readObject(long id, int version, OsmPrimitiveType type, ProgressMonitor progressMonitor) throws OsmTransferException {
StringBuffer sb = new StringBuffer();
sb.append(type.getAPIName());
sb.append("/");
sb.append(id);
sb.append("/");
sb.append(version);
progressMonitor.beginTask("", 1);
try (InputStream in = getInputStream(sb.toString(), progressMonitor.createSubTaskMonitor(1, true))) {
rdr.addData(in);
} catch (IOException | IllegalDataException e) {
throw new OsmTransferException(e);
} finally {
progressMonitor.finishTask();
}
}
/**
* Method to parse downloaded objects
* @return the data requested
* @throws SAXException in case of SAX error
* @throws IOException in case of I/O error
*/
@Override
public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
progressMonitor.beginTask("", 1);
progressMonitor.subTask(tr("Preparing history data..."));
try {
rdr.processData();
return rdr.getDataSet();
} catch (Exception e) {
throw new OsmTransferException(e);
} finally {
progressMonitor.finishTask();
activeConnection = null;
}
}
}