package pbl2011.model;

import java.util.ArrayList;
import java.util.List;

/**
 * Node(クラス)とArc(弧)をセットで保持するクラス.
 * 
 * 1回の処理で複数のクラスと弧のセットを扱う場合に使用する
 * 
 * @author isom
 *
 */
public class NodeArcSet {
	public List<ClassNode> classNodeList;
	public List<AssociationArc> associationArcList;
	private boolean createFlg;
	
	/**
	 * コンストラクタ.
	 */
	public NodeArcSet() {
		classNodeList = new ArrayList<ClassNode>();
		associationArcList = new ArrayList<AssociationArc>();
		createFlg = false;
	}
	
	/**
	 * セットに対してClassNode型オブジェクトを追加する.
	 * 
	 * @param cn ClassNode型オブジェクト
	 * @return NodeArcSet型オブジェクト
	 * @see .add(ClassNode).add(ClassNode)といった連結呼び出しが可能
	 */
	public NodeArcSet add(ClassNode cn) {
		classNodeList.add(cn);
		return this;
	}
	
	/**
	 * セットに対してAssociationArc型オブジェクトを追加する.
	 * 
	 * @param aa AssociationArc型オブジェクト
	 * @return NodeArcSet型オブジェクト
	 * @see .add(AssociationArc).add(AssociationArc)といった連結呼び出しが可能
	 */
	public NodeArcSet add(AssociationArc aa) {
		associationArcList.add(aa);
		return this;
	}
	
	/**
	 * セットに含まれるClassNode型リストが空であるかどうかを判定する.
	 * 
	 * @return 空ならtrue, 空でなければfalseを返す
	 */
	public boolean isNodeEmpty() {
		if (classNodeList.size() == 0) {
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * セットに含まれるAssociationArc型リストが空であるかどうかを判定する.
	 * 
	 * @return 空ならtrue, 空でなければfalseを返す
	 */
	public boolean isArcEmpty() {
		if (associationArcList.size() == 0) {
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * セットに含まれるClassNode型リストとAssociationArc型リストが空であるかどうかを判定する.
	 * 
	 * @return 空ならtrue, 空でなければfalseを返す
	 */
	public boolean isEmpty() {

		if (isNodeEmpty() && isArcEmpty()) {
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * クリエイトフラグを設定する.
	 * 
	 * @param flg 設定するフラグ
	 */
	public void setCreateFlg(boolean flg) {
		createFlg = flg;
	}
	
	/**
	 * クリエイトフラグを取得する.
	 * 
	 * @return boolean
	 */
	public boolean isCreate() {
		return createFlg;
	}
	
	/**
	 * オブジェクトを文字列で返す.
	 * 
	 * @see ClassNode#toString() String
	 * @see AssociationArc#toString() String
	 */
	@Override
	public String toString() {
		return classNodeList.toString() + associationArcList.toString();
	}
	
}