Mercurial > hg > Members > shoshi > TreeCMSv2
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(); } }