    001/*
    002 * Copyright (c) 2009 The openGion Project.
    003 *
    004 * Licensed under the Apache License, Version 2.0 (the "License");
    005 * you may not use this file except in compliance with the License.
    006 * You may obtain a copy of the License at
    007 *
    008 *     http://www.apache.org/licenses/LICENSE-2.0
    009 *
    010 * Unless required by applicable law or agreed to in writing, software
    011 * distributed under the License is distributed on an "AS IS" BASIS,
    012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
    013 * either express or implied. See the License for the specific language
    014 * governing permissions and limitations under the License.
    015 */
    016package org.opengion.hayabusa.io;
    017
    018import jakarta.servlet.http.HttpSession;
    019
    020import org.opengion.hayabusa.common.HybsSystemException;
    021
    022/**
    023 * クラウド別のクラス生成
    024 *
    025 * @og.rev 5.9.25.0 (2017/10/06) 新規作成
    026 * @og.group
    027 *
    028 * @version 5.0
    029 * @author T.OTA
    030 * @since JDK7.0
    031 */
    032public final class StorageAPIFactory {
    033        /**
    034         * デフォルトコンストラクタを private 化しておきます。
    035         */
    036        private StorageAPIFactory(){};
    037
    038        /**
    039         * 指定されたクラウド対象クラスを生成する。
    040         *
    041         * @param storage クラウド種別
    042         * @param container コンテナ
    043         * @param hsession セッション
    044         * @return StorageAPIを継承したクラス
    045         */
    046        public static StorageAPI newStorageAPI(final String storage, final String container, final HttpSession hsession){
    047                StorageAPI storageapi;
    048                try{
    049                        // StorageAPIの実装ｸﾗｽをstorage別に生成する
    050                        final Object[] args = new Object[]{container, hsession};
    051                        storageapi = (StorageAPI)Class.forName( "org.opengion.plugin.cloud.StorageAPI_" + storage )
    052                                        .getConstructor(String.class, HttpSession.class)
    053                                        .newInstance(args);
    054//              } catch( final Exception ex ) {
    055                } catch( final Throwable th ) {         // PMD : 6.9.9.4 (2018/10/01)
    056                        final StringBuilder sbErrMsg = new StringBuilder()
    057                                .append("ｸﾗｳﾄﾞｽﾄﾚｰｼﾞ用のｸﾗｽ生成に失敗しました。storage:").append(storage)
    058                                .append(" container:").append(container)
    059                                .append(" errInfo:"  ).append(th)
    060                                .append(" errCause:" ).append(th.getCause());
    061//                      throw new HybsSystemException(sbErrMsg.toString());
    062                        throw new HybsSystemException(sbErrMsg.toString() , th);        // 8.0.0.0 (2021/07/31) original stack trace may be lost
    063                }
    064                return storageapi;
    065        }
    066}