package mediawiki.task;
import java.net.URLEncoder;
import java.util.Collections;
import java.util.List;
import mediawiki.MediaWikiConnection;
import mediawiki.MediaWikiTask;
import mediawiki.WikidataQuery;
import mediawiki.info.wikibase.Claim;
import mediawiki.info.wikibase.Property;
import mediawiki.info.wikibase.Statement;
import mediawiki.info.wikibase.snaks.ItemSnak;
import mediawiki.request.EditRequest;
import mediawiki.request.wikibase.GetSpecificStatementRequest;
import mediawiki.request.wikibase.RemoveStatementRequest;
import datasets.in.GND;
import datasets.in.MARC;
public class GndTnTask extends MediaWikiTask {
private String log;
public GndTnTask(MediaWikiConnection con, String log) {
super(con);
this.log = log;
}
@Override
public void run() {
WikidataQuery n = new WikidataQuery("CLAIM[31:5] AND CLAIM[227]");
List<Integer> i;
try {
StringBuffer bf = new StringBuffer();
bf.append("== List ==\n");
i = n.request();
Collections.reverse(i);
for(Integer b : i) {
try{
List<Statement> s = getConnection().request(new GetSpecificStatementRequest("Q"+b, new Property(227)));
if(s.size() != 1)
continue;
Statement st = s.get(0);
String gnd = (String) st.getClaim().getSnak().getValue();
MARC m = GND.getMARCEntry(gnd);
String typ = m.getSubfield("079", 0, "b", 0);
System.out.println("Q"+b+"\t"+gnd+"\t"+typ);
if(typ.equals("n")) {
if(st.hasReference(new Claim(new Property(143), new ItemSnak(54919)))){
getConnection().requestConcurrently(new RemoveStatementRequest(st, "remove type Tn = placeholder (see [[Property talk:P227#Usage note]])"));
System.out.println("removed");
}else{
bf.append("# [[Q"+b+"]]: [http://d-nb.info/gnd/"+URLEncoder.encode(gnd,"UTF-8")+" "+gnd+"]\n");
}
}
}catch(Exception e) {
e.printStackTrace();
}
}
EditRequest er = new EditRequest(log, bf.toString(), "refresh");
er.setProperty("section", 1);
getConnection().request(er);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}