package mediawiki.request.generic;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import mediawiki.MediaWikiConnection;
import mediawiki.MediaWikiRequest;
import mediawiki.info.Article;
import mediawiki.request.CategoryMemberRequest;
public class RecursiveCategoryMemberRequest extends
MediaWikiRequest<Set<Article>> {
private String category;
private boolean includecats = false;
private Integer namespace = null;
public RecursiveCategoryMemberRequest(String cat){
category = cat;
}
public RecursiveCategoryMemberRequest(String cat, int namespace, boolean includecats){
category = cat;
this.includecats = includecats;
this.namespace = namespace;
}
@Override
public Set<Article> request(MediaWikiConnection c) throws Exception {
return handleSubcategory(c, category);
}
private Set<Article> handleSubcategory(MediaWikiConnection c, String cat) throws Exception{
System.out.println(cat);
HashSet<Article> h = new HashSet<>();
List<Article> l = c.request(new CategoryMemberRequest(cat));
for(Article a : l){
if(a.getNamespace() == 14){
if(includecats)
h.add(a);
h.addAll(handleSubcategory(c, a.getTitle()));
}else if(namespace == null || a.getNamespace() == namespace){
h.add(a);
}
}
return h;
}
}