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