package org.osmtools.osmchange; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.osmtools.osc.OsmChange; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestOperations; @Service public class OsmChangeResource { private static final String STATE_URL = "http://planet.openstreetmap.org/replication/{granularity}/state.txt"; private RestOperations restOperations; @Autowired public OsmChangeResource(RestOperations restOperations) { this.restOperations = restOperations; } public int getOsmState(Granularity granularity) { String result = restOperations.getForObject(STATE_URL, String.class, granularity.name()); Pattern pattern = Pattern.compile(".*sequenceNumber=(\\d*).*", Pattern.MULTILINE | Pattern.DOTALL); Matcher matcher = pattern.matcher(result); if (matcher.matches()) { String state = matcher.group(1); return Integer.parseInt(state); } throw new RuntimeException("Cannot find sequenceNumber in [" + result + "]"); } public OsmChange getOsmChange(String url) { ResponseEntity<OsmChange> entity = restOperations.getForEntity(url, OsmChange.class); return entity.getBody(); } }