package mediawiki.task.config.nt2; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.List; import org.json.JSONException; import org.json.JSONObject; import mediawiki.MediaWikiConnection; import mediawiki.MediaWikiRequest; import mediawiki.WikidataQuery; import mediawiki.info.Article; import mediawiki.info.Project; import mediawiki.info.wikibase.Property; import mediawiki.info.wikibase.Reference; import mediawiki.info.wikibase.Sitelink; import mediawiki.info.wikibase.snaks.ItemSnak; import mediawiki.request.CategoryMemberRequest; import mediawiki.request.LinkshereRequest; import mediawiki.request.TemplateEmbeddedInRequest; import mediawiki.request.wikibase.GetSitelinkRequest; public class NormdatenTask2Configuration { public static final NormdatenTask2Configuration ENWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Category:Pages using authority control with parameters",0), new Reference(new Property(143), new ItemSnak(328)), "Authority control", "Normdaten" ); public static final NormdatenTask2Configuration ENWIKI2 = new NormdatenTask2Configuration( new CategoryMemberRequest("Category:VIAF not on Wikidata",0), new Reference(new Property(143), new ItemSnak(328)), "Authority control", "Normdaten" ); public static final NormdatenTask2Configuration FRWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Catégorie:Page utilisant le modèle Autorité avec un paramètre local",0), new Reference(new Property(143), new ItemSnak(8447)), "Autorité","Authority control","Normdaten" ); public static final NormdatenTask2Configuration MKWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Категорија:Страници со нормативна контрола со параметри",0), new Reference(new Property(143), new ItemSnak(842341)), "Нормативна контрола","Authority control","Normdaten" ); public static final NormdatenTask2Configuration DAWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Kategori:Sider med autoritetsdata med parametre",0), new Reference(new Property(143), new ItemSnak(181163)), "Autoritetsdata","Normdata","Authority control","Normdaten" ); public static final NormdatenTask2Configuration DEWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Vorlage:Normdaten",0), new Reference(new Property(143), new ItemSnak(48183)), "Normdaten" ); public static final NormdatenTask2Configuration CAWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Categoria:Pàgines utilitzant control d'autoritats amb paràmetres",0), new Reference(new Property(143), new ItemSnak(199693)), "autoritat","Authority control","Normdaten" ); public static final NormdatenTask2Configuration ITWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Categoria:Voci con template Controllo di autorità con parametri",0), new Reference(new Property(143), new ItemSnak(11920)), "Controllo di autorità","Authority control","Normdaten" ); public static final NormdatenTask2Configuration PLWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Kategoria:Kontrola autorytatywna z parametrami",0), new Reference(new Property(143), new ItemSnak(1551807)), "Kontrola autorytatywna","Authority control","Normdaten" ); public static final NormdatenTask2Configuration JAWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Category:典拠管理をパラメータで指定しているページ",0), new Reference(new Property(143), new ItemSnak(177837)), "Normdaten","Authority control" ); public static final NormdatenTask2Configuration HUWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Kategória:Nemzetközi katalógusok sablont paraméterekkel hívó lapok",0), new Reference(new Property(143), new ItemSnak(53464)), "Nemzetközi katalógusok","Normdaten","Authority control" ); public static final NormdatenTask2Configuration KOWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("분류:매개 변수를 가진 전거 통제 틀을 사용하는 문서",0), new Reference(new Property(143), new ItemSnak(17985)), "Authority control","전거 정보","전거 통제","전거 제어","Normdaten" ); public static final NormdatenTask2Configuration ELWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Πρότυπο:Authority control", 0), new Reference(new Property(143), new ItemSnak(11918)), "Authority control" ); public static final NormdatenTask2Configuration BEWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Шаблон:Вонкавыя спасылкі", 0), new Reference(new Property(143), new ItemSnak(877583)), "бібліяінфармацыя","Вонкавыя спасылкі","Нарматыўны кантроль","Authority control","Normdaten" ); public static final NormdatenTask2Configuration CSWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Šablona:Autoritní data", 0), new Reference(new Property(143), new ItemSnak(191168)), "Autoritní data" ); public static final NormdatenTask2Configuration FAWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("رده:صفحه‌های با داده‌های کتابخانه‌ای دارای پارامتر", 0), new Reference(new Property(143), new ItemSnak(48952)), "مستند کردن","داده‌های کتابخانه‌ای","Authority control","Normdaten" ); public static final NormdatenTask2Configuration SVWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Mall:Auktoritetsdata", 0), new Reference(new Property(143), new ItemSnak(169514)), "Auktoritetsdata","Katalogreferenser" ); public static final NormdatenTask2Configuration ENWIKISOURCE = new NormdatenTask2Configuration( new CategoryMemberRequest("Category:Pages using authority control with parameters", 102), new Reference(new Property(143), new ItemSnak(15156406)), "Authority control" ); public static final NormdatenTask2Configuration BNWIKISOURCE = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("টেমপ্লেট:নিয়ন্ত্রক কর্তৃপক্ষ", 100, 102), new Reference(new Property(143), new ItemSnak(20726423)), "নিয়ন্ত্রক কর্তৃপক্ষ","Authority control" ); public static final NormdatenTask2Configuration PTWIKISOURCE = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Predefinição:Controle de autoridade", 100, 102), new Reference(new Property(143), new ItemSnak(19826831)), "Controle de autoridade" ); public static final NormdatenTask2Configuration UKWIKISOURCE = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Шаблон:Authority control", 100, 102), new Reference(new Property(143), new ItemSnak(20726429)), "Authority control" ); public static final NormdatenTask2Configuration RUWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Шаблон:Внешние ссылки", 0), new Reference(new Property(143), new ItemSnak(206855)), "Внешние ссылки","Нормативный контроль","Авторитетный контроль","Authority control","Normdaten","Библиоинформация" ); public static final NormdatenTask2Configuration RUWIKISOURCE = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Шаблон:Внешние ссылки"), new Reference(new Property(143), new ItemSnak(15634506)), "Внешние ссылки","Нормативный контроль","Авторитетный контроль","Authority control","Normdaten","Библиоинформация" ); public static final NormdatenTask2Configuration ROWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Categorie:Pagini ce folosesc informații bibliotecare cu parametri",0), new Reference(new Property(143), new ItemSnak(199864)), "Informații bibliotecare","Authority control","Normdaten" ); public static final NormdatenTask2Configuration ZHWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Category:頁面調用帶參數規範控制模板",0), new Reference(new Property(143), new ItemSnak(30239)), "Authority control","Normdaten","规范控制","權威控制" ); public static final NormdatenTask2Configuration VIWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Bản mẫu:Kiểm soát tính nhất quán",0), new Reference(new Property(143), new ItemSnak(200180)), "Kiểm soát tính nhất quán","Authority control" ); public static final NormdatenTask2Configuration SIMPLEWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Template:Authority control",0), new Reference(new Property(143), new ItemSnak(200183)), "Authority control" ); public static final NormdatenTask2Configuration BGWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Шаблон:Нормативен контрол",0), new Reference(new Property(143), new ItemSnak(11913)), "Нормативен контрол","Authority control" ); public static final NormdatenTask2Configuration LVWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Veidne:Autoritatīvā vadība",0), new Reference(new Property(143), new ItemSnak(728945)), "Autoritatīvā vadība","Authority control","Autoritatīvā veidne" ); public static final NormdatenTask2Configuration PTWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Predefinição:Controle de autoridade",0), new Reference(new Property(143), new ItemSnak(11921)), "Controle de autoridade","Controlo de autoria","Authority control","Normdaten" ); public static final NormdatenTask2Configuration ARWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("قالب:ضبط استنادي",0), new Reference(new Property(143), new ItemSnak(199700)), "ضبط استنادي","Authority control" ); public static final NormdatenTask2Configuration IDWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Templat:Normdaten",0), new Reference(new Property(143), new ItemSnak(155214)), "Normdaten","Authority control" ); public static final NormdatenTask2Configuration SLWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Predloga:Normativna kontrola",0), new Reference(new Property(143), new ItemSnak(14380)), "Normativna kontrola","Authority control" ); public static final NormdatenTask2Configuration NNWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Mal:Autoritetsdata",0), new Reference(new Property(143), new ItemSnak(2349453)), "Autoritetsdata","Normdaten","Authority control" ); public static final NormdatenTask2Configuration CYWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Nodyn:Authority control",0), new Reference(new Property(143), new ItemSnak(848525)), "Authority control" ); public static final NormdatenTask2Configuration NDSWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Vörlaag:Normdaten",0), new Reference(new Property(143), new ItemSnak(4925786)), "Normdaten" ); public static final NormdatenTask2Configuration ILOWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Plantilia:Turay a panagtengngel",0), new Reference(new Property(143), new ItemSnak(8563685)), "Turay a panagtengngel" ); public static final NormdatenTask2Configuration BNWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("টেমপ্লেট:কর্তৃপক্ষ নিয়ন্ত্রণ",0), new Reference(new Property(143), new ItemSnak(427715)), "কর্তৃপক্ষ নিয়ন্ত্রণ","নিয়ন্ত্রক কর্তৃপক্ষ","Authority control","নিয়ন্ত্রণ কর্তৃপক্ষ" ); public static final NormdatenTask2Configuration SCOWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Category:Pages using authority control with parameters", 0), new Reference(new Property(143), new ItemSnak(1444686)), "Authority control" ); public static final NormdatenTask2Configuration MSWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("Templat:Kawalan kewibawaan",0), new Reference(new Property(143), new ItemSnak(845993)), "Kawalan kewibawaan","Authority control" ); public static final NormdatenTask2Configuration HIWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("साँचा:Authority control",0), new Reference(new Property(143), new ItemSnak(722040)), "Authority control","आधिकारिक नियंत्रण","मानक विशिष्टताएं","मानक विशिष्टताएँ" ); public static final NormdatenTask2Configuration THWIKI = new NormdatenTask2Configuration( new TemplateEmbeddedInRequest("แม่แบบ:Authority control",0), new Reference(new Property(143), new ItemSnak(565074)), "Authority control" ); public static final NormdatenTask2Configuration ALSWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Kategorie:Wikipedia:Artikel mit lokaler Normdateneinbindung",0), new Reference(new Property(143), new ItemSnak(1211233)), "Normdaten" ); public static final NormdatenTask2Configuration BARWIKI = new NormdatenTask2Configuration( new CategoryMemberRequest("Kategorie:Wikipedia:Artikel mit lokaler Normdateneinbindung",0), new Reference(new Property(143), new ItemSnak(1961887)), "Normdaten" ); public static final NormdatenTask2Configuration CAWIKI_TAXON = new NormdatenTask2Configuration( new CategoryMemberRequest("Categoria:Bases de dades taxonòmiques amb paràmetres exportables a Wikidata",0), new Reference(new Property(143), new ItemSnak(199693)), "Bases de dades taxonòmiques","BDT" ); static { CAWIKI_TAXON.setLowerCaseMode(true); CAWIKI.setKeepEmpty(true); FRWIKI.setSummary("Les valeurs des paramètres de {{Autorité}} ont été transférées vers Wikidata"); HUWIKI.setSummary("nemzetközi katalógusok a Wikidatából"); FAWIKI.setSummary("انتقال داده‌های کتابخانه‌ای به ویکی‌داده"); CSWIKI.setSummary("Autoritní data přesunuta na Wikidata"); } public NormdatenTask2Configuration(MediaWikiRequest<List<Article>> r, Reference ref, String...t) { this.request = r; this.template = t; this.reference = ref; } public static NormdatenTask2Configuration forProject(MediaWikiConnection wikidata, MediaWikiConnection wikipedia, Integer...ns) throws Exception { Project project = wikipedia.getProject(); Sitelink template = wikidata.request(new GetSitelinkRequest("Q3907614",project)); Sitelink category = wikidata.request(new GetSitelinkRequest("Q19949591",project)); Integer source = new WikidataQuery("STRING[1800:\""+wikipedia.getProject()+"\"]").request().get(0); List<Article> aliases = wikipedia.request(new LinkshereRequest(template.getTitle(), true)); String[] templates = new String[aliases.size()+1]; templates[0] = template.getTitleWithoutNamespace(); for(int i = 0; i < aliases.size(); i++) templates[i+1] = aliases.get(i).getTitleWithoutNamespace(); MediaWikiRequest<List<Article>> mwr = ( category == null ? new TemplateEmbeddedInRequest(template.getTitle(), ns) : new CategoryMemberRequest(category.getTitle(), ns) ); return new NormdatenTask2Configuration(mwr, new Reference(new Property(143), new ItemSnak(source)), templates); } private MediaWikiRequest<List<Article>> request; private String[] template; private Reference reference; private boolean keepEmpty = false; private boolean lowerCaseMode = false; private String summary = null; public MediaWikiRequest<List<Article>> getRequest() { return request; } public String getTemplate() { return template[0]; } public String[] getTemplates(){ return template; } public void setRequest(MediaWikiRequest<List<Article>> request) { this.request = request; } public void setTemplate(String template) { this.template = new String[]{template}; } public Reference getReference() { return reference; } public void setReference(Reference reference) { this.reference = reference; } public boolean isKeepEmpty() { return keepEmpty; } public void setKeepEmpty(boolean keepEmpty) { this.keepEmpty = keepEmpty; } public boolean isLowerCaseMode() { return lowerCaseMode; } public void setLowerCaseMode(boolean lowerCaseMode) { this.lowerCaseMode = lowerCaseMode; } public String getSummary() { return summary == null ? getTemplate()+" moved to Wikidata" : summary; } public void setSummary(String summary) { this.summary = summary; } private static JSONObject config = null; public static JSONObject getConfigurationFile() throws IOException, JSONException { if(config != null) return config; InputStream in = NormdatenTask2Configuration.class.getResourceAsStream("authoritycontrol.json"); StringBuffer b = new StringBuffer(); while(in.available() > 0){ byte[] buffer = new byte[1024]; in.read(buffer); b.append(new String(buffer)); } in.close(); config = new JSONObject(b.toString()); return config; } public static Property getProperty(String prop) throws JSONException, IOException { return new Property(getConfigurationFile().getJSONObject(prop).getInt("property")); } public static String getPattern(String prop) throws JSONException, IOException { return getConfigurationFile().getJSONObject(prop).getString("pattern"); } public static String getFormatter(String prop) throws JSONException, IOException { return getConfigurationFile().getJSONObject(prop).getString("formatter"); } @Override public String toString() { return super.toString()+"["+getRequest()+","+Arrays.toString(getTemplates())+","+getReference()+"]"; } }