/*
* Created on 09-Dec-2003
*/
package net.sf.jabref.labelPattern;
import java.util.ArrayList;
import java.util.Hashtable;
/**
* A small table, where an entry type is associated with a label pattern (an
* <code>ArrayList</code>). A parent LabelPattern can be set.
*
* @author Ulrik Stervbo (ulriks AT ruc.dk)
*/
public class LabelPattern extends Hashtable<String, ArrayList<String>> {
/**
* The parent of this LabelPattern.
*/
protected LabelPattern parent = null;
public LabelPattern() {
}
public LabelPattern(LabelPattern parent) {
this.parent = parent;
}
/**
* Sets the parent LabelPattern.
*
* @param parent
* a <code>String</code>
*/
public void setParent(LabelPattern parent) {
this.parent = parent;
}
/**
* Get the parent LabelPattern
*
* @return the parent LabelPattern
*/
public LabelPattern getParent() {
return parent;
}
public void addLabelPattern(String type, String pattern) {
put(type, LabelPatternUtil.split(pattern));
}
/**
* Remove a label pattern from the LabelPattern. No key patterns can be
* removed from the very parent LabelPattern since is thought of as a
* default. To do this, use the removeKeyPattern(String type, boolean sure)
*
* @param type
* a <code>String</code>
*/
public void removeLabelPattern(String type) {
if (containsKey(type) && parent != null) {
remove(type);
}
}
public void removeLabelPattern(String type, boolean sure) {
if (containsKey(type) && sure) {
remove(type);
}
}
/**
* Gets an object for a desired label from this LabelPattern or one of it's
* parents. This method first tries to obtain the object from this
* LabelPattern via the <code>get</code> method of <code>Hashtable</code>.
* If this fails, we try the parent.
*
* @param key
* a <code>String</code>
* @return the object for the given key
* @throws NullPointerException
*/
public final ArrayList<String> getValue(String key) {
ArrayList<String> result = get(key); // throws the
// NullPointerException
// Test to see if we found anything
if (result == null) {
if (parent != null) {
result = parent.getValue(key);
}
if (result == null) {
// Not found - return the default value
return LabelPatternUtil.DEFAULT_LABELPATTERN;
}
}
return result;
}
/**
* Checks whether this pattern is customized or the default value.
*/
public final boolean isDefaultValue(String key) {
Object _obj = get(key);
return _obj == null;
}
}