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