/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//LoInfo オブジェクトリスト生成クラス
//
//変更履歴
//2005.02.03  新規作成  森　智志
//
//機能
//
//ManifestInfoオブジェクトを作成し、ManifestListに格納するための
// factoryクラスです。
//
/////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.lo.lom.learnableinfo;

import java.util.*;
import java.io.File;



/**
 * ManifestInfoオブジェクトを作成し、ManifestListに格納するための
 * factoryクラスです。
 * @author s-mori
 * @version 1.0
 */
public class ManifestListFactory {

	/**
	 * コンストラクタ
	 *
	 */
	public ManifestListFactory(){
	}
	
	/**
	 * マニフェストファイルのディレクトリに含まれるマニフェストファイルから、ManifestInfoのリストを作成します。
	 * @param manifestDir マニフェストファイルが含まれるディレクトリ
	 * @return ManifestListオブジェクト
	 * @throws Exception
	 */
	public ManifestList makeManifestList(File manifestDir) throws Exception{
		if(manifestDir == null){
			throw new NullPointerException("Manifest directory is null.");
		}

		ManifestFileList fileList = new ManifestFileList();
		fileList.addPath(manifestDir.getPath());
		return this.makeManifestList(fileList);
		
	}
	
	/**
	 * マニフェストファイルのディレクトリのリストに含まれるマニフェストファイルから、ManifestInfoのリストを作成します。
	 * @param dirList マニフェストファイルが含まれるディレクトリリスト
	 * @return ManifestListオブジェクト
	 * @throws Exception
	 */
	public ManifestList makeManifestList(ManifestFileList dirList) throws Exception{
		if(dirList == null){
			throw new NullPointerException("dirList is null.");
		}
		
		ManifestList maniList = new ManifestList();
		
		// すべてのマニフェストファイルについて、manifestList を取得する
		while(dirList.next()){
			File maniFile = dirList.get();
			ScormXMLInfoFactory scormFactory = new ScormXMLInfoFactory(maniFile);
			Collection manifestList = scormFactory.makeManifestInfoList();
			Iterator it = manifestList.iterator();
			
			// ManifestList を作成
			while(it.hasNext()){
				maniList.add((ManifestInfo)it.next());
			}
			
		}
		
		return maniList;
	}
	
	
}
