/*
* 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.data;
import java.util.LinkedList;
import org.wikipediacleaner.api.constants.EnumCaseSensitiveness;
/**
* Information about namespaces.
*/
public class Namespace implements Comparable<Namespace> {
public final static int MEDIA = -2;
public final static int SPECIAL = -1;
public final static int MAIN = 0;
public final static int MAIN_TALK = 1;
public final static int USER = 2;
public final static int USER_TALK = 3;
public final static int WIKIPEDIA = 4;
public final static int WIKIPEDIA_TALK = 5;
public final static int IMAGE = 6;
public final static int IMAGE_TALK = 7;
public final static int MEDIAWIKI = 8;
public final static int MEDIAWIKI_TALK = 9;
public final static int TEMPLATE = 10;
public final static int TEMPLATE_TALK = 11;
public final static int HELP = 12;
public final static int HELP_TALK = 13;
public final static int CATEGORY = 14;
public final static int CATEGORY_TALK = 15;
public final static int DRAFT = 118;
public final static int DRAFT_TALK = 119;
private final Integer id;
private final String title;
private final String canonicalTitle;
private final EnumCaseSensitiveness caseSensitiveness;
private final boolean subPages;
private final LinkedList<String> aliases;
/**
* @param id Namespace Id.
* @param title Namespace title.
* @param canonicalTitle Canonical title.
* @param caseSensitiveness Case sensitiveness.
* @param subPages True if sub pages are allowed.
*/
public Namespace(
String id, String title, String canonicalTitle,
EnumCaseSensitiveness caseSensitiveness, boolean subPages) {
Integer tmpId = null;
try {
tmpId = Integer.parseInt(id);
} catch (NumberFormatException e) {
tmpId = Integer.valueOf(-1);
}
this.id = tmpId;
this.title = title;
this.canonicalTitle = canonicalTitle;
this.caseSensitiveness = caseSensitiveness;
this.subPages = subPages;
this.aliases = new LinkedList<String>();
addAlias(this.title);
addAlias(this.canonicalTitle);
}
/**
* @return Namespace id.
*/
public Integer getId() {
return id;
}
/**
* @return Title.
*/
public String getTitle() {
return title;
}
/**
* @return Canonical title.
*/
public String getCanonicalTitle() {
return canonicalTitle;
}
/**
* @return Case sensitiveness.
*/
public EnumCaseSensitiveness getCaseSensitiveness() {
return caseSensitiveness;
}
/**
* @return True if sub pages are allowed.
*/
public boolean areSubPagesAllowed() {
return subPages;
}
/**
* @return Aliases.
*/
public LinkedList<String> getAliases() {
return aliases;
}
/**
* @param alias Alias to be added.
*/
public void addAlias(String alias) {
if (alias == null) {
return;
}
alias = Page.getStringUcFirst(alias);
if (!aliases.contains(alias)) {
aliases.add(alias);
}
}
/**
* @param name Namespace name.
* @return Flag indicating if the given name can represent this namespace.
*/
public boolean isPossibleName(String name) {
if (name == null) {
return false;
}
name = Page.getStringUcFirst(name.trim());
for (String alias : aliases) {
if (name.equals(alias)) {
return true;
}
}
return false;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "" + id + " - " + title;
}
/* (non-Javadoc)
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(Namespace bl) {
int compare;
// Namespace
compare = id.compareTo(bl.id);
if (compare != 0) {
return compare;
}
// Title
compare = title.compareTo(bl.title);
return compare;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if ((o == null) || (o.getClass() != getClass())) {
return false;
}
Namespace bl = (Namespace) o;
boolean equals = true;
equals &= id.equals(bl.id);
equals &= title.equals(bl.title);
return equals;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
int hash = 7;
hash = 31 * hash + id.hashCode();
hash = 31 * hash + title.hashCode();
return hash;
}
}