package de.westnordost.streetcomplete.data.statistics; import java.util.Date; import javax.inject.Inject; import de.westnordost.osmapi.changesets.ChangesetInfo; import de.westnordost.osmapi.changesets.ChangesetsDao; import de.westnordost.osmapi.changesets.QueryChangesetsFilters; import de.westnordost.osmapi.common.Handler; /** Gets ALL changesets of a certain user, ordered by date. (OSM server limits the result set of one * single query to 100) */ public class UserChangesetsDao { private final ChangesetsDao changesetsDao; @Inject public UserChangesetsDao(ChangesetsDao changesetsDao) { this.changesetsDao = changesetsDao; } public void findAll(final Handler<ChangesetInfo> handler, long userId, Date closedAfter) { RememberLastHandlerRelay relay = new RememberLastHandlerRelay(); relay.relayTo = handler; do { QueryChangesetsFilters filters = new QueryChangesetsFilters().byUser(userId); if(relay.earliest != null) { filters.byOpenSomeTimeBetween(relay.earliest.dateCreated, closedAfter); } relay.foundMore = false; changesetsDao.find(relay, filters); } while ( relay.foundMore ); } private class RememberLastHandlerRelay implements Handler<ChangesetInfo> { Handler<ChangesetInfo> relayTo; ChangesetInfo earliest; boolean foundMore; @Override public void handle(ChangesetInfo tea) { if(earliest == null || earliest.dateCreated.after(tea.dateCreated)) { earliest = tea; relayTo.handle(tea); foundMore = true; } } } }