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