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(final String storage, final String container, final HttpSession hsession){
032                StorageAPI storageapi;
033                try{
034                        // StorageAPIの実装クラスをstorage別に生成する
035                        final 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                        final StringBuilder sbErrMsg = new StringBuilder()
041                                .append("クラウドストレージ用のクラス生成に失敗しました。storage:")
042                                .append(storage)
043                                .append(" container:")
044                                .append(container)
045                                .append(" errInfo:")
046                                .append(e)
047                                .append(" errCause:")
048                                .append(e.getCause());
049                        throw new HybsSystemException(sbErrMsg.toString());
050                }
051                return storageapi;
052        }
053}