view src/treecms/api/Forest.java @ 16:bb9760760744

commit
author shoshi
date Sat, 21 May 2011 04:46:00 +0900
parents 22cd920986c5
children 168deb591f21
line wrap: on
line source

package treecms.api;

import treecms.tree.util.NodeData;

/**
 * ForestはNodeの集合で、集合に対するアクセスを提供します.クライアントはNodeIDを用いてNodeの取得や作成を行うことが出来ます.
 * @author shoshi
 */
public interface Forest
{
	/**
	 * NodeIDで示されるNodeを取得します.
	 * @param _id Nodeを示すNodeID.
	 * @return NodeIDと一致するNodeがある場合は,Nodeのインスタンスを返し,見つからない場合はnullを返します.
	 */
	SingleNode get(NodeID _id);
	
	/**
	 * 同じUUIDを持つNode中で最新のNodeを取得します.
	 * @param _uuid NodeIDのUUID
	 * @return UUIDと一致するNodeが見つからない場合はnullを返します.
	 */
	SingleNode getTip(String _uuid);
	
	/**
	 * 新しいNodeを作成します.このメソッドで作成されるNodeは新しいUUIDを持ちます.
	 * @return 新しいNode
	 */
	SingleNode create();
	
	/**
	 * あるNodeを木として返します
	 * @param _root
	 * @return Tree あるNodeをルートとした木
	 */
	Tree getTree(SingleNode _root);
	
	/**
	 * 木を非破壊的に編集するMonotonicTreeを取得します
	 * @param _tree 対象
	 * @return TreeEditor
	 */
	MonotonicTree getMonotonicTree(Tree _tree);
	
	/**
	 * NodeDataを保持する新しいNodeを作成します.このメソッドで作成されるNodeは新しいUUIDを持ちます.
	 * このメソッドはNodeDataをNodeに割り当てるとき防御的コピーを行います.
	 * @param _data 新しいNodeが保持するNodeData
	 * @return NodeDataを保持した新しいNode
	 */
	SingleNode create(NodeData<SingleNode> _data);
	
	/**
	 * このForestの現在の最新のMainTreeを取得します
	 * @return このForestのMainTree、最新版
	 */
	Tree getMainTree();
}