package mediawiki.task;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import org.json.JSONException;
import mediawiki.MediaWikiConnection;
import mediawiki.MediaWikiTask;
import mediawiki.WikidataQuery;
import mediawiki.info.Project;
import mediawiki.info.wikibase.Property;
import mediawiki.info.wikibase.Sitelink;
import mediawiki.info.wikibase.Statement;
import mediawiki.request.wikibase.GetSitelinkRequest;
import mediawiki.request.wikibase.GetSpecificStatementRequest;
import mediawiki.request.wikibase.RemoveSitelinkRequest;
import mediawiki.request.wikibase.SetSitelinkRequest;
public class ReorganizeCommonscatTask extends MediaWikiTask {
public ReorganizeCommonscatTask(MediaWikiConnection con) {
super(con);
// TODO Auto-generated constructor stub
}
@Override
public void run() {
WikidataQuery wdq = new WikidataQuery("CLAIM[910] AND CLAIM[373]");
List<Integer> l;
try {
l = wdq.request();
} catch (IOException | JSONException e1) {
e1.printStackTrace();
return;
}
Collections.shuffle(l);
int i = 0;
for(int b : l){
i++;
if(i % 100 == 0)
System.out.println("------------------\nITEM "+i+" = "+((double)i/(double)l.size()*100)+" %");
try{
Statement hkat = getConnection().request(new GetSpecificStatementRequest("Q"+b, new Property(910))).get(0);
Statement ckat = getConnection().request(new GetSpecificStatementRequest("Q"+b, new Property(373))).get(0);
int hkatitem = (Integer)hkat.getClaim().getSnak().getValue();
String commonscat = (String) ckat.getClaim().getSnak().getValue();
System.out.println("Q"+b+"");
if(getConnection().request(new GetSitelinkRequest("Q"+hkatitem, new Project("commonswiki"))) != null)
continue;
Sitelink oldcommons = getConnection().request(new GetSitelinkRequest("Q"+b, new Project("commonswiki")));
String summary = "";
if(oldcommons != null && oldcommons.getTitle().equals("Category:"+commonscat)){
getConnection().request(new RemoveSitelinkRequest("Q"+b, new Project("commonswiki"), "moving the commons sitelink to [[Q"+hkatitem+"]] based on [[Property:P910]]"));
summary = "moving the commons sitelink from [[Q"+b+"]] based on topic's main category";
}else
summary = "adding commons sitelink based on [[Property:P373]] and [[Property:P910]] claim of [[Q"+b+"]]";
getConnection().requestConcurrently(new SetSitelinkRequest("Q"+hkatitem, new Sitelink(new Project("commonswiki"), "Category:"+commonscat), summary));
System.out.println(summary);
}catch(Exception e){
e.printStackTrace();
}
}
}
}