package jp.co.cybec.laxide.layout;

/**
 * レイアウト描画のためのポイントクラスのファクトリです
 * 
 * @author tokumaru
 *
 */
public class LetsAjaxLayoutPointFactory {
    private static LetsAjaxLayoutPointFactory factory = new LetsAjaxLayoutPointFactory();
	private AbstractLayoutPoints points = null;
    
	private LetsAjaxLayoutPointFactory() {
		
	}
	
	/**
	 * このクラスのインスタンスを取得します。
	 * 
	 * @return LetsAjaxLayoutPointFactoryクラスのインスタンス
	 */
	public static LetsAjaxLayoutPointFactory getInstance() {
		return factory;
	}
    
    /**
     * レイアウトクラスを指定してAbstractLayoutPointsクラスを取得します。
     * 
     * @param layoutPointClass
     * @return
     */
    public AbstractLayoutPoints getLayoutPoints(Class layoutPointClass) {
    	try {
    		Class clazz = Class.forName(layoutPointClass.getName());
    		points = (AbstractLayoutPoints)clazz.newInstance();
    	} catch (ClassNotFoundException e) {
    		e.printStackTrace();
    		throw new RuntimeException(e);
    	} catch (Exception e) {
    		e.printStackTrace();
    		throw new RuntimeException(e);
    	}
    	
    	return points;
    }
    
    
    /**
     * 既にキャッシュされているポイントクラスを返します。
     * ポイントクラスがキャッシュされていない場合はnullを返します。
     * キャッシュを取得するためには既にgetLayoutPoints(Class layoutPointClass)が
     * 呼び出されている必要があります。
     * 
     * @return AbstractLayoutPointsのインスタンス
     */
    public AbstractLayoutPoints getLayoutPoints() {
    	return points;
    }
}
