package mediawiki.task;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javat.xml.Element;
import datasets.in.GND;
import mediawiki.WikidataQuery;
import mediawiki.MediaWikiConnection;
import mediawiki.MediaWikiTask;
import mediawiki.info.wikibase.Claim;
import mediawiki.info.wikibase.Property;
import mediawiki.info.wikibase.Reference;
import mediawiki.info.wikibase.Statement;
import mediawiki.info.wikibase.WikibaseDate;
import mediawiki.info.wikibase.snaks.DateSnak;
import mediawiki.info.wikibase.snaks.ItemSnak;
import mediawiki.request.wikibase.GetSpecificStatementRequest;
import mediawiki.request.wikibase.SetReferenceRequest;
public class GNDReferencingTask extends MediaWikiTask{
public GNDReferencingTask(MediaWikiConnection con) {
super(con);
}
@Override
public void run() {
WikidataQuery wdq = new WikidataQuery("CLAIM[31:5] AND CLAIM[227]");
System.out.println("daten abgerufen");
SimpleDateFormat log = new SimpleDateFormat("HH:mm:ss");
try {
for(Integer i : wdq.request()){
try{
String base = "Q"+i;
String gnd = (String) getConnection().request(new GetSpecificStatementRequest(base, new Property(227))).get(0).getClaim().getSnak().getValue();
Reference ref = new Reference();
ref.addClaim(new Claim(248, 36578));
ref.addClaim(new Claim(new Property(813), new DateSnak(new WikibaseDate(WikibaseDate.ONE_DAY))));
Element e = GND.getGNDEntry(gnd);
if(e.getChildren("gender").size() == 0)
continue;
ItemSnak gender = null;
switch(e.getChildren("gender").get(0).getAttribute("resource").getValue()){
case "http://d-nb.info/standards/vocab/gnd/Gender#male" :
gender = new ItemSnak(6581097);
break;
case "http://d-nb.info/standards/vocab/gnd/Gender#female" :
gender = new ItemSnak(6581072);
break;
}
if(gender != null){
List<Statement> l = getConnection().request(new GetSpecificStatementRequest(base, new Property(21)));
for(Statement s : l){
if(s.getClaim().getSnak().equals(gender) && !s.hasReferences()){
getConnection().request(new SetReferenceRequest(s, ref));
System.out.println(Thread.currentThread().getName()+"\t["+log.format(new Date())+"]\t"+base+" reference added");
}
}
}
}catch(Exception e){
e.printStackTrace();
continue;
}
}
} catch(Exception e) {
e.printStackTrace();
}
}
}