package edu.hawaii.jmotif.sax.trie;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* Inner node implementation.
*
* @author Pavel Senin
*
*/
public class TrieInnerNode extends TrieAbstractNode {
private HashMap<String, TrieAbstractNode> descendats;
/** The occurrence locations. */
private ArrayList<Integer> occurrences;
/**
* Constructor.
*/
public TrieInnerNode() {
super();
initStorage();
}
/**
* Constructor.
*
* @param nodeLabel The node label to set.
*/
public TrieInnerNode(String nodeLabel) {
super(nodeLabel);
initStorage();
}
/**
* Internal data structures init.
*/
private void initStorage() {
this.descendats = new HashMap<String, TrieAbstractNode>();
this.occurrences = new ArrayList<Integer>();
}
/**
* {@inheritDoc}
*/
@Override
public TrieNodeType getType() {
return TrieNodeType.INNER;
}
/**
* Add node to the descendants list.
*
* @param node The node to add.
*/
public void addNext(TrieAbstractNode node) {
if (null != node) {
this.descendats.put(node.getLabel(), node);
}
}
/**
* Deletes the node from the list of descendants.
*
* @param name Name of the node to delete.
*/
public void delete(String name) {
this.descendats.remove(name);
}
/**
* Get all descendants as a list.
*
* @return all descendants as a list.
*/
public List<TrieAbstractNode> getDescendants() {
List<TrieAbstractNode> res = new ArrayList<TrieAbstractNode>();
res.addAll(this.descendats.values());
return res;
}
/**
* Get the descendant by name.
*
* @param name The name parameter.
* @return The found node or null.
*/
public TrieAbstractNode getDescendant(String name) {
return this.descendats.get(name);
}
/**
* Get all occurrences associated with this leaf.
*
* @return Array of all occurrences associated with this leaf.
*/
public List<Integer> getOccurences() {
return this.occurrences;
}
/**
* Add new occurrence.
*
* @param pos Occurrence position.
*/
public void addOccurrence(int pos) {
if (!this.occurrences.contains(Integer.valueOf(pos))) {
this.occurrences.add(pos);
}
}
/**
* Add multiple new occurrences.
*
* @param occurrences List of occurrences to add.
*/
public void addOccurrences(List<Integer> occurrences) {
this.occurrences.addAll(occurrences);
}
}