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