/*
* WPCleaner: A tool to help on Wikipedia maintenance tasks.
* Copyright (C) 2013 Nicolas Vervelle
*
* See README.txt file for licensing information.
*/
package org.wikipediacleaner.api.constants;
import java.io.UnsupportedEncodingException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.wikipediacleaner.api.data.Interwiki;
import org.wikipediacleaner.api.data.Language;
import org.wikipediacleaner.api.data.MagicWord;
import org.wikipediacleaner.api.data.Namespace;
import org.wikipediacleaner.api.data.SpecialPage;
/**
* Configuration for the wiki.
*/
public class WikiConfiguration {
// ==========================================================================
// General information
// ==========================================================================
/** Server URL (without protocol) */
private String server;
/** Article path */
private String articlePath;
/** Script */
private String script;
/** Max article size */
private Long maxArticleSize;
/**
* @param server Server URL (without protocol).
*/
public void setServer(String server) {
this.server = server;
}
/**
* @return Server URL (without protocol).
*/
public String getServer() {
return server;
}
/**
* @param path Article path.
*/
public void setArticlePath(String path) {
this.articlePath = path;
}
/**
* @return Article path.
*/
public String getArticlePath() {
return articlePath;
}
/**
* @param script Script.
*/
public void setScript(String script) {
this.script = script;
}
/**
* @return Script.
*/
public String getScript() {
return script;
}
/**
* @param size Max article size in bytes.
*/
public void setMaxArticleSize(String size) {
maxArticleSize = null;
try {
maxArticleSize = Long.valueOf(size);
} catch (NumberFormatException e) {
// Nothing to do
}
}
/**
* @return Max article size in bytes.
*/
public Long getMaxArticleSize() {
return maxArticleSize;
}
/**
* @param text Text to check.
* @return True if text doesn't respect the max article size.
*/
public boolean isArticleTooLong(String text) {
if ((maxArticleSize == null) || (text == null)) {
return false;
}
try {
if (text.getBytes("UTF-8").length > maxArticleSize.longValue()) {
return true;
}
} catch (UnsupportedEncodingException e) {
// Nothing to do
}
return false;
}
// ==========================================================================
// Name spaces
// ==========================================================================
/**
* Namespaces.
*/
private List<Namespace> namespaces;
/**
* @return List of namespaces
*/
public List<Namespace> getNamespaces() {
return namespaces;
}
/**
* @param namespaces List of namespaces
*/
public void setNamespaces(List<Namespace> namespaces) {
this.namespaces = namespaces;
if (namespaces != null) {
Collections.sort(namespaces);
}
}
/**
* @param id Namespace id.
* @return Matching namespace.
*/
public Namespace getNamespace(int id) {
if (namespaces == null) {
return null;
}
for (Namespace n : namespaces) {
if ((n != null) && (n.getId() != null) && (id == n.getId().intValue())) {
return n;
}
}
return null;
}
/**
* @param namespaceId Namespace id.
* @param title Page title in the namespace.
* @return Full page title.
*/
public String getPageTitle(int namespaceId, String title) {
if (title == null) {
return null;
}
int colonIndex = title.indexOf(':');
if (colonIndex == 0) {
return title.substring(1);
}
Namespace namespace = getNamespace(namespaceId);
if (namespace != null) {
if (namespaceId == Namespace.MAIN) {
return namespace.getCaseSensitiveness().normalize(title);
}
if (colonIndex > 0) {
String possibleNamespace = title.substring(0, colonIndex);
for (Namespace n : namespaces) {
if (n.isPossibleName(possibleNamespace)) {
return n.getTitle() + ":" + n.getCaseSensitiveness().normalize(title.substring(colonIndex + 1));
}
}
}
return namespace.getTitle() + ":" + namespace.getCaseSensitiveness().normalize(title);
}
return title;
}
// ==========================================================================
// Languages
// ==========================================================================
/**
* Languages
*/
private List<Language> languages;
/**
* @return List of languages
*/
public List<Language> getLanguages() {
return languages;
}
/**
* @param languages List of languages
*/
public void setLanguages(List<Language> languages) {
this.languages = languages;
}
// ==========================================================================
// Interwikis
// ==========================================================================
/**
* Interwikis
*/
private List<Interwiki> interwikis;
/**
* @return List of interwikis
*/
public List<Interwiki> getInterwikis() {
return interwikis;
}
/**
* @param interwikis List of interwikis
*/
public void setInterwikis(List<Interwiki> interwikis) {
this.interwikis = interwikis;
}
// ==========================================================================
// Magic words
// ==========================================================================
/**
* Magic words.
*/
private Map<String, MagicWord> magicWords;
/**
* @param name Magic word name.
* @return Magic word.
*/
public MagicWord getMagicWordByName(String name) {
if ((name == null) || (magicWords == null)) {
return null;
}
return magicWords.get(name);
}
/**
* @param value Magic word alias.
* @return Magic word.
*/
public MagicWord getMagicWordByAlias(String value) {
if ((value == null) || (magicWords == null)) {
return null;
}
for (MagicWord magicWord : magicWords.values()) {
if (magicWord.isPossibleAlias(value)) {
return magicWord;
}
}
return null;
}
/**
* @param text Text
* @param colon True if a colon can be added to the text.
* @return Matching Magic Word if the text is an alias for a Function Magic Word.
*/
public MagicWord getFunctionMagicWord(String text, boolean colon) {
List<String> functionMagicWords = MagicWord.getFunctionMagicWords();
String colonText = text + ":";
for (String functionMagicWord : functionMagicWords) {
MagicWord magicWord = getMagicWordByName(functionMagicWord);
if (magicWord != null) {
if (magicWord.isPossibleAlias(text)) {
return magicWord;
}
if (colon && magicWord.isPossibleAlias(colonText)) {
return magicWord;
}
}
}
return null;
}
/**
* @param text Text
* @return Matching Magic Word if the text is an alias for a Image Magic Word.
*/
public MagicWord getImgMagicWord(String text) {
List<String> imgMagicWords = MagicWord.getImgMagicWords();
for (String imgMagicWord : imgMagicWords) {
MagicWord magicWord = getMagicWordByName(imgMagicWord);
if ((magicWord != null) && magicWord.isPossibleAlias(text)) {
return magicWord;
}
}
return null;
}
/**
* @param magicWords Magic words.
*/
public void setMagicWords(Map<String, MagicWord> magicWords) {
this.magicWords = magicWords;
}
// ==========================================================================
// Special pages
// ==========================================================================
/**
* Special pages.
*/
private Map<String, SpecialPage> specialPages;
/**
* @param name Special page name.
* @return Special page.
*/
public SpecialPage getSpecialPageByName(String name) {
if ((name == null) || (specialPages == null)) {
return null;
}
return specialPages.get(name);
}
/**
* @param value Special page alias.
* @return Special page.
*/
public SpecialPage getSpecialPageByAlias(String value) {
if ((value == null) || (specialPages == null)) {
return null;
}
for (SpecialPage specialPage : specialPages.values()) {
if (specialPage.isPossibleAlias(value)) {
return specialPage;
}
}
return null;
}
/**
* @param specialPages Special pages.
*/
public void setSpecialPages(Map<String, SpecialPage> specialPages) {
this.specialPages = specialPages;
}
// ==========================================================================
// Messages
// ==========================================================================
/**
* Messages.
*/
private Map<String, String> messages;
/**
* @param name Message name.
* @return Message.
*/
public String getMessageByName(String name) {
if ((name == null) || (messages == null)) {
return null;
}
return messages.get(name);
}
/**
* @param messages Messages.
*/
public void setMessages(Map<String, String> messages) {
this.messages = messages;
}
}