    001package org.opengion.fukurou.model;
    002
    003import java.io.File;
    004import org.opengion.fukurou.util.StringUtil;
    005
    006
    007/**
    008 * ファイル操作のファクトリークラス
    009 *
    010 * デフォルトはローカルのファイル操作を行うFileOperationクラスを生成します。
    011 * 利用プラグイン、バケット、パス等を指定する事でクラウドのオブジェクトストレージに対応した
    012 * クラスを生成します。
    013 *
    014 * @og.rev 5.10.8.0 (2019/02/01) 新規作成
    015 * @og.rev 5.10.9.0 (2019/03/01) 変更対応
    016 * @author oota
    017 * @since JDK7.0
    018 */
    019public class FileOperationFactory {
    020        private static final int BUFFER_MIDDLE = 200;
    021
    022        /**
    023         * インスタンス生成
    024         *
    025         * 引数を元に、ファイル操作インスタンスを生成します。
    026         * ローカルのファイル操作を行うFileOperationクラスを返します。
    027         *
    028         * @param path ファイルパス
    029         * @return ファイル操作インスタンス
    030         */
    031        public static FileOperation newStorageOperation(String path) {
    032                return newStorageOperation( (String)null, null, path.toString());
    033        }
    034
    035        /**
    036         * インスタンス生成
    037         *
    038         * 引数を元に、ファイル操作クラスを生成します。
    039         * プラグインとバケットを指定する事で、plugin.cloud内のクラウド用のクラスを返します。
    040         *
    041         * ディレクトリとファイル名からパスを生成します。
    042         *
    043         * @param plugin 利用プラグイン
    044         * @param buket バケット名
    045         * @param dir ディレクトリ
    046         * @param fileName ファイル名
    047         * @return ファイル操作インスタンス
    048         */
    049        public static FileOperation newStorageOperation(String plugin, String buket, String dir, String fileName) {
    050                StringBuilder path = new StringBuilder(BUFFER_MIDDLE);
    051                path.append( dir );
    052
    053                if(fileName != null) {
    054                        path.append(File.separator).append(fileName);
    055                }
    056
    057                return newStorageOperation(plugin, buket, path.toString());
    058        }
    059
    060        /**
    061         * インスタンス生成
    062         *
    063         * 引数を元に、ファイル操作クラスを生成します。
    064         * プラグインとバケットを指定する事で、plugin.cloud内のクラウド用のクラスを返します。
    065         * プラグインがnull、もしくはDEFAULTの場合は標準のFileOperation(ローカルファイル用)を返します。
    066         *
    067         * @param plugin 利用プラグイン
    068         * @param buket バケット名
    069         * @param path ファイルパス
    070         * @return ファイル操作インスタンス
    071         */
    072        public static FileOperation newStorageOperation(String plugin, String buket, String path) {
    073                FileOperation rtn;
    074                String cloudTarget = null;
    075
    076                Object[] args = new Object[] { buket, path };
    077
    078                // 対象のクラウドサービスを取得(大文字化)。
    079                // 未指定の場合は、ローカルディレクトリを利用。
    080                if ( plugin != null && plugin.length() > 0 ) {
    081                        cloudTarget = plugin.toUpperCase();
    082                }
    083
    084                try {
    085                        StringBuilder sb = new StringBuilder(BUFFER_MIDDLE);
    086
    087                        if (StringUtil.isNull(cloudTarget) || "DEFAULT".equals(cloudTarget)) {
    088                                sb.append("org.opengion.fukurou.model.FileOperation");
    089                        } else {
    090                                sb.append("org.opengion.plugin.cloud.");
    091                                sb.append("FileOperation_");
    092                                sb.append(cloudTarget);
    093                        }
    094
    095                        rtn = (FileOperation) Class.forName(sb.toString())
    096                                        .getConstructor(String.class, String.class)
    097                                        .newInstance(args);
    098                } catch (Exception e) {
    099                        // キャッチしたエラー情報をスロー
    100                        throw new RuntimeException(e);
    101                }
    102
    103                return rtn;
    104        }
    105
    106
    107        /**
    108         * インスタンス生成
    109         *
    110         * 引数を元に、ファイル操作クラスを生成します。
    111         * 与えたfileオブジェクトがFileOperationだった場合は、プラグインとバケットを取得して
    112         * それに基づいたFileOperationを返します。
    113         * 標準のFileの場合は、defaultのFileOperationを返します。
    114         * 元がnullの場合はnullを返します。
    115         *
    116         * @param file コピー元
    117         * @param dir 親パス(ディレクトリ)
    118         * @param fileName 子パス
    119         * @return 設定をコピーしたのFileOperation
    120         */
    121        public static FileOperation newStorageOperation(File file, String dir, String fileName) {
    122                String plugin = null;
    123                String buket = null;
    124
    125                if( file == null) { return null; }
    126
    127                // FileOperation型の場合にプラグインを判定する
    128                if( file instanceof FileOperation ) {
    129                        plugin = ((FileOperation)file).getPlugin();
    130                        buket = ((FileOperation)file).getBucket();
    131                }
    132
    133                return newStorageOperation( plugin, buket, dir, fileName);
    134
    135        }
    136
    137        /**
    138         * インスタンス生成
    139         *
    140         * コピーするタイプで、子パスを与えないパターンです
    141         *
    142         * @param file コピー元
    143         * @param path パス
    144         * @return 設定をコピーしたのFileOperation
    145         */
    146        public static FileOperation newStorageOperation(File file, String path) {
    147                return newStorageOperation( file, path, null);
    148
    149        }
    150
    151}