/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: LogicalOperatorFactory.java,v 1.2 2005/05/31 14:38:20 rampil Exp $
 */
package org.logical_paradox.koike.rss.search.lo;

import org.logical_paradox.koike.core.search.Element;

/**
 * 検索結果の論理演算ロジックファクトリー
 * インデックスシステムからの回答をAND演算したりOR演算したりするロジックのファクトリ
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public class LogicalOperatorFactory {
	/** AND演算子 */
	private static final LogicalOperator andOperator = new AndLogicalOperator();
	/** OR演算子 */
	private static final LogicalOperator orOperator = new OrLogicalOperator();
	/** SEQ演算子 */
	private static final LogicalOperator seqOperator = new SeqLogicalOperator();

	/**
	 * 論理演算オペレータを返す
	 * @param type Elementクラスで指定されている論理演算のタイプ
	 * @return 対応する論理演算子
	 */
	public static final LogicalOperator getOperator(int type) {
		switch(type) {
			// AND
			case Element.TYPE_AND:
				return andOperator;
			// OR
			case Element.TYPE_OR:
				return orOperator;
			// SEQ
			case Element.TYPE_SEQ:
				return seqOperator;
			// その他のハンドラが登録されていない演算子
			default:
				throw new IllegalArgumentException();
		}
	}
}
