/*
* WikimediaSisterProject.java - codes of Wikimedia sister projects.
*
* Copyright (c) 2005-2008 Andrew Krizhanovsky /aka at mail.iias.spb.su/
* Distributed under GNU Public License.
*/
package wikokit.base.wikipedia.language;
import wikokit.base.wikipedia.util.StringUtil;
import java.util.Map;
import java.util.HashMap;
/** Wikimedia sister projects: code and short codes, e.g. 'wikipedia' and 'w', 'wikt'.
*
* See w:Wikipedia:Interwikimedia_links and w:Wikipedia:Wikimedia_sister_projects
*/
public class WikimediaSisterProject {
/** Long form, e.g. 'wikipedia', 'commons', 'meta', etc. */
private final String long_form;
/** Shortcut, e.g. 'w', 'wikt', 'm'. */
private final String shortcut;
/** Project name, e.g. 'Wikipedia', 'Wiktionary'. */
private final String name;
/** Map from long_form and from shortcut to the project object */
private static Map<String, WikimediaSisterProject> code2project = new HashMap<String, WikimediaSisterProject>();
// list of projects:
public static final WikimediaSisterProject Wikipedia = new WikimediaSisterProject("wikipedia", "w", "Wikipedia");
public static final WikimediaSisterProject Wiktionary = new WikimediaSisterProject("wiktionary", "wikt", "Wiktionary");
public static final WikimediaSisterProject Wikinews = new WikimediaSisterProject("wikinews", "n", "Wikinews");
public static final WikimediaSisterProject Wikibooks = new WikimediaSisterProject("wikibooks", "b", "Wikibooks");
public static final WikimediaSisterProject Wikiquote = new WikimediaSisterProject("wikiquote", "q", "Wikiquote");
public static final WikimediaSisterProject Wikisource = new WikimediaSisterProject("wikisource", "s", "Wikisource");
public static final WikimediaSisterProject Wikispecies = new WikimediaSisterProject("wikispecies", "", "Wikispecies");
public static final WikimediaSisterProject Wikiversity = new WikimediaSisterProject("", "v", "Wikiversity");
// in really there are two long forms: [[wikimedia:]] and [[foundation:]], and no shortcuts
public static final WikimediaSisterProject Wikimedia_Foundation = new WikimediaSisterProject("wikimedia","foundation","Wikimedia_Foundation");
public static final WikimediaSisterProject Wikimedia_Commons = new WikimediaSisterProject("commons:","", "Wikimedia_Commons");
public static final WikimediaSisterProject Wikimedia_Meta_Wiki = new WikimediaSisterProject("meta", "m", "Wikimedia_Meta-Wiki");
public static final WikimediaSisterProject Wikimedia_Incubator = new WikimediaSisterProject("incubator","", "Wikimedia_Incubator");
public static final WikimediaSisterProject MediaWiki = new WikimediaSisterProject("", "mw", "MediaWiki");
public static final WikimediaSisterProject MediaZilla = new WikimediaSisterProject("mediazilla", "", "MediaZilla");
private WikimediaSisterProject(String long_form,String shortcut,String name) {
this.long_form = long_form;
this.shortcut = shortcut;
this.name = name;
if(long_form.length() > 0) {
code2project.put(long_form, this);
}
if(shortcut.length() > 0) {
code2project.put(shortcut, this);
}
}
/** Checks weather exists the project with long form or shortcut 'code'. */
public static boolean existsCode(String code) {
return code2project.containsKey(code);
}
public String toString() { return long_form; }
/** Returns true if the language has this 'long_form'. */
public boolean equals(String long_form) {
return long_form.equalsIgnoreCase(this.long_form);
}
/** Gets WM sister project by name of long form */
public static WikimediaSisterProject get(String code) throws NullPointerException
{
if( code2project.containsKey(code) ) {
return code2project.get(code);
/*
if(long_form.equalsIgnoreCase( ru.toString())) {
return ru;
} else if(long_form.equalsIgnoreCase( en.toString())) {
return en;
} else if(long_form.equalsIgnoreCase( simple.toString())) {
return simple;
} else if(long_form.equalsIgnoreCase( de.toString())) {
return de;
// todo
// ...
*/
} else {
throw new NullPointerException("Null WikimediaSisterProject");
}
}
/** Gets texts of interwikimedia link. E.g.
* [[wikt:Wiktionary:Statistics#Detail|statistics]] -> "statistics"
*
* @param text_inside_link e.g. "wikipedia:" in [[wikipedia:]]
*/
public static String getLinkText(String text_inside_link) {
String before, after;
if(-1 != text_inside_link.indexOf(':')) {
before = StringUtil.getTextBeforeFirstColumn(text_inside_link);
after = StringUtil.getTextAfterFirstColumn (text_inside_link);
return getLinkText(before, after);
}
return text_inside_link;
}
/** Gets texts of interwikimedia link. E.g.
* [[wikt:Wiktionary:Statistics#Detail|statistics]] -> "statistics"
*
* @param before the text before the first column, e.g. "wikipedia" in [[wikipedia:]]
* @param after e.g. "Wikipedia:Wikimedia_sister_projects" in [[w:Wikipedia:Wikimedia_sister_projects]]
*/
public static String getLinkText(String before,String after) {
// 0 e.g. [[:Image:Wiktionary-logo-gl.png|a logo that depicts a dictionary]]
if( 0 == before.length()
|| existsCode(before) )
{
if(-1 != after.indexOf('|')) {
return StringUtil.getTextAfterFirstVerticalPipe(after);
} else if(-1 != after.indexOf(':')) {
// e.g. [[:de:Hauptseite]], after = "de:Hauptseite"
String lang_code = StringUtil.getTextBeforeFirstColumn(after);
if(LanguageType.has(lang_code)) {
return StringUtil.getTextAfterFirstColumn(after);
}
return after;
}
}
return new StringBuffer(before).append(":").append(after).toString();
}
}