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