package org.arefgard.flow.integration;

import org.arefgard.flow.exception.DIContainerNotSupportedException;
import org.arefgard.flow.exception.UsecaseFlowException;
import org.arefgard.flow.integration.icerya.DIContainerIcerya;
import org.arefgard.flow.integration.seasar2.DIContainerSeasar2;
import org.arefgard.flow.integration.spring.DIContainerSpring;
import org.arefgard.flow.util.FileUtil;

/**
 * DIコンテナを生成するファクトリ。
 * 
 * @author Takashi Yamashina
 * @since 1.0.0
 */
public class DIContainerFactory {
	
	/**
	 * DIコンテナを生成する。
	 * <br/>
	 * <br/>
	 * DIコンテナの定義ファイルの拡張子がdiconの場合はseasar2用の、
	 * xmlの場合はSpring用の、dixの場合はIceryaContainer用のDI
	 * コンテナオブジェクトを返す。
	 * @param path DIコンテナのパス(クラスパス相対)
	 * @return DIコンテナ
	 * @throws UsecaseFlowException サポートされていないDIコンテナが指定された場合
	 */
	public static DIContainer createContainer(String path) throws UsecaseFlowException {
		DIContainer container = null;
		if(FileUtil.getExtension(path).equals("dicon")) {
			container = new DIContainerSeasar2(path);
		}else if(FileUtil.getExtension(path).equals("xml")) {
			container = new DIContainerSpring(path);
		}else if(FileUtil.getExtension(path).equals("dix")) {
			container = new DIContainerIcerya(path);
		}else {
			throw new DIContainerNotSupportedException();
		}
		return container;
	}
}
