view src/main/java/jungle/impl/SimpleChildren.java @ 7:c3c65308a11b

removed some package and added Graph API
author shoshi <shoshi@cr.ie.u-ryukyu.ac.jp>
date Fri, 29 Jun 2012 00:03:12 +0900
parents 761d04aecfcb
children
line wrap: on
line source

package jungle.impl;

import java.util.Iterator;
import jungle.core.Children;
import jungle.core.TreeGroup;
import jungle.core.TreeNode;
import jungle.core.graph.Graph;
import jungle.core.graph.Vertex;
import jungle.core.graph.Vertexes;

public class SimpleChildren implements Children
{
	private final SimpleTreeGroup group;
	private final Graph graph;
	private final Vertexes children;
	
	public SimpleChildren(SimpleTreeGroup _group,Vertexes _children,Graph _graph)
	{
		graph = _graph;
		group = _group;
		children = _children;
	}
	
	public Iterator<TreeNode> iterator()
	{
		return new TreeNodeIteratorWrapper(children.iterator());
	}
	
	private class TreeNodeIteratorWrapper implements Iterator<TreeNode>
	{
		private Iterator<Vertex> iterator;
		
		public TreeNodeIteratorWrapper(Iterator<Vertex> _iterator)
		{
			iterator = _iterator;
		}

		@Override
		public boolean hasNext()
		{
			return iterator.hasNext();
		}

		@Override
		public TreeNode next()
		{
			Vertex nextVertex = iterator.next();
			if(nextVertex != null){
				return new SimpleTreeNode(group,nextVertex,graph);
			}
			
			return null;
		}

		@Override
		public void remove()
		{
			throw new UnsupportedOperationException("removing is not supported");
		}
	}

	public boolean contains(TreeNode _treeNode)
	{
		if(_treeNode instanceof SimpleTreeNode){
			SimpleTreeNode converted = (SimpleTreeNode)_treeNode;
			Vertex vertex = converted.getVertex();
			if(converted.getGroup().equals(group)){
				return children.contains(vertex);
			}
		}
		
		return false;
	}

	public TreeNode getAt(int _position)
	{
		if(children.size() < _position || _position < 0){
			throw new IndexOutOfBoundsException("invalid position value.");
		}
		
		Vertex vertex = children.at(_position);
		return new SimpleTreeNode(group,vertex,graph);
	}

	public int size()
	{
		return children.size();
	}
	
	@Override
	public int hashCode()
	{
		return children.hashCode();
	}
	
	@Override
	public boolean equals(Object _obj)
	{
		if(_obj instanceof SimpleChildren){
			SimpleChildren target = (SimpleChildren)_obj;
			return target.equals(children);
		}
		
		return false;
	}
}