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;
abstract public class AbstractContinuingRequest<T> extends ContinuingRequest<T> {
public AbstractContinuingRequest(String e, String p) {
super(e,p);
}
@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()+"continue", d.getRootElement().getChildren("continue").get(0).getAttribute(getPrefix()+"continue").getValue());
d = p.requestDocument();
}
return r;
}
}