001/* 002 * Copyright (c) 2017 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.fileexec; 017 018import java.nio.file.Path; 019import java.util.Set; // 7.2.1.0 (2020/03/13) スキャン対象外判定 020// import java.util.HashSet; // 7.2.2.0 (2020/03/27) javadoc用のjdk8に対応します。 021 022/** 023 * システムのベースフォルダ基準で、各種パスを管理するクラスです。 024 * 025 *<pre> 026 * 本システムでは、ベースフォルダを基準として、各種管理フォルダを規定しています。 027 * それらのパスオブジェクトを管理します。 028 * 029 *</pre> 030 * 031 * <table class="plain" style="font-family: monospace;"> 032 * <caption>各種管理フォルダの規定</caption> 033 * <tr><th>フォルダ </th><th>説明</th></tr> 034 * <tr><td>BASE_PATH </td><td>基本となるフォルダパス</td></tr> 035 * <tr><td>SUB_PATH </td><td>ベースパスの下位のサブパス。これがスキャン対象になる。</td></tr> 036 * <tr><td>WORK_PATH </td><td>中間パス。サブパスのファイルを一旦このワークに移動してから、取込処理を行います</td></tr> 037 * <tr><td>OK_PATH </td><td>処理が成功した場合のファイルの移動先</td></tr> 038 * <tr><td>NG_PATH </td><td>処理が失敗した場合のファイルの移</td></tr> 039 *</table> 040 * 041 * @og.rev 7.0.0.0 (2017/07/07) 新規作成 042 * 043 * @version 7.0 044 * @author Kazuhiko Hasegawa 045 * @since JDK1.8, 046 */ 047public final class BasePath { 048 private static final XLogger LOGGER= XLogger.getLogger( BasePath.class.getSimpleName() ); // ログ出力 049 050 /** システム依存の改行記号(String)。 */ 051 public static final String CR = System.getProperty("line.separator"); 052 053 /** BASEフォルダの相対パスの処理フォルダ(WORK)の初期値 {@value} */ 054 public static final String DEF_WORK_DIR = "work" ; 055 /** BASEフォルダの相対パスの処理済フォルダ(正常)の初期値 {@value} */ 056 public static final String DEF_OK_DIR = "bkup_ok" ; 057 /** BASEフォルダの相対パスの処理済フォルダ(異常)の初期値 {@value} */ 058 public static final String DEF_NG_DIR = "bkup_ng" ; 059 060 /** ベースパス */ 061 public final Path BASE_PATH ; 062 063 /** サブパス(実際にスキャンを行うトップパス) */ 064 public final Path SUB_PATH ; 065 066 /** 処理フォルダ(WORK)のパス */ 067 public final Path WORK_PATH ; 068 /** 処理済フォルダ(正常)のパス */ 069 public final Path OK_PATH ; 070 /** 処理済フォルダ(異常)のパス */ 071 public final Path NG_PATH ; 072 073// private final Set<String> omitScanDir ; 074 private final Set<Path> omitScanDir ; // 7.2.9.4 (2020/11/20) Path を直接管理します。 075 076 /** 077 * フォルダを指定して、オブジェクトを作成します。 078 * 079 * DIR_BASE,DIR_SUB,DIR_WORK,DIR_BKUP_OK,DIR_BKUP_NG の順にセットされます。 080 * 指定されていない(null)の場合は、初期設定を使用します。 081 * 082 * @og.rev 7.2.1.0 (2020/03/13) FileUtil#isAbsolute(String)を利用します。 083 * @og.rev 7.2.2.0 (2020/03/27) javadoc用のjdk8に対応します。 084 * @og.rev 7.2.9.4 (2020/11/20) スキャン除外判定は、Path を直接管理します。 085 * 086 * @param dirs フォルダ配列 087 */ 088 public BasePath( final String... dirs ) { 089 if( dirs == null || dirs.length != 5 ) { 090 // MSG0005 = フォルダのファイル読み込み時にエラーが発生しました。file=[{0}] 091 throw MsgUtil.throwException( "MSG0005" , "DIR_BASE,DIR_SUB,DIR_WORK,DIR_BKUP_OK,DIR_BKUP_NG" ); 092 } 093 094 final String baseDir = dirs[0]; 095 096 BASE_PATH = FileUtil.writePath( baseDir ); // ベースフォルダのチェック 097 098 SUB_PATH = dirs[1] == null || dirs[1].isEmpty() 099 ? BASE_PATH 100 : FileUtil.writePath( baseDir , dirs[1] ); 101 102 WORK_PATH = makePath( baseDir,dirs[2],DEF_WORK_DIR ); 103 OK_PATH = makePath( baseDir,dirs[3],DEF_OK_DIR ); 104 NG_PATH = makePath( baseDir,dirs[4],DEF_NG_DIR ); 105 106// omitScanDir = new HashSet<>(); 107// omitScanDir.add( WORK_PATH.getFileName().toString() ); // ミス? OK_PATH → WORK_PATH に変更 108// omitScanDir.add( OK_PATH.getFileName().toString() ); 109// omitScanDir.add( NG_PATH.getFileName().toString() ); 110 111 omitScanDir = Set.of( WORK_PATH , OK_PATH , NG_PATH ); // 7.2.9.4 (2020/11/20) 112 113 LOGGER.debug( () -> "③ [BasePath]" + CR 114 + "\t BASE_PATH=" + BASE_PATH + CR 115 + "\t SUB_PATH =" + SUB_PATH + CR 116 + "\t WORK_PATH=" + WORK_PATH + CR 117 + "\t OK_PATH =" + OK_PATH + CR 118 + "\t NG_PATH =" + NG_PATH 119 ); 120 } 121 122 /** 123 * WORK,OK,NG の各Pathパスを生成するロジックのまとめメソッド。 124 * 125 * パスの元となるフォルダ(dir)が、nullかゼロ文字列の場合は、ベース+初期DIRを返し 126 * dirが、絶対パスの場合は、そのパスを、そうでない場合は、baseDir + dir でパスを生成します。 127 * ここで生成するパスは、FileUtil#writePath で指定し、フォルダ作成も同時に行います。 128 * 129 * @og.rev 7.2.1.0 (2020/03/13) FileUtil#isAbsolute(String)を利用します。 130 * 131 * @param baseDir 基準フォルダ 132 * @param dir パスの元となるフォルダ 133 * @param def パスが未設定時のフォルダ 134 * @return path 生成したPathオブジェクト 135 */ 136 private Path makePath( final String baseDir , final String dir , final String def ) { 137 return dir == null || dir.isEmpty() 138 ? FileUtil.writePath( baseDir , def ) // ベース+初期DIR 139 : ( FileUtil.isAbsolute( dir ) 140 ? FileUtil.writePath( dir ) // 絶対パス 141 : FileUtil.writePath( baseDir , dir ) ); // ベース+相対パス 142 } 143 144 /** 145 * WORK,OK,NG,LOG をスキャン対象外にするための簡易判定メソッド。 146 * 147 * 指定のパスが、WORK_PATH,OK_PATH,NG_PATH,LOG_PATH の場合は、false を返します。 148 * 149 * @og.rev 7.2.9.4 (2020/11/20) スキャン除外判定は、Path を直接管理します。 150 * 151 * @param path 判定するパス 152 * @return スキャン対象なら、true 153 */ 154 public boolean isScanPath( final Path path ) { 155 return !omitScanDir.contains( path ); 156 157// final String fname = path.getFileName().toString(); 158// return !omitScanDir.contains( fname ); 159 } 160}