001package org.opengion.hayabusa.io;
002
003import jakarta.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 * @since JDK7.0
016 */
017public final 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( final Exception ex ) {
040                } catch( final Throwable th ) {         // PMD : 6.9.9.4 (2018/10/01)
041                        final StringBuilder sbErrMsg = new StringBuilder()
042                                .append("クラウドストレージ用のクラス生成に失敗しました。storage:").append(storage)
043                                .append(" container:").append(container)
044                                .append(" errInfo:"  ).append(th)
045                                .append(" errCause:" ).append(th.getCause());
046                        throw new HybsSystemException(sbErrMsg.toString());
047                }
048                return storageapi;
049        }
050}