diff src/treecms/api/NodeData.java @ 14:8bf59f161b23

separete Node methods to NodeContext , NodeAttribute , NodeChildren
author misaka
date Tue, 17 May 2011 18:44:14 +0900
parents c8601b0fa8a3
children 22cd920986c5
line wrap: on
line diff
--- a/src/treecms/api/NodeData.java	Wed May 11 22:08:20 2011 +0900
+++ b/src/treecms/api/NodeData.java	Tue May 17 18:44:14 2011 +0900
@@ -1,15 +1,11 @@
 package treecms.api;
 
 import java.nio.ByteBuffer;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import org.apache.commons.collections.list.SetUniqueList;
+
+import treecms.tree.util.NodeChildrenImpl;
 
 /**
  * Node が保持するデータのスナップショットです.Node を大きく変更するときや新しく作成される場合に使用されます.
@@ -20,169 +16,140 @@
  * getID,getForest を呼び出すと UnsupportedOperationException をスローします.
  * @author shoshi
  */
-public final class NodeData implements Node
+public class NodeData<T extends Node<T>> implements NodeAttributes , NodeChildren<T>
 {
-	/**
-	 * 子供 Node の List
-	 * 子供 Node の List は重複する Node を許可しない.
-	 */
-	private List<Node> m_children;
-	
-	/**
-	 * Key と対応する Value の Map
-	 */
-	private Map<ByteBuffer,ByteBuffer> m_attrs;
-	
-	/**
-	 * コンストラクタです.なにもしません
-	 */
-	public NodeData()
-	{
-		this(null);
-	}
+	private NodeChildrenImpl<T> m_children;
+	private NodeAttributesImpl m_attrs;
 	
-	/**
-	 * コピーコンストラクタです.
-	 * NodeData の内容を防御的にコピーします.
-	 * @param _data
-	 */
-	public NodeData(NodeData _data)
+	public NodeData(NodeChildren<T> _children,NodeAttributes _attrs)
+	{
+		m_children = new NodeChildrenImpl<T>();
+		m_attrs = new NodeAttributesImpl();
+	}
+
+	@Override
+	public List<T> getList()
 	{
-		if(_data != null){
-			// SetUniqueList を使用することにより,List の重複要素を許可しない.
-			m_children = SetUniqueList.decorate(_data.m_children);
-			m_attrs = new HashMap<ByteBuffer,ByteBuffer>(_data.m_attrs);
-			return;
-		}
-		m_children = SetUniqueList.decorate(new ArrayList<Node>());
-		m_attrs = new HashMap<ByteBuffer,ByteBuffer>();
+		return m_children.getList();
+	}
+
+	@Override
+	public Set<String> getUUIDSet()
+	{
+		return m_children.getUUIDSet();
+	}
+
+	@Override
+	public boolean add(T _child)
+	{
+		return m_children.add(_child);
 	}
-	
-	/**
-	 * 内部でコピーコンストラクタを呼び出します.
-	 * @return この NodeData のコピー
-	 */
-	public NodeData deepCopy()
+
+	@Override
+	public boolean addAll(NodeChildren<T> _children)
+	{
+		return m_children.addAll(_children);
+	}
+
+	@Override
+	public T get(String _uuid)
 	{
-		return new NodeData(this);
+		return m_children.get(_uuid);
 	}
-	
+
 	@Override
-	public NodeID getID()
+	public T get(int _index)
 	{
-		//このクラスはデータのみ保持する.
-		return null;
+		return m_children.get(_index);
+	}
+
+	@Override
+	public T remove(String _uuid)
+	{
+		return m_children.remove(_uuid);
 	}
 
 	@Override
-	public NodeData getData()
+	public T remove(int _index)
+	{
+		return m_children.remove(_index);
+	}
+
+	@Override
+	public T replace(T _newChild)
 	{
-		return new NodeData(this);
+		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 Forest getForest()
+	public void clearChildren()
 	{
-		//このクラスはデータのみ保持する.
-		return null;
+		m_children.clearChildren();
+	}
+
+	@Override
+	public Map<ByteBuffer, ByteBuffer> asMap()
+	{
+		return m_attrs.asMap();
 	}
-	
-	/*
-	 * 属性関連
-	 */
-	
-	public Set<ByteBuffer> keySet()
+
+	@Override
+	public Set<ByteBuffer> getKeySet()
+	{
+		return m_attrs.getKeySet();
+	}
+
+	@Override
+	public void put(ByteBuffer _name, ByteBuffer _value)
 	{
-		return m_attrs.keySet();
+		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 Map<ByteBuffer,ByteBuffer> getAll()
-	{
-		return Collections.unmodifiableMap(this.m_attrs);
-	}
-	
-	@Override
-	public void put(ByteBuffer _name,ByteBuffer _value)
+	public NodeAttributes getAll()
 	{
-		m_attrs.put(_name,_value);
+		return m_attrs.getAll();
 	}
-	
-	@Override
-	public void putAll(Map<ByteBuffer,ByteBuffer> _map)
-	{
-		m_attrs.putAll(_map);
-	}
-	
+
 	@Override
 	public void remove(ByteBuffer _name)
 	{
 		m_attrs.remove(_name);
 	}
-	
+
 	@Override
 	public void removeAll(Set<ByteBuffer> _keySet)
 	{
-		for(ByteBuffer _key : _keySet){
-			m_attrs.remove(_key);
-		}
-	}
-	
-	@Override
-	public void clear()
-	{
-		m_attrs.clear();
+		m_attrs.removeAll(_keySet);
 	}
-	
-	/*
-	 * 子供関連
-	 */
-	
-	@Override
-	public Iterator<Node> getChildren()
-	{
-		return Collections.unmodifiableList(m_children).iterator();
-	}
-	
-	@Override
-	public void addChild(Node _child)
-	{
-		m_children.add(_child);
-	}
-	
+
 	@Override
-	public void addChildren(List<Node> _child)
-	{
-		m_children.addAll(_child);
-	}
-	
-	@Override
-	public void removeChild(Node _child)
-	{
-		m_children.remove(_child);
-	}
-	
-	@Override
-	public void removeChildren(List<Node> _child)
+	public void clearAttributes()
 	{
-		m_children.removeAll(_child);
-	}
-	
-	@Override
-	public void clearChildren()
-	{
-		m_children.clear();
-	}
-	
-	@Override
-	public Node cloneNode(NodeData _data)
-	{
-		throw new UnsupportedOperationException();
+		m_attrs.clearAttributes();
 	}
 }