Mercurial > hg > Members > shoshi > TreeCMSv2
view src/treecms/api/NodeData.java @ 6:12604eb6b615
added javadoc
author | shoshi |
---|---|
date | Mon, 14 Mar 2011 23:24:38 +0900 |
parents | f5ed85be5640 |
children | fc19e38b669b |
line wrap: on
line source
package treecms.api; 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 { /** * 子供Nodeのリスト */ private List<Node> m_children; /** * キーと対応する値のマップ */ private Map<byte[],byte[]> 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<byte[],byte[]>(_data.m_attrs); return; } m_children = new CopyOnWriteArrayList<Node>(); m_attrs = new ConcurrentHashMap<byte[],byte[]>(); } /** * 内部でコピーコンストラクタを呼び出します. * @return このNodeDataのコピー */ public NodeData deepCopy() { return new NodeData(this); } /** * キーのセットを取得します. * @return キーのセット */ public Set<byte[]> keySet() { return m_attrs.keySet(); } /** * キーに対応する値を取得します. * @param _name * @return キーに対応する値 */ public byte[] get(byte[] _name) { return m_attrs.get(_name); } /** * キーとそれに対応する値を追加します. * @param _name キー * @param _value 値 */ public void put(byte[] _name,byte[] _value) { m_attrs.put(_name,_value); } /** * キーとそれに対応する値のマップ全体を追加します. * @param _map */ public void putAll(Map<byte[],byte[]> _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); } /** * 子供Nodeのリストをクリアします.(すべて削除します.) */ public void clear() { m_children.clear(); } }