package trees;

import java.util.Collection;
import java.util.HashMap;

import points.DrawableNamedPoint;

public class TreePlus implements TreeInterface {
  private TreeNode root;
  private HashMap<String, TreeNode> map;

  public TreePlus(String name, int x, int y) {
    map = new HashMap<String, TreeNode>();
    root = new TreeNode(name, x, y);
    map.put(name, root);
  }

  public DrawableNamedPoint getRoot() {
    return root;
  }

  private TreeNode fetch(String name) {
    TreeNode t = map.get(name);
    if (t == null)
      throw new IllegalArgumentException("no node named " + name);
    else
      return t;
  }

  public DrawableNamedPoint addChild(String name, int x, int y, String parent) {
    TreeNode t = fetch(parent);
    TreeNode child = new TreeNode(name, x, y);
    t.addChild(child);
    map.put(name, child);
    return child;
  }

  public Collection<DrawableNamedPoint> getChildren(String node) {
    TreeNode t = fetch(node);
    return t.getChildren();
  }

  public DrawableNamedPoint getParent(String node) {
    TreeNode t = fetch(node);
    return t.getParent();
  }
}

