Mercurial > hg > Members > shoshi > TreeCMSv2
view src/treecms/api/NodeData.java @ 11:85061e874775
commit
author | shoshi |
---|---|
date | Fri, 06 May 2011 00:42:57 +0900 |
parents | f96193babac0 |
children | fbbb7e414346 |
line wrap: on
line source
package treecms.api; import java.nio.ByteBuffer; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; /** * Nodeが保持するデータの集合です.Nodeを大きく変更するときや新しく作成される場合に使用されます. * 通常このクラスのインスタンスをNodeから取得した場合,NodeDataインスタンスに変更(set,add)を加えても元のNodeに変更は反映されません. * その様に実装してください. * @author shoshi */ public final class NodeData implements Node { /** * 子供Nodeのリスト */ private List<Node> m_children; /** * キーと対応する値のマップ */ private Map<ByteBuffer,ByteBuffer> m_attrs; /** * コンストラクタです.なにもしません */ public NodeData() { this(null); } /** * コピーコンストラクタです.NodeDataの内容を防御的にコピーします. * @param _data */ public NodeData(NodeData _data) { if(_data != null){ m_children = new CopyOnWriteArrayList<Node>(_data.m_children); m_attrs = new ConcurrentHashMap<ByteBuffer,ByteBuffer>(_data.m_attrs); return; } m_children = new CopyOnWriteArrayList<Node>(); m_attrs = new ConcurrentHashMap<ByteBuffer,ByteBuffer>(); } /** * 内部でコピーコンストラクタを呼び出します. * @return このNodeDataのコピー */ public NodeData deepCopy() { return new NodeData(this); } /** * キーのセットを取得します. * @return キーのセット */ public Set<ByteBuffer> keySet() { return m_attrs.keySet(); } /** * キーに対応する値を取得します. * @param _name * @return キーに対応する値 */ public ByteBuffer get(ByteBuffer _name) { return m_attrs.get(_name); } /** * キーとそれに対応する値を追加します. * @param _name キー * @param _value 値 */ public void put(ByteBuffer _name,ByteBuffer _value) { m_attrs.put(_name,_value); } /** * キーとその対応する値をマップから削除します * @param _name */ public void remove(ByteBuffer _name) { m_attrs.remove(_name); } /** * キーとそれに対応する値のマップ全体を追加します. * @param _map */ public void putAll(Map<ByteBuffer,ByteBuffer> _map) { m_attrs.putAll(_map); } /** * 子供Nodeのリストを取得します.<br/> * この取得されたリストは編集できません.編集はadd,addAllより行ってください. * @return 子供Nodeのリスト */ public List<Node> children() { return Collections.unmodifiableList(m_children); } /** * 子供Nodeを追加します. * @param _child */ public void add(Node _child) { m_children.add(_child); } /** * 子供Nodeリスト全部を子供Nodeとして追加します. * @param _child */ public void addAll(List<Node> _child) { m_children.addAll(_child); } /** * 指定されたNodeを子供Nodeのリストから削除します. * @param _child */ public void remove(Node _child) { m_children.remove(_child); } /** * 指定されたNodeのリストに含まれるすべてのNodeを子供Nodeのリストから削除します. * @param _child */ public void removeAll(List<Node> _child) { m_children.removeAll(_child); } /** * NodeDataが保持しているすべてのキーと値の組のマップを返します. * @return すべてのキーと値のマップ */ public Map<ByteBuffer,ByteBuffer> getAll() { return Collections.unmodifiableMap(m_attrs); } /** * 子供Nodeのリストをクリアします.(すべて削除します.) */ public void clear() { m_children.clear(); } @Override public NodeID getID() { return null; } @Override public NodeData getData() { return this; } @Override public Forest getForest() { return null; } }