package mediawiki.request.generic; import java.util.ArrayList; import java.util.List; import javat.xml.Document; import javat.xml.Element; import mediawiki.MediaWikiConnection; import mediawiki.MediaWikiPostRequest; public abstract class OffsetContinuingRequest<T> extends ContinuingRequest<T> { protected OffsetContinuingRequest(String entry, String prefix) { super(entry, prefix); } @Override public List<T> request(MediaWikiConnection c) throws Exception { ArrayList<T> r = new ArrayList<>(); MediaWikiPostRequest p = new MediaWikiPostRequest(c); p.putData(getProperties()); if(getRequiredParameters() != null) p.putData(getRequiredParameters()); p.putData("continue",""); Document d = p.requestDocument(); while(true){ Element e; try{ e = findGroup(d.getRootElement().getChildren("query").get(0)); }catch(IndexOutOfBoundsException e2){ return r; } if(e == null) return r; for(Element a : e.getChildren(getEntry())){ r.add(parse(a)); if(r.size() >= getLimit()) return r; } if(d.getRootElement().getChildren("continue").size() == 0) break; p.putData(getPrefix()+"offset", d.getRootElement().getChildren("continue").get(0).getAttribute(getPrefix()+"offset").getValue()); d = p.requestDocument(); } return r; } }