/*
 * Copyright (c) 2009 The openGion Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
package org.opengion.fukurou.util;

import java.util.Map;
import java.util.WeakHashMap;
import java.util.Collections;							// 6.4.1.1 (2016/01/16)

/**
 * HybsLoaderを生成するためのファクトリクラスです。
 * HybsLoaderは、ソースディレクトリをキーとして、キャッシュされます。
 *
 * @og.rev 5.1.1.0 (2009/12/01) 新規作成
 * @og.group 業務ロジック
 *
 * @version 5.0
 * @author Hiroki Nakamura
 * @since JDK1.6,
 */
public final class HybsLoaderFactory {

	/** 6.4.3.1 (2016/02/12) Collections.synchronizedMap で同期処理を行います。  */
//	private static final Map<String,HybsLoader> LOADER_MAP = Collections.synchronizedMap( new WeakHashMap<>() );		// 6.4.1.1 (2016/01/16) loaderMap → LOADER_MAP refactoring
	private static final Map<String,HybsLoader> LOADER_MAP = Collections.synchronizedMap( new WeakHashMap<>() );		// 6.4.1.1 (2016/01/16) loaderMap → LOADER_MAP refactoring

	/**
	 * オブジェクトの生成を禁止します。
	 */
	private HybsLoaderFactory() {}

	/**
	 * HybsLoaderオブジェクトを取得します。
	 *
	 * @og.rev 6.4.3.1 (2016/02/12) Collections.synchronizedMap に置き換え。
	 *
	 * @param option HybsLoaderを生成するための設定情報
	 *
	 * @return HybsLoaderオブジェクト
	 */
	public static HybsLoader getLoader( final HybsLoaderConfig option ) {
		HybsLoader loader = null;
//		synchronized( HybsLoaderFactory.class ) {
			loader = LOADER_MAP.get( option.getSrcDir() );
			if( loader == null ) {
				loader = new HybsLoader( option );
			}
			LOADER_MAP.put( option.getSrcDir(), loader );
//		}
		return loader;
	}
}
