001 /*--------------------------------------------------------------------------+
002 $Id: SimpleTreeNode.java 26268 2010-02-18 10:44:30Z juergens $
003 | |
004 | Copyright 2005-2010 Technische Universitaet Muenchen |
005 | |
006 | Licensed under the Apache License, Version 2.0 (the "License"); |
007 | you may not use this file except in compliance with the License. |
008 | You may obtain a copy of the License at |
009 | |
010 | http://www.apache.org/licenses/LICENSE-2.0 |
011 | |
012 | Unless required by applicable law or agreed to in writing, software |
013 | distributed under the License is distributed on an "AS IS" BASIS, |
014 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
015 | See the License for the specific language governing permissions and |
016 | limitations under the License. |
017 +--------------------------------------------------------------------------*/
018 package edu.tum.cs.commons.tree;
019
020 import java.util.HashMap;
021
022 import edu.tum.cs.commons.collections.CollectionUtils;
023 import edu.tum.cs.commons.collections.UnmodifiableCollection;
024 import edu.tum.cs.commons.string.StringUtils;
025
026 /**
027 * A simple node class that can be used with {@link TreeUtils}. See
028 * {@link TreeUtilsTest} for an application of this class that uses strings as
029 * keys.
030 *
031 * @param <K>
032 * key used to identify children, e.g. String.
033 *
034 * @author deissenb
035 * @author $Author: juergens $
036 * @version $Rev: 26268 $
037 * @levd.rating GREEN Hash: B1592DD3B3D1D3EEFF7DDDE5A25EDE03
038 */
039 public class SimpleTreeNode<K> {
040
041 /** Maps from key to child. */
042 private final HashMap<K, SimpleTreeNode<K>> children = new HashMap<K, SimpleTreeNode<K>>();
043
044 /** Key of this node. */
045 private final K key;
046
047 /** Create new node with specified key. */
048 public SimpleTreeNode(K key) {
049 this.key = key;
050 }
051
052 /**
053 * Get child with specified key. This returns <code>null</code> if child
054 * with provided key does not exist.
055 */
056 public SimpleTreeNode<K> getChild(K key) {
057 return children.get(key);
058 }
059
060 /** Add child. This overwrites existing child with same key. */
061 public void addChild(SimpleTreeNode<K> child) {
062 children.put(child.getKey(), child);
063 }
064
065 /** Get key of this node. */
066 public K getKey() {
067 return key;
068 }
069
070 /** Get children of this node. */
071 public UnmodifiableCollection<SimpleTreeNode<K>> getChildren() {
072 return CollectionUtils.asUnmodifiable(children.values());
073 }
074
075 /**
076 * This returns a nicely indented representation of the whole tree below
077 * this node.
078 */
079 @Override
080 public String toString() {
081 StringBuilder result = new StringBuilder();
082 result.append(key + StringUtils.CR);
083 for (SimpleTreeNode<K> child : children.values()) {
084 result.append(StringUtils.prefixLines(child.toString(),
085 StringUtils.TWO_SPACES, true));
086 result.append(StringUtils.CR);
087 }
088 return result.toString();
089 }
090 }