/*
* Copyright 2010
* Ubiquitous Knowledge Processing (UKP) Lab
* Technische Universität Darmstadt
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
package de.tudarmstadt.ukp.dkpro.core.decompounding.trie;
import java.util.ArrayList;
import java.util.List;
/**
* A key/value tree node
*
*
* @param <K>
* The Key object
* @param <V>
* The value object
*/
public class KeyValueNode<K, V>
{
K key;
V value;
List<KeyValueNode<K, V>> children = new ArrayList<KeyValueNode<K, V>>();
/**
* Creates a tree node for a given key and value
*
* @param aKey
* The key of this node
* @param aValue
* The value of the node
*/
public KeyValueNode(K aKey, V aValue)
{
key = aKey;
value = aValue;
}
/**
* Returns the key object
*
* @return the key.
*/
public K getKey()
{
return key;
}
/**
* Set a new key to this object
*
* @param aKey
* the key.
*/
public void setKey(K aKey)
{
key = aKey;
}
/**
* Returns the value object
*
* @return the value.
*/
public V getValue()
{
return value;
}
/**
* Sets a new value for this object
*
* @param aValue
* the value.
*/
public void setValue(V aValue)
{
value = aValue;
}
/**
* Checks if this node has children
*
* @return if this node has children.
*/
public boolean hasChildren()
{
return children.size() > 0;
}
/**
* Gets a child object for a given key. If a node with the given key do not exist NULL is
* returned.
*
* @param aKey
* a key.
* @return the child object.
*/
public KeyValueNode<K, V> getChild(K aKey)
{
for (KeyValueNode<K, V> node : children) {
if (node.key.equals(aKey)) {
return node;
}
}
return null;
}
/**
* Checks if this node has a child with a given key
*
* @param aKey
* a key.
* @return if a child with this key exists.
*/
public boolean hasChild(K aKey)
{
return (getChild(aKey) != null);
}
/**
* Adds a child object to this node
*
* @param aNode
* a node.
*/
public void addChild(KeyValueNode<K, V> aNode)
{
children.add(aNode);
}
/**
* Adds child object to this node
*
* @param aKey
* a key.
* @param aValue
* a value.
*/
public void addChild(K aKey, V aValue)
{
addChild(new KeyValueNode<K, V>(aKey, aValue));
}
/**
* Returns all children of the node
*
* @return all children of the node
*/
public List<KeyValueNode<K, V>> getChildren()
{
return children;
}
/**
* Set a list of children to this node
*
* @param aChildren
* the list of children.
*/
public void setChildren(List<KeyValueNode<K, V>> aChildren)
{
children = aChildren;
}
/**
* Checks if the node is a leaf node
*
* @return if the node is a leaf node
*/
public boolean isLeaf()
{
return !hasChildren();
}
}