/**
 * Tree.java
 * Created on Aug 24, 2006
 * (C) Copyright TANDBERG Television Ltd.
 */
package com.tandbergtv.workflow.message.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;

/**
 * This class follows the Composite design pattern
 * and is used to hierarchically store (key,value)
 * pairs of a message payload
 *
 * @author Vlada Jakobac
 *
 */
public class Tree extends AbstractTree
{
	private String key;
	
	private static final Logger logger = Logger.getLogger(Tree.class);
	
	/**
	 * each tree will eventually contain a key and a Scalar, which is used to hold the value
	 */
	private List<AbstractTree> treeList = new ArrayList<AbstractTree>();
	
	private String name;//could be used as a value associated with a key if the tree is not a single Scalar
	
	public Tree()
	{
		super();
	}
	public Tree(String key)
	{
		super();
		this.key = key;
	}
	public Tree(String name, String key)
	{
		super();
		this.name = name;
		this.key = key;
	}
	
	public void add(AbstractTree absTree){
		treeList.add(absTree);
	}
	
	/**
	 * @return Returns the key.
	 */
	public String getKey()
	{
		return key;
	}
	/**
	 * @param key The key to set.
	 */
	public void setKey(String key)
	{
		this.key = key;
	}
	/**
	 * @return Returns the name.
	 */
	public String getName()
	{
		return name;
	}
	/**
	 * @param name The name to set.
	 */
	public void setName(String name)
	{
		this.name = name;
	}
	/**
	 * @return Returns the tree.
	 */
	public List<AbstractTree> getTreeList()
	{
		return treeList;
	}
	/**
	 * @param tree The tree to set.
	 */
	public void setTreeList(List<AbstractTree> tree)
	{
		this.treeList = tree;
	}
	public void print(){
		logger.debug("treeKey: "+key);
		Iterator iterator = treeList.iterator();
		while (iterator.hasNext()){
			AbstractTree absTree = (AbstractTree) iterator.next();
			absTree.print();
		}
	}

}
