001package org.opengion.hayabusa.io;
002
003import javax.servlet.http.HttpSession;
004
005import org.opengion.hayabusa.common.HybsSystemException;
006
007/**
008 * クラウド別のクラス生成
009 * 
010 * @og.rev 5.9.25.0 (2017/10/06) 新規作成
011 * @og.group
012 *
013 * @version 5.0
014 * @author T.OTA
015 * @sinse JDK7.0
016 */
017public class StorageAPIFactory {
018        /**
019         * デフォルトコンストラクタを private 化しておきます。
020         */
021        private StorageAPIFactory(){};
022
023        /**
024         * 指定されたクラウド対象クラスを生成する
025         *
026         * @param storage クラウド種別
027         * @param container コンテナ
028         * @param hsession セッション
029         * @return StorageAPIを継承したクラス
030         */
031        public static StorageAPI newStorageAPI(String storage, String container, HttpSession hsession){
032                StorageAPI storageapi;
033                try{
034                        // StorageAPIの実装クラスをstorage別に生成する
035                        Object[] args = new Object[]{container, hsession};
036                        storageapi = (StorageAPI)Class.forName( "org.opengion.plugin.cloud.StorageAPI_" + storage )
037                                        .getConstructor(String.class, HttpSession.class)
038                                        .newInstance(args);
039                }catch(Exception e){
040                        StringBuilder sbErrMsg = new StringBuilder();
041                        sbErrMsg.append("クラウドストレージ用のクラス生成に失敗しました。storage:");
042                        sbErrMsg.append(storage);
043                        sbErrMsg.append(" container:");
044                        sbErrMsg.append(container);
045                        sbErrMsg.append(" errInfo:");
046                        sbErrMsg.append(e);
047                        sbErrMsg.append(" errCause:");
048                        sbErrMsg.append(e.getCause());
049                        throw new HybsSystemException(sbErrMsg.toString());
050                }
051                return storageapi;
052        }
053}