    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.FileFilter;
    020import java.io.FileNotFoundException;
    021import java.io.IOException;
    022import java.io.InputStream;
    023
    024/**
    025 * CloudFileOperation用のファイル情報の格納クラス
    026 *
    027 * listFilesで取得した、ディレクトリとファイル一覧情報を格納します。
    028 *
    029 * パフォーマンスや分かりやすさを考慮してCloudFileOperationからは分離しています
    030 *
    031 * @og.group ファイル操作
    032 *
    033 * @og.rev 5.10.8.0 (2019/02/01) 新規作成
    034 * @og.rev 5.10.9.0 (2019/03/01) 変更対応
    035 * @author oota
    036 * @since JDK7.0
    037 */
    038public class FileOperationInfo extends CloudFileOperation {
    039        //* このプログラムのVERSION文字列を設定します。{@VALUE} */
    040        private static final String VERSION = "8.0.0.0 (2021/07/31)" ;
    041        private static final long serialVersionUID = 800020210731L ;
    042
    043        /** クラス変数 */
    044        private final String plugin;
    045
    046        private long size;
    047        // 8.0.0.0 (2021/07/31) Field ** has the same name as a method
    048//      private long lastModified;
    049//      private boolean isFile;
    050//      private boolean isDirectory;
    051        private long lastTime;                          // 最終時刻
    052        private boolean isFil;                          // ファイルか？
    053        private boolean isDir;                          // フォルダか？
    054        private FileOperation file;                     // ファイルオペレータ
    055
    056        /**
    057         * コンストラクタ
    058         *
    059         * 生成時の初期処理。
    060         *
    061         * @og.rev 8.0.0.0 (2021/07/31) Field ** has the same name as a method
    062         *
    063         * @param plugin プラグイン名
    064         * @param bucket バケット名
    065         * @param path ファイルパス
    066         */
    067        public FileOperationInfo(final String plugin, final String bucket, final String path) {
    068                super(bucket, path);
    069                this.plugin     = plugin;
    070                size            = 0;
    071//              lastModified = 0;
    072//              isFile = false;
    073//              isDirectory = false;
    074                lastTime        = 0L;
    075                isFil           = false;
    076                isDir           = false;
    077                file            = null;
    078        }
    079
    080        /**
    081         * FileOperationクラスの生成
    082         *
    083         * 呼び出し時に、FileOperationインスタンスが未生成の場合は、
    084         * 生成を行います。
    085         */
    086        private void setFileOperation() {
    087                if(file == null) {
    088                        file = FileOperationFactory.newStorageOperation( plugin, conBucket, conPath );
    089                }
    090        }
    091
    092        /** Method */
    093        /**
    094         * 書き込み処理
    095         *
    096         * InputStreamのデータを書き込みます。
    097         *
    098         * @param is 書き込みデータのInputStream
    099         * @throws IOException ファイル関連エラー情報
    100         */
    101        @Override
    102        public void write(final InputStream is) throws IOException {
    103                setFileOperation();
    104                file.write(is);
    105        }
    106
    107        /**
    108         * 読み込み処理
    109         *
    110         * データを読み込み、InputStreamとして、返します。
    111         *
    112         * @return 読み込みデータのInputStream
    113         * @throws FileNotFoundException ファイル非存在エラー情報
    114         */
    115        @Override
    116        public InputStream read() throws FileNotFoundException {
    117                setFileOperation();
    118                return file.read();
    119        }
    120
    121        /**
    122         * 削除処理
    123         *
    124         * ファイルを削除します。
    125         *
    126         * @return 成否フラグ
    127         */
    128        @Override
    129        public boolean delete() {
    130                setFileOperation();
    131                return file.delete();
    132        }
    133
    134        /**
    135         * コピー処理
    136         *
    137         * ファイルを指定先に、コピーします。
    138         *
    139         * @param afPath コピー先
    140         * @return 成否フラグ
    141         */
    142        @Override
    143        public boolean copy(final String afPath) {
    144                setFileOperation();
    145                return file.copy(afPath);
    146        }
    147
    148        /**
    149         * 一覧取得
    150         *
    151         * １つ下の、ディレクトリ・ファイル一覧を取得します。
    152         *
    153         * @param filter フィルタ情報
    154         * @return ファイル一覧
    155         */
    156        @Override
    157        public File[] listFiles(final FileFilter filter) {
    158                setFileOperation();
    159                return file.listFiles(filter);
    160        }
    161
    162        /**
    163         * ファイルサイズ取得
    164         *
    165         * ファイルサイズを取得します。
    166         *
    167         * @return ファイルサイズ
    168         */
    169        @Override
    170        public long length() {
    171                return size;
    172        }
    173
    174        /**
    175         * ファイルサイズ設定
    176         *
    177         * ファイルサイズを設定します。
    178         *
    179         * @param size ファイルサイズ
    180         */
    181        public void setSize(final long size) {
    182                this.size = size;
    183        }
    184
    185        /**
    186         * 最終更新時刻の取得
    187         *
    188         * 最終更新時刻を取得します。
    189         *
    190         * @og.rev 8.0.0.0 (2021/07/31) Field ** has the same name as a method
    191         *
    192         * @return 最終更新時刻
    193         */
    194        @Override
    195        public long lastModified() {
    196//              return lastModified;
    197                return lastTime;
    198        }
    199
    200        /**
    201         * 最終更新時刻の設定
    202         *
    203         * 最終更新時刻を設定します。
    204         *
    205         * @og.rev 8.0.0.0 (2021/07/31) Field ** has the same name as a method
    206         *
    207         * @param lastModified 最終更新時刻
    208         */
    209        public void setLastModifiedValue(final long lastModified) {
    210//              this.lastModified = lastModified;
    211                lastTime = lastModified;
    212        }
    213
    214        /**
    215         * ファイル判定取得
    216         *
    217         * ファイルであるかの判定を返します。
    218         *
    219         * @og.rev 8.0.0.0 (2021/07/31) Field ** has the same name as a method
    220         *
    221         * @return ファイル判定
    222         */
    223        @Override
    224        public boolean isFile() {
    225//              return isFile;
    226                return isFil;
    227        }
    228
    229        /**
    230         * ファイル判定設定
    231         *
    232         * ファイルであるかの判定を設定します。
    233         *
    234         * @og.rev 8.0.0.0 (2021/07/31) Field ** has the same name as a method
    235         *
    236         * @param isFile ファイル判定
    237         */
    238        public void setFile(final boolean isFile) {
    239//              this.isFile = isFile;
    240                isFil = isFile;
    241        }
    242
    243        /**
    244         * ディレクトリ判定取得
    245         *
    246         * ディレクトリであるかの判定を返します。
    247         *
    248         * @og.rev 8.0.0.0 (2021/07/31) Field ** has the same name as a method
    249         *
    250         * @return ディレクトリ判定
    251         */
    252        @Override
    253        public boolean isDirectory() {
    254//              return isDirectory;
    255                return isDir;
    256        }
    257
    258        /**
    259         * ディレクトリ判定設定
    260         *
    261         * ディレクトリであるかの判定を設定します。
    262         *
    263         * @og.rev 8.0.0.0 (2021/07/31) Field ** has the same name as a method
    264         *
    265         * @param isDirectory ディレクトリ判定
    266         */
    267        public void setDirectory(final boolean isDirectory) {
    268//              this.isDirectory = isDirectory;
    269                isDir = isDirectory;
    270        }
    271
    272        /**
    273         * 親情報の取得
    274         *
    275         * 親情報を返します。
    276         *
    277         * @return 親情報
    278         */
    279        @Override
    280        public File getParentFile() {
    281                return  FileOperationFactory.newStorageOperation( file , this.getParent() );
    282        }
    283
    284//      /**
    285//       * このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    286//       * インタフェース Comparable の 実装に関連して、再定義しています。
    287//       *
    288//       * @og.rev 7.2.9.4 (2020/11/20) spotbugs:スーパークラスの equals メソッドをオーバーライドしていないクラス
    289//       *
    290//       * @param   object 比較対象の参照オブジェクト
    291//       *
    292//       * @return      引数に指定されたオブジェクトとこのオブジェクトが等しい場合は true、そうでない場合は false
    293//       */
    294//      @Override
    295//      public boolean equals( final Object object ) {
    296//              return object instanceof File && super.equals( object );
    297//      }
    298
    299//      /**
    300//       * オブジェクトのハッシュコード値を返します。
    301//       * このメソッドは、java.io.File のハッシュ値を返すことで、equals メソッドとの整合性を取っています。
    302//       *
    303//       * @og.rev 7.2.9.4 (2020/11/20) spotbugs:equals メソッドは定義していますが hashCode メソッドは定義していないクラス
    304//       * @og.rev 8.0.0.0 (2021/07/31) Overriding method merely calls super
    305//       *
    306//       * @return  このオブジェクトのハッシュコード値
    307//       */
    308//      @Override
    309//      public int hashCode() {
    310//              return super.hashCode() ;                               // PMD:Overriding method merely calls super が出る。多分定義不要
    311//      }
    312
    313//      // テスト用メソッドです
    314//      public static void main(String[] args) {
    315//              System.out.println("start");
    316//
    317//              FileOperation file = new FileOperationInfo("aws", "otest20190205", "sample/test.txt");
    318//
    319//              File parent = file.getParentFile();
    320//              System.out.println(parent.getPath());
    321//              System.out.println(parent.isDirectory());
    322//              System.out.println(parent.isFile());
    323//
    324//              System.out.println("end");
    325//      }
    326}