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}