view src/treecms/api/NodeData.java @ 15:22cd920986c5

commit
author misaka
date Tue, 17 May 2011 21:25:17 +0900
parents 8bf59f161b23
children
line wrap: on
line source

package treecms.api;

import java.nio.ByteBuffer;
import java.util.List;
import java.util.Map;
import java.util.Set;

import treecms.tree.util.NodeChildrenImpl;

/**
 * Node が保持するデータのスナップショットです.Node を大きく変更するときや新しく作成される場合に使用されます.
 * 通常このクラスのインスタンスを Node から取得した場合,NodeData インスタンスに変更(set,add)を加えても元の Node に変更は反映されません.
 * その様に実装してください.
 * 
 * このクラスは Node が保持するデータのうち 子供ノードのリスト・属性のマップ のみ保持しています.つまり,ノードが持っているはずの ID は保持していません.
 * getID,getForest を呼び出すと UnsupportedOperationException をスローします.
 * @author shoshi
 */
public class NodeData<T extends Node<T>> implements NodeAttributes , NodeChildren<T>
{
	private NodeChildrenImpl<T> m_children;
	private NodeAttributesImpl m_attrs;
	
	public NodeData()
	{
		this(null,null);
	}
	
	public NodeData(NodeData<T> _newData)
	{
		this(_newData.m_children,_newData.m_attrs);
	}
	
	public NodeData(NodeChildren<T> _children,NodeAttributes _attrs)
	{
		m_children = new NodeChildrenImpl<T>(_children);
		m_attrs = new NodeAttributesImpl();
	}

	@Override
	public List<T> getList()
	{
		return m_children.getList();
	}

	@Override
	public Set<String> getUUIDSet()
	{
		return m_children.getUUIDSet();
	}

	@Override
	public boolean add(T _child)
	{
		return m_children.add(_child);
	}

	@Override
	public boolean addAll(NodeChildren<T> _children)
	{
		return m_children.addAll(_children);
	}

	@Override
	public T get(String _uuid)
	{
		return m_children.get(_uuid);
	}

	@Override
	public T get(int _index)
	{
		return m_children.get(_index);
	}

	@Override
	public T remove(String _uuid)
	{
		return m_children.remove(_uuid);
	}

	@Override
	public T remove(int _index)
	{
		return m_children.remove(_index);
	}

	@Override
	public T replace(T _newChild)
	{
		return m_children.replace(_newChild);
	}

	@Override
	public boolean contains(String _id)
	{
		return m_children.contains(_id);
	}

	@Override
	public boolean swap(String _uuid1, String _uuid2)
	{
		return m_children.swap(_uuid1, _uuid2);
	}

	@Override
	public void clearChildren()
	{
		m_children.clearChildren();
	}

	@Override
	public Map<ByteBuffer, ByteBuffer> asMap()
	{
		return m_attrs.asMap();
	}

	@Override
	public Set<ByteBuffer> getKeySet()
	{
		return m_attrs.getKeySet();
	}

	@Override
	public void put(ByteBuffer _name, ByteBuffer _value)
	{
		m_attrs.put(_name,_value);
	}

	@Override
	public void putAll(NodeAttributes _attrs) 
	{
		m_attrs.putAll(_attrs);
	}

	@Override
	public ByteBuffer get(ByteBuffer _name)
	{
		return m_attrs.get(_name);
	}

	@Override
	public NodeAttributes getAll()
	{
		return m_attrs.getAll();
	}

	@Override
	public void remove(ByteBuffer _name)
	{
		m_attrs.remove(_name);
	}

	@Override
	public void removeAll(Set<ByteBuffer> _keySet)
	{
		m_attrs.removeAll(_keySet);
	}

	@Override
	public void clearAttributes()
	{
		m_attrs.clearAttributes();
	}
}