    001package org.opengion.fukurou.model;
    002
    003import java.io.File;
    004
    005import org.opengion.fukurou.util.StringUtil;
    006
    007
    008/**
    009 * ファイル操作インスタンスのファクトリークラス
    010 *
    011 * システムリソースの「CLOUD_TARGET」を参照して、
    012 * 処理対象のファイル操作クラスを生成します。
    013 *
    014 * デフォルトはローカルサーバのファイル操作を行う、
    015 * DefaultFileOperationクラスを生成します。
    016 *
    017 * @og.rev 5.10.8.0 (2019/02/01) 新規作成
    018 * @sinse JDK7.0
    019 */
    020public class FileOperationFactory {
    021        private static final int BUFFER_MIDDLE = 200;
    022
    023        /**
    024         * 引数を元に、ファイル操作クラスを生成します。
    025         *
    026         * @param path ファイルパス
    027         * @return ファイル操作インスタンス
    028         */
    029        public static FileOperation newStorageOperation(String path) {
    030                return newStorageOperation(null, null, path.toString());
    031        }
    032
    033        /**
    034         * 引数を元に、ファイル操作クラスを生成します。
    035         *
    036         * @param plugin 利用プラグイン
    037         * @param buket バケット名
    038         * @param dir ディレクトリ
    039         * @param fileName ファイル名
    040         * @return ファイル操作インスタンス
    041         */
    042        public static FileOperation newStorageOperation(String plugin, String buket, String dir, String fileName) {
    043                StringBuilder path = new StringBuilder(BUFFER_MIDDLE);
    044                path.append(dir).append(File.separator).append(fileName);
    045
    046                return newStorageOperation(path.toString());
    047        }
    048
    049        /**
    050         * 引数を元に、ファイル操作クラスを生成します。
    051         *
    052         * @param plugin 利用プラグイン
    053         * @param buket バケット名
    054         * @param file ファイル情報
    055         * @param fileName ファイル名
    056         * @return ファイル操作インスタンス
    057         */
    058        public static FileOperation newStorageOperation(String plugin, String buket, FileOperation file, String fileName) {
    059                StringBuilder path = new StringBuilder(BUFFER_MIDDLE);
    060                path.append(file.getPath()).append(File.separator).append(fileName);
    061
    062                return newStorageOperation(path.toString());
    063        }
    064
    065        /**
    066         * 引数を元に、ファイル操作クラスを生成します。
    067         * CLOUD_TARGETがNULLの場合はローカルファイル用のクラスを利用します。
    068         *
    069         * @param plugin 利用プラグイン
    070         * @param buket バケット名
    071         * @param path ファイルパス
    072         * @return ファイル操作インスタンス
    073         */
    074        public static FileOperation newStorageOperation(String plugin, String buket, String path) {
    075                FileOperation rtn;
    076                String cloudTarget = null;
    077
    078                Object[] args = new Object[] { buket, path };
    079
    080                // 対象のクラウドサービスを取得(大文字化)。
    081                // 未指定の場合は、ローカルディレクトリを利用。
    082                if ( plugin != null && plugin.length() > 0 ) {
    083                        cloudTarget = plugin.toUpperCase();
    084                }
    085
    086                try {
    087                        StringBuilder sb = new StringBuilder(BUFFER_MIDDLE);
    088
    089                        if (StringUtil.isNull(cloudTarget)) {
    090                                sb.append("org.opengion.fukurou.model.DefaultFileOperation");
    091                        } else {
    092                                sb.append("org.opengion.plugin.cloud.");
    093                                sb.append("FileOperation_");
    094                                sb.append(cloudTarget);
    095                        }
    096
    097                        rtn = (FileOperation) Class.forName(sb.toString())
    098                                        .getConstructor(String.class, String.class)
    099                                        .newInstance(args);
    100                } catch (Exception e) {
    101                        StringBuilder errMsg = new StringBuilder(BUFFER_MIDDLE);
    102                        errMsg.append("ファイルストレージの操作クラス生成に失敗しました。target:").append(cloudTarget);
    103                        errMsg.append(" システムエラー情報：").append(e.getMessage());
    104                        throw new RuntimeException(errMsg.toString());
    105                }
    106
    107                return rtn;
    108        }
    109}