Mercurial > hg > Members > shoshi > TreeCMSv2
view src/treecms/api/Node.java @ 13:c8601b0fa8a3
added Predicate and PredicateList
author | shoshi |
---|---|
date | Wed, 11 May 2011 22:08:20 +0900 |
parents | fbbb7e414346 |
children |
line wrap: on
line source
package treecms.api; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.nio.ByteBuffer; /** * 木構造の基本のデータ単位であるNodeを示します.Nodeは子供のリストとデータのマップを保持します.また,クライアントはノードが保持しているデータをNodeDataとして * 取得することが出来ます. * * NodeはSingleLinkで子供Nodeへのパスしか保持していません、どのNodeが親かどうか判断するのは不可能です. * このようにしたのは,非破壊的木構造を実装するに当たり,編集対象のNodeの親を検索するのが困難であるからです. * DoubleLinkな実装はTree/MonotonicTreeで行います. * * また,重複した子供を追加することは出来ません,このインターフェイスを実装するクラスはそのように実装します. * @author shoshi */ public interface Node { /** * Nodeに対応するNodeIDを取得します. * @return Nodeに対応するNodeID */ public NodeID getID(); /** * Nodeが保持するデータを取得します.クライアントはこのメソッドを用いて取得されるNodeDataを用いてNodeの内容を<b>変更できません</b>。 * 変更を加えた場合は無視されるか、例外が発生します. * @return Nodeが保持するNodeData */ public NodeData getData(); /** * Nodeが属するForestを取得します. * @return Nodeが属するForest */ public Forest getForest(); /* * 属性関連のメソッド * get,getAll,put,putAll,remove,removeAll,clear */ /** * このNodeが保持する値の中で指定されたキーと対応する値を取得します. * @param _key データに対応するキー * @return キーと対応する値,見つからない場合はnull */ public ByteBuffer get(ByteBuffer _key); /** * このNodeが保持するデータをマップとしてすべて取得します. * @return Nodeが保持するすべてのデータのマップ */ public Map<ByteBuffer,ByteBuffer> getAll(); /** * キーとそれに対応する値を保存します.キーが重複した場合は上書きされます. * @param _key キー * @param _value 値 */ public void put(ByteBuffer _key,ByteBuffer _value); /** * キーとそれに対応する値を複数保持するマップを引数としてとり,マップが保持する値をすべて追加します. * @param _map 追加される値のマップ */ public void putAll(Map<ByteBuffer,ByteBuffer> _map); /** * キーとそれに対応する値を削除します。 * @param _key キー */ public void remove(ByteBuffer _key); /** * Keyの集合すべてを削除します. * @param _key */ public void removeAll(Set<ByteBuffer> _key); /** * Keyの集合全てを削除します. */ public void clear(); /* * 子供関連 * getChildren,addChild,addChildren,removeChild,removeChildren,clearChildren */ /** * 子供のIteratorを取得します.このIteratorは編集するためのメソッドは実装しません. * 呼び出した場合は例外は発生します. * @return 子供NodeのIterator */ public Iterator<Node> getChildren(); /** * 指定されたNodeを子供Nodeとして追加します. * @param _child */ public void addChild(Node _child); /** * 指定されたリストに含まれるNodeを,すべて子供Nodeとして追加します. * @param _children 追加される子供Nodeを保持するリスト */ public void addChildren(List<Node> _children); /** * 指定されたNodeを削除します。 * @param _child */ public void removeChild(Node _child); /** * 指定した子供を全て削除します. * @param _children 削除される子供 */ public void removeChildren(List<Node> _children); /** * 全ての子供を削除します. */ public void clearChildren(); /** * このNodeのクローンを作成します. * * クローンされたNodeはNodeIDとデータを受け継ぎます.クローンする際にデータに変更を加えることが出来ます. * 変更を加える必要がない場合はnullを_dataに引数として渡します. * * @param _data クローンされるNodeに適用されるNodeData */ public Node cloneNode(NodeData _data); }