package org.osmtools.osmchange;
import org.osmtools.osc.OsmChange;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.client.RestOperations;
public class OsmChangeSyncService implements Runnable {
private Logger log = LoggerFactory.getLogger(getClass());
private RestOperations restOperations;
private OsmChangeService osmChangeService;
private SequenceHandler sequenceHandler;
private Granularity granularity;
public OsmChangeSyncService(Granularity granularity, RestOperations restOperations,
OsmChangeService osmChangeService, SequenceHandler sequenceHandler) {
this.granularity = granularity;
this.restOperations = restOperations;
this.osmChangeService = osmChangeService;
this.sequenceHandler = sequenceHandler;
}
@Override
public void run() {
OsmChangeResource osmChangeResource = new OsmChangeResource(restOperations);
int knownSequence = sequenceHandler.getKnownSequence();
int osmSequence = osmChangeResource.getOsmState(granularity);
SequenceIterator sequenceIterator = new SequenceIterator(granularity, knownSequence, osmSequence);
log.debug("Known sequence is {}, current osm sequence is {}. {} sequences to catch up.", new Object[] {
knownSequence, osmSequence, (osmSequence - knownSequence) });
for (Sequence sequence : sequenceIterator) {
log.debug("Getting sequence [{}] from url [{}]", sequence.getSequenceNo(), sequence.getUrl());
OsmChange osmChange = osmChangeResource.getOsmChange(sequence.getUrl());
osmChangeService.processOsmChange(osmChange);
sequenceHandler.updateSequence(sequence.getSequenceNo());
}
}
}