package mediawiki.task;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import org.json.JSONObject;
import datasets.in.VIAF;
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.StringSnak;
import mediawiki.request.wikibase.GetSpecificStatementRequest;
import static mediawiki.MediaWikiUtil.addClaim;
public class VIAFLinkTask extends MediaWikiTask {
private Connection connect;
private final int version = 1;
private final String summary = "adding %s identifier %s based on VIAF";
public VIAFLinkTask(MediaWikiConnection con, Connection connect) {
super(con);
this.connect = connect;
}
@Override
public void run() {
try{
ResultSet r = connect.createStatement().executeQuery("SELECT * FROM gnddata ORDER BY viaflinkversion ASC, ID DESC");
PreparedStatement p = connect.prepareStatement("UPDATE gnddata SET viaflinkversion = '"+version+"' WHERE wikibase = ?");
while(r.next()){
try{
ArrayList<Statement> as = (ArrayList<Statement>) getConnection().request(new GetSpecificStatementRequest(r.getString("wikibase"), new Property(214)));
if(as.size() == 0)
continue;
for(Statement s : as){
String viaf = (String) s.getClaim().getSnak().getValue();
Reference ref = new Reference();
ref.addClaim(new Claim(248, 54919));
ref.addClaim(new Claim(new Property(813), new DateSnak(new WikibaseDate(WikibaseDate.ONE_DAY))));
// ref.addClaim(new Claim(new Property(214), new StringSnak(viaf)));
JSONObject o = VIAF.getLinks(viaf);
if(o.has("SUDOC")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(269),new StringSnak(o.getJSONArray("SUDOC").getString(0))), ref, String.format(summary, "SUDOC",o.getJSONArray("SUDOC").getString(0) ));
}
if(o.has("BAV")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(1017),new StringSnak(o.getJSONArray("BAV").getString(0))), ref, String.format(summary, "BAV",o.getJSONArray("BAV").getString(0) ));
}
if(o.has("ISNI")){
String isni = o.getJSONArray("ISNI").getString(0);
isni = isni.substring(0,4)+" "+isni.substring(4,8)+" "+isni.substring(8,12)+" "+isni.substring(12);
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(213),new StringSnak(isni)), ref, String.format(summary, "ISNI", isni ));
}
if(o.has("LC")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(244),new StringSnak(o.getJSONArray("LC").getString(0))), ref, String.format(summary, "LC",o.getJSONArray("LC").getString(0) ));
}
if(o.has("NLI")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(949),new StringSnak(o.getJSONArray("NLI").getString(0))), ref, String.format(summary, "NLI",o.getJSONArray("NLI").getString(0) ));
}
if(o.has("NTA")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(1006),new StringSnak(o.getJSONArray("NTA").getString(0))), ref, String.format(summary, "NTA",o.getJSONArray("NTA").getString(0) ));
}
if(o.has("BNF")){
String bnf = o.getJSONArray("BNF").getString(0);
bnf = bnf.substring("http://catalogue.bnf.fr/ark:/12148/cb".length());
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(268),new StringSnak(bnf)), ref, String.format(summary, "BNF",bnf ));
}
if(o.has("EGAXA")){
String bnf = o.getJSONArray("EGAXA").getString(0);
bnf = bnf.substring("vtls".length());
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(1309),new StringSnak(bnf)), ref, String.format(summary, "EGAXA", bnf));
}
if(o.has("LAC")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(1670),new StringSnak(o.getJSONArray("LAC").getString(0))), ref, String.format(summary, "LAC",o.getJSONArray("LAC").getString(0) ));
}
if(o.has("LNB")){
String bnf = o.getJSONArray("LNB").getString(0);
bnf = bnf.substring("LNC10-".length());
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(1368),new StringSnak(bnf)), ref, String.format(summary, "LNB", bnf ));
}
if(o.has("NDL")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(349),new StringSnak(o.getJSONArray("NDL").getString(0))), ref, String.format(summary, "NDL",o.getJSONArray("NDL").getString(0) ));
}
if(o.has("NLA")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(409),new StringSnak(o.getJSONArray("NLA").getString(0))), ref, String.format(summary, "NLA",o.getJSONArray("NLA").getString(0) ));
}
if(o.has("NLP")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(1695),new StringSnak(o.getJSONArray("NLP").getString(0).toUpperCase())), ref, String.format(summary, "NLP",o.getJSONArray("NLP").getString(0).toUpperCase() ));
}
if(o.has("NSK")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(1375),new StringSnak(o.getJSONArray("NSK").getString(0))), ref, String.format(summary, "NSK",o.getJSONArray("NSK").getString(0) ));
}
/* if(o.has("NUKAT")){
String bnf = o.getJSONArray("NUKAT").getString(0);
bnf = "n"+bnf.substring("vtls".length());
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(1207),new StringSnak(bnf)), ref, summary);
} */
if(o.has("PTBNP")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(1005),new StringSnak(o.getJSONArray("PTBNP").getString(0))), ref, String.format(summary, "PTBNP",o.getJSONArray("PTBNP").getString(0) ));
}
if(o.has("SELIBR")){
addClaim(getConnection(), r.getString("wikibase"), new Claim(new Property(906),new StringSnak(o.getJSONArray("SELIBR").getString(0))), ref, String.format(summary, "SELIBR",o.getJSONArray("SELIBR").getString(0) ));
}
}
p.setString(1, r.getString("wikibase"));
p.executeUpdate();
}catch(Exception e2){
e2.printStackTrace();
continue;
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}