package mediawiki.task.config.actwp;
import java.io.IOException;
import java.net.URL;
import java.util.Scanner;
import mediawiki.MediaWikiConnection;
import mediawiki.info.Article;
import mediawiki.info.wikibase.Sitelink;
import mediawiki.request.ArticleForNameRequest;
import mediawiki.request.wikibase.GetSitelinkRequest;
public class AutolistSelector implements ACtWPSelector {
private String url;
public AutolistSelector(URL u){
url = u.toExternalForm();
}
public AutolistSelector(String u){
url = u;
}
private Scanner s = null;
private MediaWikiConnection wikidata;
private MediaWikiConnection wikipedia;
@Override
public void prepare(MediaWikiConnection wikidata,
MediaWikiConnection wikipedia) {
this.wikidata = wikidata;
this.wikipedia = wikipedia;
}
@Override
public boolean hasNext() throws Exception {
if(s == null)
throw new IllegalStateException("please fetch first");
return s.hasNextLine();
}
@Override
public Article next() throws Exception {
if(s == null)
throw new IllegalStateException("please fetch first");
Sitelink sl = wikidata.request(new GetSitelinkRequest(s.nextLine(), wikipedia.getProject()));
return wikipedia.request(new ArticleForNameRequest(sl.getTitle()));
}
@Override
public void fetch() throws Exception {
if(wikidata == null || wikipedia == null)
throw new IllegalStateException("please prepare first");
s = new Scanner(new URL(url).openStream());
}
@Override
public void close() throws IOException {
s.close();
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public String toString() {
return super.toString()+"["+url+"]";
}
}