    001package org.opengion.fukurou.model;
    002
    003import java.io.File;
    004import java.io.FileInputStream;
    005import java.io.FileNotFoundException;
    006import java.io.IOException;
    007import java.io.InputStream;
    008import java.nio.file.Files;
    009import java.nio.file.Paths;
    010import java.nio.file.StandardCopyOption;
    011
    012/**
    013 * ファイル操作のインタフェース
    014 *
    015 * ローカルサーバ、クラウドストレージ(AWS,AZURE,BLUEMIX,ORACLE)のファイル操作用です。
    016 * FileOperationFactoryを通して、インスタンスを生成可能です。
    017 * Fileクラスを継承しているため、通常のFileとしても扱えます。
    018 *
    019 * @og.group ファイル操作
    020 *
    021 * @og.rev 5.10.8.0 (2019/02/01) 新規作成
    022 * @og.rev 5.10.9.0 (2019/03/01) 変更対応
    023 * @author oota
    024 * @since       JDK7.0
    025 */
    026public class FileOperation extends File{
    027        //* このプログラムのVERSION文字列を設定します。{@VALUE} */
    028        private static final String VERSION = "7.2.9.4 (2020/11/20)" ;
    029        private static final long serialVersionUID = 729420201120L ;
    030
    031        private String myplugin;
    032        private String mybucket;
    033
    034        /**
    035         * コンストラクタ
    036         *
    037         * 初期化処理。
    038         *
    039         * @param path ファイルパス
    040         */
    041        public FileOperation(final String path) {
    042                super(path);
    043        }
    044
    045        /**
    046         * コンストラクタ
    047         *
    048         * FileOperationクラスでは、buketは使用しません。
    049         *
    050         * @param bucket バケット名
    051         * @param path ファイルパス
    052         */
    053        public FileOperation(final String bucket, final String path) {
    054                this(path);
    055                this.mybucket = bucket;
    056        }
    057
    058        /**
    059         * 書き込み処理
    060         *
    061         * InputStreamのデータを書き込みます。
    062         *
    063         * @param is 書き込みデータのInputStream
    064         * @throws IOException ファイル関連エラー情報
    065         */
    066        public void write(final InputStream is) throws IOException {
    067                // InpustStreamを対象パスに出力
    068                Files.copy(is, Paths.get(this.getPath()), StandardCopyOption.REPLACE_EXISTING);
    069        }
    070
    071        /**
    072         * 読み込み処理
    073         *
    074         * データを読み込み、InputStreamとして、返します。
    075         *
    076         * @return 読み込みデータのInputStream
    077         * @throws FileNotFoundException ファイル非存在エラー情報
    078         */
    079        public InputStream read() throws FileNotFoundException {
    080                return new FileInputStream(this.getPath());
    081        }
    082
    083        /**
    084         * コピー処理
    085         *
    086         * ファイルを指定先にコピーします。
    087         *
    088         * @param afPath コピー先
    089         * @return 成否フラグ
    090         */
    091        public boolean copy(final String afPath) {
    092                boolean flgRtn = false;
    093
    094                try {
    095                        // 指定パスのファイルを、指定先にコピー from;jdk7
    096                        Files.copy(Paths.get(this.getPath()), Paths.get(afPath), StandardCopyOption.REPLACE_EXISTING);
    097                        flgRtn = true;
    098                } catch (IOException ie) {
    099                        ;       // スルーしてfalseを返す
    100                }
    101
    102                return flgRtn;
    103        }
    104
    105        /**
    106         * ファイル移動
    107         *
    108         * ファイルを指定先に移動します。
    109         *
    110         * @param afPath 移動先
    111         * @return 成否フラグ
    112         */
    113        public boolean move(final String afPath) {
    114                boolean flgRtn = false;
    115
    116                try {
    117                        // 指定パスのファイルを、指定先に移動 from:jdk7
    118                        Files.move(Paths.get(this.getPath()), Paths.get(afPath), StandardCopyOption.REPLACE_EXISTING);
    119                        flgRtn = true;
    120                } catch (IOException ie) {
    121                        ;       // スルーしてfalseを返す
    122                }
    123                return flgRtn;
    124        }
    125
    126        /**
    127         * 保存先のローカル判定。
    128         *
    129         * 判定結果を返します。
    130         * trueの場合は、ローカル保存。
    131         * falseの場合は、クラウドストレージに保存です。
    132         *
    133         * @return ローカルフラグ
    134         */
    135        public boolean isLocal() {
    136                return true;
    137        }
    138
    139        /**
    140         * カノニカルファイル取得。
    141         *
    142         * カノニカルファイル情報を取得します。
    143         *
    144         * @throws IOException ファイル関連エラー情報
    145         * @return カノニカルファイル情報
    146         */
    147        @Override
    148        public FileOperation getCanonicalFile() throws IOException {
    149                final String canonPath = getCanonicalPath();
    150                return new FileOperation(canonPath);
    151        }
    152
    153        /**
    154         * バケット名取得。
    155         *
    156         * バケット名を取得します。
    157         *
    158         * @return バケット名
    159         */
    160        public String getBucket() {
    161                return this.mybucket;
    162        }
    163
    164        /**
    165         * プラグイン名取得。
    166         *
    167         * プラグイン名を取得します。
    168         *
    169         * @return プラグイン名
    170         */
    171        public String getPlugin() {
    172                return this.myplugin;
    173        }
    174
    175        /**
    176         * プラグイン名のセット。
    177         *
    178         * プラグイン名をセットします。
    179         *
    180         * @param plugin プラグイン名
    181         */
    182        protected void setPlugin( final String plugin ) {
    183                myplugin = plugin;
    184        }
    185
    186        /**
    187         * このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    188         * インタフェース Comparable の 実装に関連して、再定義しています。
    189         *
    190         * @og.rev 7.2.9.4 (2020/11/20) spotbugs:スーパークラスの equals メソッドをオーバーライドしていないクラス
    191         *
    192         * @param   object 比較対象の参照オブジェクト
    193         *
    194         * @return      引数に指定されたオブジェクトとこのオブジェクトが等しい場合は true、そうでない場合は false
    195         */
    196        @Override
    197        public boolean equals( final Object object ) {
    198                return object instanceof File && super.equals( object );        // myplugin とmybucket は無視して、Fileとして比較します。
    199        }
    200
    201//      /**
    202//       * オブジェクトのハッシュコード値を返します。
    203//       * このメソッドは、java.io.File のハッシュ値を返すことで、equals メソッドとの整合性を取っています。
    204//       *
    205//       * @og.rev 7.2.9.4 (2020/11/20) spotbugs:equals メソッドは定義していますが hashCode メソッドは定義していないクラス
    206//       *
    207//       * @return  このオブジェクトのハッシュコード値
    208//       */
    209//      @Override
    210//      public int hashCode() {
    211//              return super.hashCode() ;
    212//      }
    213
    214//      /** テスト用メソッドです。*/
    215//      public static void main(String[] args) {
    216//              System.out.println("start");
    217//
    218//              try {
    219//                      test01();
    220//              }catch(IOException ie) {
    221//                      System.out.println(ie);
    222//              }
    223//
    224//              System.out.println("end");
    225//      }
    226//
    227//      public static void test01() throws IOException{
    228//              File file = new FileOperation("test.txt");
    229//              File file2 = file.getCanonicalFile();
    230//
    231//              System.out.println(file2.getClass());
    232//
    233//              FileOperation fo = (FileOperation)file2;
    234//              System.out.println(fo.getPath());
    235//      }
    236//
    237//      public static void writeTest() {
    238//              File file = new FileOperation("test.txt");
    239//              FileOperation fileOperation = (FileOperation) file;
    240////            FileOperation_AWS aws = (FileOperation_AWS)file;
    241//              //              file.delete();
    242//
    243//              try( ByteArrayInputStream bais = new ByteArrayInputStream("テスト".getBytes())) {
    244//                      fileOperation.write(bais);
    245//              } catch (IOException ie) {
    246//                      System.out.println(ie);
    247//              }
    248//      }
    249}