    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.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.0.1.0 (2021/10/29)" ;
    045        private static final long serialVersionUID = 801020211029L ;
    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         *
    116         * @return      読み込みﾃﾞｰﾀのInputStream
    117         * @throws      FileNotFoundException   ﾌｧｲﾙ非存在ｴﾗｰ情報
    118         */
    119        public InputStream read() throws FileNotFoundException {
    120//              return new FileInputStream(this.getPath());
    121                return new BufferedInputStream( new FileInputStream(this));
    122        }
    123
    124        /**
    125         * ｺﾋﾟｰ処理
    126         *
    127         * ﾌｧｲﾙを指定先にｺﾋﾟｰします。
    128         *
    129         * @og.rev 8.0.1.0 (2021/10/29) Paths.get(this.getPath()) → this.toPath() に変更
    130         *
    131         * @param       afPath  ｺﾋﾟｰ先
    132         * @return      成否ﾌﾗｸﾞ
    133         */
    134        public boolean copy(final String afPath) {
    135                boolean flgRtn = false;
    136
    137                try {
    138                        // 指定ﾊﾟｽのﾌｧｲﾙを、指定先にｺﾋﾟｰ from;jdk7
    139//                      Files.copy(Paths.get(this.getPath()), Paths.get(afPath), StandardCopyOption.REPLACE_EXISTING);
    140                        Files.copy(this.toPath(), Paths.get(afPath), StandardCopyOption.REPLACE_EXISTING);
    141                        flgRtn = true;
    142                } catch (IOException ie) {
    143                        System.err.println( ie.getMessage() );  // 8.0.0.0 (2021/07/31)
    144//                      ;       // ｽﾙｰしてfalseを返す
    145                }
    146
    147                return flgRtn;
    148        }
    149
    150        /**
    151         * ﾌｧｲﾙ移動
    152         *
    153         * ﾌｧｲﾙを指定先に移動します。
    154         *
    155         * @og.rev 8.0.1.0 (2021/10/29) Paths.get(this.getPath()) → this.toPath() に変更
    156         *
    157         * @param       afPath  移動先
    158         * @return      成否ﾌﾗｸﾞ
    159         */
    160        public boolean move(final String afPath) {
    161                boolean flgRtn = false;
    162
    163                try {
    164                        // 指定ﾊﾟｽのﾌｧｲﾙを、指定先に移動 from:jdk7
    165//                      Files.move(Paths.get(this.getPath()), Paths.get(afPath), StandardCopyOption.REPLACE_EXISTING);
    166                        Files.move(this.toPath(), Paths.get(afPath), StandardCopyOption.REPLACE_EXISTING);
    167                        flgRtn = true;
    168                } catch (IOException ie) {
    169                        System.err.println( ie.getMessage() );  // 8.0.0.0 (2021/07/31)
    170//                      ;       // ｽﾙｰしてfalseを返す
    171                }
    172                return flgRtn;
    173        }
    174
    175//      /**
    176//       * 保存先のﾛｰｶﾙ判定。
    177//       *
    178//       * 判定結果を返します。
    179//       * trueの場合は、ﾛｰｶﾙ保存。
    180//       * falseの場合は、ｸﾗｳﾄﾞｽﾄﾚｰｼﾞに保存です。
    181//       *
    182//       * @og.rev 8.0.0.1 (2021/10/08) 削除
    183//       *
    184//       * @return      ﾛｰｶﾙﾌﾗｸﾞ
    185//       */
    186//      public boolean isLocal() {
    187//              return true;
    188//      }
    189
    190        /**
    191         * 保存先のｸﾗｳﾄﾞ判定。
    192         *
    193         * 判定結果を返します。
    194         * trueの場合は、ｸﾗｳﾄﾞｽﾄﾚｰｼﾞ保存。
    195         * falseの場合は、ﾛｰｶﾙに保存です。
    196         *
    197         * @og.rev 8.0.0.1 (2021/10/08) ｸﾗｳﾄﾞ修正
    198         *
    199         * @return      ｸﾗｳﾄﾞならtrue
    200         */
    201        public boolean isCloud() {
    202                return false;
    203        }
    204
    205        /**
    206         * ｶﾉﾆｶﾙﾌｧｲﾙ取得。
    207         *
    208         * ｶﾉﾆｶﾙﾌｧｲﾙ情報を取得します。
    209         *
    210         * @throws      IOException     ﾌｧｲﾙ関連ｴﾗｰ情報
    211         * @return      ｶﾉﾆｶﾙﾌｧｲﾙ情報
    212         */
    213        @Override
    214        public FileOperation getCanonicalFile() throws IOException {
    215                final String canonPath = getCanonicalPath();
    216                return new FileOperation(canonPath);
    217        }
    218
    219        /**
    220         * ﾊﾞｹｯﾄ名取得。
    221         *
    222         * ﾊﾞｹｯﾄ名を取得します。
    223         * 生のFileOperationは、null を返します。
    224         * 継承先で実際の値を設定してください。
    225         *
    226         * @return      ﾊﾞｹｯﾄ名
    227         */
    228        public String getBucket() {
    229//              return mybucket;
    230                return null;
    231        }
    232
    233        /**
    234         * ﾌﾟﾗｸﾞｲﾝ名取得。
    235         *
    236         * ﾌﾟﾗｸﾞｲﾝ名を取得します。
    237         * 生のFileOperationは、null を返します。
    238         * 継承先で実際の値を設定してください。
    239         *
    240         * @return      ﾌﾟﾗｸﾞｲﾝ名
    241         */
    242        public String getPlugin() {
    243//              return this.myplugin;
    244                return null;
    245        }
    246
    247//      /**
    248//       * ﾌﾟﾗｸﾞｲﾝ名のｾｯﾄ。
    249//       *
    250//       * ﾌﾟﾗｸﾞｲﾝ名をｾｯﾄします。
    251//       *
    252//       * @og.rev 8.0.0.1 (2021/10/08) 削除
    253//       *
    254//       * @param       plugin  ﾌﾟﾗｸﾞｲﾝ名
    255//       */
    256//      protected void setPlugin( final String plugin ) {
    257//              myplugin = plugin;
    258//      }
    259}