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 */ 016 package org.opengion.fukurou.process; 017 018 import org.opengion.fukurou.util.Argument; 019 import org.opengion.fukurou.util.HybsFileFilter; 020 import org.opengion.fukurou.util.LogWriter; 021 022 import java.io.File; 023 import java.util.Map ; 024 import java.util.LinkedHashMap ; 025 import java.util.Stack; 026 027 /** 028 * Process_FileSearch ã¯ã€æŒ‡å®šã?フォルãƒ?»¥ä¸‹ã?ファイルをä¸?¦§ã™ã‚‹ã€FirstProcess 029 * インターフェースã¨ã€ChainProcess インターフェースã®å®Ÿè£?‚¯ãƒ©ã‚¹ã§ã™ã? 030 * 031 * æŒ?®šã?æ¡ä»¶ã«åˆè?ã™ã‚‹ãƒ•ァイルを検索ã—ã?LineModel ã®ã‚µãƒ–クラスã§ã‚ã‚‹ã€? 032 * FileLineModel オブジェクトを作æ?ã—ã¦ã€ä¸‹æµã«æ¸¡ã—ã¾ã™ã? 033 * FileLineModel オブジェクトã«ã¯ã€ãƒ•ァイル属æ?(Level,File,Length,Modify) 034 * ãŒè¨å®šã•れã¾ã™ã? 035 * 036 * 引数æ–?—å?ä¸ã«ã‚¹ãƒšã?スをå«ã‚??åˆã?ã€ãƒ€ãƒ–ルコーãƒ??ション("") ã§æ‹¬ã£ã¦ä¸‹ã•ã?? 037 * 引数æ–?—å?ã® ã€?ã€ã?å‰å¾Œã«ã¯ã€ã‚¹ãƒšã?ã‚¹ã¯æŒŸã‚ã¾ã›ã‚“。å¿?šã€?key=value ã®æ§˜ã« 038 * 繋ã’ã¦ãã ã•ã„ã€? 039 * 040 * @og.formSample 041 * Process_FileSearch -start=d:/ -suffix=jsp 042 * 043 * -start=開始フォルãƒ? ?šæ¤œç´¢ã‚’é–‹å§‹ã™ã‚‹ãƒ•ォルãƒ? 044 * [ -prefix=接é è¾? ] ?šFile?¥?¥?¥?¥,View?¥?¥?¥?¥,ãªã©ã€æŒ‡å®šã?接é 辞ã§å§‹ã¾ã‚‹ãƒ•ァイルを検索 045 * [ -unprefix=䏿ޥé è¾? ] ?šFile?¥?¥?¥?¥,View?¥?¥?¥?¥,ãªã©ã€æŒ‡å®šã?接é 辞ã§å§‹ã¾ã‚‰ãªã?ƒ•ァイルを検索 046 * [ -suffix=接尾è¾? ] ??txt,.java,.jsp.... ãªã©ã€æŒ‡å®šã?接尾辞ã§çµ‚ã‚るファイルを検索 047 * [ -unsuffix=䏿ޥ尾è¾? ] ??txt,.java,.jsp.... ãªã©ã€æŒ‡å®šã?接尾辞ã§çµ‚ã‚らãªã?ƒ•ァイルを検索 048 * [ -instr=部åˆ?–‡å—å? ] ?šãƒ•ァイルåã¨ä¸??ã™ã‚‹éƒ¨åˆ?–‡å—å?を指å®? 049 * [ -uninstr=ä¸éƒ¨åˆ?–‡å—å? ] ?šãƒ•ァイルåã¨ä¸??ã—ãªéƒ¨åˆ?–‡å—å?を指å®? 050 * [ -equals=ä¸?? ] ?šãƒ•ァイルåã¨ä¸??ã™ã‚‹æ–?—å?(大æ–?—å°æ–‡å—ã?区別ã—ãªã?を指å®? 051 * [ -notequals=ä¸ä¸?? ] ?šãƒ•ァイルåã¨ä¸??ã—ãªã?–‡å—å?(大æ–?—å°æ–‡å—ã?区別ã—ãªã?を指å®? 052 * [ -match=æ£è¦è¡¨ç¾ ] ?šãƒ•ァイルåã¨ä¸??ã™ã‚‹æ£è¦è¡¨ç¾ã‚’指å®? 053 * [ -unmatch=æ£è¦è¡¨ç¾ ] ?šãƒ•ァイルåã¨ä¸??ã—ãªã?£è¦è¡¨ç¾ã‚’指å®? 054 * [ -modify=YYYYMMDD ] ?šæŒ‡å®šæ—¥ä»˜ã‘以é™ã«å¤‰æ›´ã•れãŸãƒ•ァイルを検索 055 * YYYYMMDD : YYYYMMDD å½¢å¼ã§ã®æŒ?®šæ—¥ã® 00:00:00 を基準時刻 056 * TODAY : 実行日㮠00:00:00 を基準時刻 057 * YESTERDAY : å®Ÿè¡Œæ—¥å‰æ—¥ã® 00:00:00 を基準時刻 058 * LAST_WEEK : 実行日ã®å…ˆé?(7æ—¥å‰? 00:00:00 を基準時刻 059 * MONTH : 実行月㮠1æ—¥ 00:00:00 を基準時刻 060 * LAST_MONTH : å®Ÿè¡Œå‰æœˆã? åŒæ—¥ 00:00:00 を基準時刻 061 * LAST_YEAR : 実行å‰å¹´ã® åŒæœˆåŒæ—¥ 00:00:00 を基準時刻 062 * [ -useDIR=[false/true] ] ?šåˆ¤å®šã‚’ファイルã?‘ã§ãªãã?ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã‚‚行ã†ã‹ã©ã?‹ã‚’指å®?åˆæœŸå€¤:false) 063 * [ -larger=サイズ(KByte) ] ?šãƒ•ァイルã®å¤§ãã•ãŒæŒ‡å®šã??«ãƒã‚¤ãƒˆæ•°ã‚ˆã‚Šå¤§ãã„ファイルを検索 064 * [ -smaller=サイズ(KByte) ] ?šãƒ•ァイルã®å¤§ãã•ãŒæŒ‡å®šã??«ãƒã‚¤ãƒˆæ•°ã‚ˆã‚Šå°ã•ã?ƒ•ァイルを検索 065 * [ -maxLevel=æœ?¤§éšŽå±¤æ•° ] ?šãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®éšŽå±¤ã‚’下ãŒã‚‹æœ€å¤§æ•°(åˆæœŸå€¤:256) 066 * [ -useLineCnt=行数計ç®? ] ?šãƒ•ァイルã®è¡Œæ•°ã‚’カウントã™ã‚‹ã‹ã©ã?‹ã‚’指å®?åˆæœŸå€¤:false) 067 * [ -useMD5=MD5計算å? ] ?šãƒ•ァイルã®MD5計算を行ã†ã‹ã©ã?‹ã‚’指å®?åˆæœŸå€¤:false) 068 * [ -inPath=入力å?通パス ] ?šBIKO作æ?用ã®ãƒ•ァイルパスã‹ã‚‰å‰Šé™¤ã™ã‚‹éƒ¨åˆ?æ–?—æ•°ã®ã¿) 069 * [ -outPath=出力追åŠ?ƒ‘ス ] ?šBIKO作æ?用ã®ãƒ•ァイルパスã«è¿½åŠ?™ã‚‹éƒ¨åˆ? 070 * [ -display=[false/true] ] ?štrueã¯ã€æ¤œç´¢çжæ³ã‚’表示ã—ã¾ã?åˆæœŸå€¤:false) 071 * 072 * @version 4.0 073 * @author Kazuhiko Hasegawa 074 * @since JDK5.0, 075 */ 076 public class Process_FileSearch extends AbstractProcess 077 implements FirstProcess , ChainProcess { 078 079 private Stack<FileListStack> dirs = null; 080 private File file = null; 081 private HybsFileFilter filter = null; 082 private FileLineModel newData = null; 083 private int level = 1; 084 085 private String startDir = null; 086 private int maxLevel = 256; 087 private boolean display = false; // 表示ã—ãªã? 088 private int inCount = 0; 089 private int outCount = 0; 090 private int inPathLen = 0; // 4.2.3.0 (2008/05/26) BIKOæ¬?”¨ 091 private String outPath = null; // 4.3.1.1 (2008/08/23) BIKOæ¬?”¨ 092 093 private static final Map<String,String> mustProparty ; // ?»ãƒ—ãƒãƒ‘ティ?½å¿??ãƒã‚§ãƒ?‚¯ç”¨ Map 094 private static final Map<String,String> usableProparty ; // ?»ãƒ—ãƒãƒ‘ティ?½æ•´åˆæ?ãƒã‚§ãƒ?‚¯ Map 095 096 static { 097 mustProparty = new LinkedHashMap<String,String>(); 098 mustProparty.put( "start", "検索を開始ã™ã‚‹ãƒ•ォルãƒ?å¿??)" ); 099 100 usableProparty = new LinkedHashMap<String,String>(); 101 usableProparty.put( "prefix", "File?¥?¥?¥?¥,View?¥?¥?¥?¥,ãªã©ã€æŒ‡å®šã?接é 辞ã§å§‹ã¾ã‚‹ãƒ•ァイルを検索" ); 102 usableProparty.put( "unprefix", "File?¥?¥?¥?¥,View?¥?¥?¥?¥,ãªã©ã€æŒ‡å®šã?接é 辞ã§å§‹ã¾ã‚‰ãªã?ƒ•ァイルを検索" ); 103 usableProparty.put( "suffix", ".txt,.java,.jsp.... ãªã©ã€æŒ‡å®šã?接尾辞ã§çµ‚ã‚るファイルを検索" ); 104 usableProparty.put( "unsuffix", ".txt,.java,.jsp.... ãªã©ã€æŒ‡å®šã?接尾辞ã§çµ‚ã‚らãªã?ƒ•ァイルを検索" ); 105 usableProparty.put( "instr", "ファイルåã¨ä¸??ã™ã‚‹éƒ¨åˆ?–‡å—å?を指å®? ); 106 usableProparty.put( "uninstr", "ファイルåã¨ä¸??ã—ãªã?ƒ¨åˆ?–‡å—å?を指å®? ); 107 usableProparty.put( "equals", "ファイルåã¨ä¸??ã™ã‚‹æ–?—å?(大æ–?—å°æ–‡å—ã?区別ã—ãªã?を指å®? ); 108 usableProparty.put( "notequals", "ファイルåã¨ä¸??ã—ãªã?–‡å—å?(大æ–?—å°æ–‡å—ã?区別ã—ãªã?を指å®? ); 109 usableProparty.put( "match", "ファイルåã¨ä¸??ã™ã‚‹æ£è¦è¡¨ç¾ã‚’指å®? ); 110 usableProparty.put( "unmatch", "ファイルåã¨ä¸??ã—ãªã?£è¦è¡¨ç¾ã‚’指å®? ); 111 usableProparty.put( "modify", "æŒ?®šæ—¥ä»˜ã‘以é™ã«å¤‰æ›´ã•れãŸãƒ•ァイルを検索" + 112 CR + "YYYYMMDD : YYYYMMDD å½¢å¼ã§ã®æŒ?®šæ—¥ã® 00:00:00 を基準時刻" + 113 CR + "TODAY : 実行日㮠00:00:00 を基準時刻" + 114 CR + "YESTERDAY : å®Ÿè¡Œæ—¥å‰æ—¥ã® 00:00:00 を基準時刻" + 115 CR + "LAST_WEEK : 実行日ã®å…ˆé?(7æ—¥å‰? 00:00:00 を基準時刻" + 116 CR + "MONTH : 実行月㮠1æ—¥ 00:00:00 を基準時刻" + 117 CR + "LAST_MONTH : å®Ÿè¡Œå‰æœˆã? åŒæ—¥ 00:00:00 を基準時刻" + 118 CR + "LAST_YEAR : 実行å‰å¹´ã® åŒæœˆåŒæ—¥ 00:00:00 を基準時刻" 119 ); 120 usableProparty.put( "useDIR" ,"判定をファイルã?‘ã§ãªãã?ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã‚‚行ã†ã‹ã©ã?‹ã‚’指å®?åˆæœŸå€¤:false)" ); 121 usableProparty.put( "larger" ,"ファイルã®å¤§ãã•ãŒæŒ‡å®šã??«ãƒã‚¤ãƒˆæ•°ã‚ˆã‚Šå¤§ãã„ファイルを検索" ); 122 usableProparty.put( "smaller" ,"ファイルã®å¤§ãã•ãŒæŒ‡å®šã??«ãƒã‚¤ãƒˆæ•°ã‚ˆã‚Šå°ã•ã?ƒ•ァイルを検索" ); 123 usableProparty.put( "maxLevel" ,"ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã®éšŽå±¤ã‚’下ãŒã‚‹æœ€å¤§æ•°(åˆæœŸå€¤:256)" ); 124 usableProparty.put( "useLineCnt","ファイルã®è¡Œæ•°ã‚’カウントã™ã‚‹ã‹ã©ã?‹ã‚’指å®?åˆæœŸå€¤:false)" ); 125 usableProparty.put( "useMD5" ,"ファイルã®MD5計算を行ã†ã‹ã©ã?‹ã‚’指å®?åˆæœŸå€¤:false)" ); // 5.7.2.1 (2014/01/17) 126 usableProparty.put( "inPath" ,"BIKO作æ?用ã®ãƒ•ァイルパスã‹ã‚‰å‰Šé™¤ã™ã‚‹éƒ¨åˆ?æ–?—æ•°ã®ã¿)" ); 127 usableProparty.put( "outPath" ,"BIKO作æ?用ã®ãƒ•ァイルパスã«è¿½åŠ?™ã‚‹éƒ¨åˆ? ); 128 usableProparty.put( "display" ,"trueã¯ã€æ¤œç´¢çжæ³ã‚’表示ã—ã¾ã?åˆæœŸå€¤:false)" ); 129 } 130 131 /** 132 * ãƒ?ƒ•ォルトコンストラクターã€? 133 * ã“ã?クラスã¯ã€å‹•çš?½œæ?ã•れã¾ã™ã?ãƒ?ƒ•ォルトコンストラクターã§ã€? 134 * super クラスã«å¯¾ã—ã¦ã€å¿?¦ãªåˆæœŸåŒ–を行ã£ã¦ãŠãã¾ã™ã? 135 * 136 */ 137 public Process_FileSearch() { 138 super( "org.opengion.fukurou.process.Process_FileSearch",mustProparty,usableProparty ); 139 } 140 141 /** 142 * プãƒã‚»ã‚¹ã®åˆæœŸåŒ–を行ã„ã¾ã™ã?åˆã‚ã«ä¸?º¦ã?‘ã€å‘¼ã³å‡ºã•れã¾ã™ã? 143 * åˆæœŸå‡¦ç?ファイルオープンã€?¼¤?¢ã‚ªãƒ¼ãƒ—ンç?ã«ä½¿ç”¨ã—ã¾ã™ã? 144 * 145 * @og.rev 4.2.2.0 (2008/05/10) 行数カウントã?使用有無 146 * @og.rev 4.3.1.1 (2008/08/23) BIKO æ¬?«outPath 属æ?を追åŠ?—ã¾ã™ã? 147 * @og.rev 5.1.2.0 (2010/01/01) useDIR 属æ?を追åŠ?—ã¾ã™ã? 148 * @og.rev 5.7.2.1 (2014/01/17) useMD5 属æ?を追åŠ?—ã¾ã™ã? 149 * 150 * @param paramProcess ãƒ??タベã?ã‚¹ã®æŽ¥ç¶šå?æƒ??ãªã©ã‚’æŒã£ã¦ã?‚‹ã‚ªãƒ–ジェクãƒ? 151 */ 152 public void init( final ParamProcess paramProcess ) { 153 Argument arg = getArgument(); 154 155 startDir = arg.getProparty("start" ); 156 157 String inPath = arg.getProparty("inPath"); 158 if( inPath != null ) { inPathLen = inPath.length(); } 159 160 String prefix = arg.getProparty("prefix"); 161 String unprefix = arg.getProparty("unprefix"); // 5.1.2.0 (2010/01/01) 追åŠ? 162 String suffix = arg.getProparty("suffix"); 163 String unsuffix = arg.getProparty("unsuffix"); // 5.1.2.0 (2010/01/01) 追åŠ? 164 String instr = arg.getProparty("instr"); 165 String uninstr = arg.getProparty("uninstr"); // 5.1.2.0 (2010/01/01) 追åŠ? 166 String equals = arg.getProparty("equals"); 167 String notequals= arg.getProparty("notequals"); // 5.1.2.0 (2010/01/01) 追åŠ? 168 String match = arg.getProparty("match"); 169 String unmatch = arg.getProparty("unmatch"); 170 String modify = arg.getProparty("modify"); 171 String larger = arg.getProparty("larger"); 172 String smaller = arg.getProparty("smaller"); 173 maxLevel = arg.getProparty("maxLevel",maxLevel); 174 outPath = arg.getProparty("outPath"); 175 // 4.2.2.0 (2008/05/10) 行数カウントã?使用有無 176 boolean useLineCnt = arg.getProparty( "useLineCnt",false ); 177 // 5.7.2.1 (2014/01/17) ファイルã®MD5ã®è¨ˆç®—有無 178 boolean useMD5 = arg.getProparty( "useMD5",false ); 179 180 // 5.1.2.0 (2010/01/01) 判定をãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã‚‚行ã†ã‹ã©ã?‹ 181 boolean useDIR = arg.getProparty( "useDIR",false ); 182 183 display = arg.getProparty("display",display); 184 if( display ) { println( startDir ); } // 4.0.0 (2005/01/31) 185 186 // 5.1.2.0 (2010/01/01) å転処ç??引数追åŠ? 187 filter = new HybsFileFilter( useDIR ); // 5.1.2.0 (2010/01/01) 判定をãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã‚‚行ã†ã‹ã©ã?‹ 188 filter.startsWith( prefix , false); 189 filter.startsWith( unprefix , true ); 190 filter.endsWith( suffix , false); 191 filter.endsWith( unsuffix , true ); 192 filter.instr( instr , false); 193 filter.instr( uninstr , true ); 194 filter.fileEquals( equals , false); 195 filter.fileEquals( notequals , true ); 196 filter.matches( match , false); 197 filter.matches( unmatch , true ); 198 // filter.unMatches( unmatch ); // 5.1.2.0 (2010/01/01) å転処ç??ã€matches ã® å転引数ã§å¯¾å¿? 199 filter.lastModified( modify ); 200 if( larger != null ) { filter.isLarger( Integer.parseInt( larger ) ); } 201 if( smaller != null ) { filter.isSmaller( Integer.parseInt( smaller ) ); } 202 203 File tempFile = new File( startDir ); 204 if( tempFile.isDirectory() ) { 205 dirs = new Stack<FileListStack>(); 206 File[] fileList = tempFile.listFiles( filter ); 207 dirs.push( new FileListStack( fileList, level ) ); 208 } 209 else { 210 dirs = new Stack<FileListStack>(); 211 File[] fileList = new File[] { tempFile }; 212 dirs.push( new FileListStack( fileList, level ) ); 213 } 214 215 // newData = new FileLineModel(); 216 // newData = new FileLineModel( useLineCnt ); // 4.2.2.0 (2008/05/10) 217 newData = new FileLineModel( useLineCnt,useMD5 ); // 5.7.2.1 (2014/01/17) 218 } 219 220 /** 221 * ã“ã?ãƒ??ã‚¿ã®å‡¦ç?«ãŠã„ã¦ã€æ¬¡ã®å‡¦ç?Œå‡ºæ¥ã‚‹ã‹ã©ã?‹ã‚’å•ã?ˆã‚ã›ã¾ã™ã? 222 * ã“ã?呼ã³å‡ºã—1回毎ã«ã€æ¬¡ã®ãƒ??ã‚¿ã‚’å–å¾—ã™ã‚‹æº–備を行ã„ã¾ã™ã? 223 * 224 * @og.rev 5.3.8.0 (2011/08/01) 処ç?¸ã®çŠ¶æ…‹ã‚’è¡¨ç¤ºã™ã‚‹ãŸã‚ã® println を追åŠ? 225 * 226 * @return 処ç?§ãã‚‹:true / 処ç?§ããªã?false 227 */ 228 public boolean next() { 229 while( !dirs.empty() ) { 230 FileListStack fStack = dirs.pop(); 231 232 level = fStack.getLevel(); 233 if( level > maxLevel ) { continue; } 234 235 File[] fileList = fStack.getFileList(); 236 if( fileList == null ) { continue; } 237 238 int address = fStack.getAddress(); 239 for( ; address < fileList.length; address++ ) { 240 inCount++ ; 241 if( fileList[address].isDirectory() ) { 242 if( display ) { println( fileList[address].getAbsolutePath() ); } // 5.3.8.0 (2011/08/01) 243 File[] newList = fileList[address].listFiles( filter ); 244 dirs.push( new FileListStack( newList,level+1) ); 245 } 246 else { 247 file = fileList[address]; 248 fStack.setAddress( address+1 ); 249 dirs.push( fStack ); 250 return true; 251 } 252 } 253 } 254 return false; 255 } 256 257 /** 258 * æœ??ã«ã€?行データã§ã‚ã‚‹ LineModel を作æ?ã—ã¾ã? 259 * FirstProcess ã¯ã€æ¬¡ã€?¨å‡¦ç?‚’ãƒã‚§ã‚¤ãƒ³ã—ã¦ã?æœ??ã®è¡Œãƒ‡ãƒ¼ã‚¿ã‚? 260 * 作æ?ã—ã¦ã€å¾Œç¶šã? ChainProcess クラスã«å‡¦ç?ƒ‡ãƒ¼ã‚¿ã‚’渡ã—ã¾ã™ã? 261 * 262 * @og.rev 4.2.3.0 (2008/05/26) BIKO æ¬?«å±•開ファイルåを記述ã—ã¾ã™ã? 263 * @og.rev 4.3.1.1 (2008/08/23) BIKO æ¬?«outPath 属æ?を追åŠ?—ã¾ã™ã? 264 * 265 * @param rowNo 処ç?¸ã®è¡Œç•ªå· 266 * 267 * @return 処ç?¤‰æ›å¾Œã?LineModel 268 */ 269 public LineModel makeLineModel( final int rowNo ) { 270 outCount++ ; 271 newData.setFileVals( level,file ); 272 273 // 4.3.1.1 (2008/08/23) 274 String biko = null; 275 // 4.2.3.0 (2008/05/26) BIKO æ¬?¿½åŠ? 276 if( inPathLen > 0 ) { 277 biko = file.getAbsolutePath().substring( inPathLen ); 278 // newData.setBiko( biko ); 279 } 280 281 if( outPath != null ) { 282 if( biko == null ) { 283 biko = outPath + file.getName() ; 284 } 285 else { 286 biko = outPath + biko ; 287 } 288 } 289 if( biko != null ) { 290 newData.setBiko( biko ); 291 } 292 293 newData.setRowNo( rowNo ); 294 295 // if( display ) { println( newData.dataLine() ); } // 5.1.2.0 (2010/01/01) display ã®æ¡ä»¶å¤‰æ›´ 296 297 return newData; 298 } 299 300 /** 301 * 引数㮠LineModel ã‚’å?ç?™ã‚‹ãƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã? 302 * 変æ›å‡¦ç?¾Œã? LineModel ã‚’è¿”ã—ã¾ã™ã? 303 * 後続å?ç?‚’行ã‚ãªã??å?ãƒ??ã‚¿ã®ãƒ•ィルタリングを行ã†å ´å?ã¯ã€? 304 * null ãƒ??ã‚¿ã‚’è¿”ã—ã¾ã™ã?ã¤ã¾ã‚Šã?null ãƒ??ã‚¿ã¯ã€å¾Œç¶šå?ç?‚’行ã‚ãªã? 305 * フラグã®ä»£ã‚りã«ã‚‚使用ã—ã¦ã?¾ã™ã? 306 * ãªãŠã?変æ›å‡¦ç?¾Œã? LineModel ã¨ã€ã‚ªãƒªã‚¸ãƒŠãƒ«ã® LineModel ãŒã? 307 * åŒä¸?‹ã€ã‚³ãƒ”ã?(クãƒãƒ¼ãƒ³)ã‹ã?ã€å„処ç?ƒ¡ã‚½ãƒ?ƒ‰å†?§æ±ºã‚ã¦ã?¾ã™ã? 308 * ドã‚ãƒ¥ãƒ¡ãƒ³ãƒˆã«æ˜Žè¨˜ã•れã¦ã?ªã??åˆã?ã€å‰¯ä½œç”¨ãŒå•題ã«ãªã‚‹å?åˆã?ã€? 309 * å??ç?”ã¨ã«è‡ªåˆ?§ã‚³ãƒ”ã?(クãƒãƒ¼ãƒ³)ã—ã¦ä¸‹ã•ã?? 310 * 311 * @param data オリジナルã®LineModel 312 * 313 * @return 処ç?¤‰æ›å¾Œã?LineModel 314 */ 315 public LineModel action( final LineModel data ) { 316 LineModel rtn = null; 317 318 final FileLineModel fileData ; 319 if( data instanceof FileLineModel ) { 320 fileData = (FileLineModel)data ; 321 } 322 else { 323 String errMsg = "ãƒ??ã‚¿ã?FileLineModel オブジェクトã§ã¯ã‚りã¾ã›ã‚“ã€? + CR ; 324 throw new RuntimeException( errMsg ); 325 } 326 327 File inFile = fileData.getFile() ; 328 File[] fileList = inFile.listFiles( filter ); 329 330 if( fileList != null && fileList.length > 0 ) { 331 rtn = data; 332 } 333 334 if( display && rtn != null ) { println( rtn.dataLine() ); } // 5.1.2.0 (2010/01/01) display ã®æ¡ä»¶å¤‰æ›´ 335 return rtn ; 336 } 337 338 /** 339 * プãƒã‚»ã‚¹ã®çµ‚äº?‚’行ã„ã¾ã™ã?æœ?¾Œã«ä¸?º¦ã?‘ã€å‘¼ã³å‡ºã•れã¾ã™ã? 340 * 終äº??ç?ファイルクãƒãƒ¼ã‚ºã€?¼¤?¢ã‚¯ãƒãƒ¼ã‚ºç?ã«ä½¿ç”¨ã—ã¾ã™ã? 341 * 342 * @param isOK トã?タルã§ã€OKã?£ãŸã‹ã©ã?‹[true:æˆåŠŸ/false:失敗] 343 */ 344 public void end( final boolean isOK ) { 345 dirs = null; 346 file = null; 347 filter = null; 348 newData = null; 349 } 350 351 /** 352 * プãƒã‚»ã‚¹ã®å‡¦ç?µæžœã®ãƒ¬ãƒã?ト表ç¾ã‚’è¿”ã—ã¾ã™ã? 353 * 処ç??ãƒã‚°ãƒ©ãƒ?ã€å?力件数ã€å?力件数ãªã©ã®æƒ??ã§ã™ã? 354 * ã“ã?æ–?—å?ã‚’ãã®ã¾ã¾ã€æ¨™æº–å?力ã«å‡ºã™ã“ã¨ã§ã€çµæžœãƒ¬ãƒã?トã¨å‡ºæ¥ã‚‹ã‚ˆã?ª 355 * å½¢å¼ã§å‡ºã—ã¦ãã ã•ã„ã€? 356 * 357 * @return 処ç?µæžœã®ãƒ¬ãƒã?ãƒ? 358 */ 359 public String report() { 360 String report = "[" + getClass().getName() + "]" + CR 361 + TAB + "Start Folder : " + startDir + CR 362 + TAB + "Search Count : " + inCount + CR 363 + TAB + "Output Count : " + outCount ; 364 365 return report ; 366 } 367 368 /** 369 * ã“ã?クラスã®ä½¿ç”¨æ–¹æ³•ã‚’è¿”ã—ã¾ã™ã? 370 * 371 * @return ã“ã?クラスã®ä½¿ç”¨æ–¹æ³? 372 */ 373 public String usage() { 374 StringBuilder buf = new StringBuilder(); 375 376 buf.append( "Process_FileSearch ã¯ã€æŒ‡å®šã?フォルãƒ?»¥ä¸‹ã?ファイルをä¸?¦§ã™ã‚‹ã€FirstProcess" ).append( CR ); 377 buf.append( "インターフェースã¨ã€ChainProcess インターフェースã®å®Ÿè£?‚¯ãƒ©ã‚¹ã§ã™ã?" ).append( CR ); 378 buf.append( CR ); 379 buf.append( "æŒ?®šã?æ¡ä»¶ã«åˆè?ã™ã‚‹ãƒ•ァイルを検索ã—ã?ファイル属æ?(Level,File,Length,Modify)" ).append( CR ); 380 buf.append( "ã‚’å?ã«ã€LineModelを作æ?ã—ã?下æµã«æ¸¡ã—ã¾ã™ã?" ).append( CR ); 381 buf.append( CR ); 382 buf.append( "引数æ–?—å?ä¸ã«ç©ºç™½ã‚’å«ã‚??åˆã?ã€ãƒ€ãƒ–ルコーãƒ??ション(\"\") ã§æ‹¬ã£ã¦ä¸‹ã•ã??" ).append( CR ); 383 buf.append( "引数æ–?—å?ã® ã€?ã€ã?å‰å¾Œã«ã¯ã€ç©ºç™½ã¯æŒŸã‚ã¾ã›ã‚“。å¿?šã€?key=value ã®æ§˜ã«" ).append( CR ); 384 buf.append( "繋ã’ã¦ãã ã•ã„ã€? ).append( CR ); 385 buf.append( CR ); 386 buf.append( " -start=開始フォルãƒ? ?šæ¤œç´¢ã‚’é–‹å§‹ã™ã‚‹ãƒ•ォルãƒ? ).append( CR ); 387 buf.append( "[ -prefix=接é è¾? ]?šFile?¥?¥?¥?¥,View?¥?¥?¥?¥,ãªã©ã®æŽ¥é 辞ã§å§‹ã¾ã‚‹ãƒ•ァイル" ).append( CR ); 388 buf.append( "[ -unprefix=䏿ޥé è¾? ]?šFile?¥?¥?¥?¥,View?¥?¥?¥?¥,ãªã©ã®æŽ¥é 辞ã§å§‹ã¾ã‚‰ãªã?ƒ•ァイル" ).append( CR ); 389 buf.append( "[ -suffix=接尾è¾? ]??txt,.java,.jsp.... ãªã©ã®æŽ¥å°¾è¾žã§çµ‚ã‚るファイル" ).append( CR ); 390 buf.append( "[ -unsuffix=䏿ޥ尾è¾? ]??txt,.java,.jsp.... ãªã©ã®æŽ¥å°¾è¾žã§çµ‚ã‚らãªã?ƒ•ァイル" ).append( CR ); 391 buf.append( "[ -instr=部åˆ?–‡å—å? ]?šãƒ•ァイルåã¨ä¸??ã™ã‚‹éƒ¨åˆ?–‡å—å?" ).append( CR ); 392 buf.append( "[ -uninstr=ä¸éƒ¨åˆ?–‡å—å? ]?šãƒ•ァイルåã¨ä¸??ã—ãªéƒ¨åˆ?–‡å—å?" ).append( CR ); 393 buf.append( "[ -equals=ä¸?? ]?šãƒ•ァイルåã¨ä¸??ã™ã‚‹æ–?—å?(大æ–?—å°æ–‡å—ã?区別ã—ãªã?" ).append( CR ); 394 buf.append( "[ -notequals=ä¸ä¸?? ]?šãƒ•ァイルåã¨ä¸??ã—ãªã?–‡å—å?(大æ–?—å°æ–‡å—ã?区別ã—ãªã?" ).append( CR ); 395 buf.append( "[ -match=æ£è¦è¡¨ç¾ ]?šãƒ•ァイルåã¨ä¸??ã™ã‚‹æ£è¦è¡¨ç¾" ).append( CR ); 396 buf.append( "[ -unmatch=æ£è¦è¡¨ç¾ ]?šãƒ•ァイルåã¨ä¸??ã—ãªã?£è¦è¡¨ç¾" ).append( CR ); 397 buf.append( "[ -modify=YYYYMMDD ]?šæŒ‡å®šæ—¥ä»˜ã‘以é™ã«å¤‰æ›´ã•れãŸãƒ•ァイル" ).append( CR ); 398 buf.append( " YYYYMMDD : YYYYMMDD å½¢å¼ã§ã®æŒ?®šæ—¥ã® 00:00:00 を基準時刻" ).append( CR ); 399 buf.append( " TODAY : 実行日㮠00:00:00 を基準時刻" ).append( CR ); 400 buf.append( " YESTERDAY : å®Ÿè¡Œæ—¥å‰æ—¥ã® 00:00:00 を基準時刻" ).append( CR ); 401 buf.append( " LAST_WEEK : 実行日ã®å…ˆé?(7æ—¥å‰? 00:00:00 を基準時刻" ).append( CR ); 402 buf.append( " MONTH : 実行月㮠1æ—¥ 00:00:00 を基準時刻" ).append( CR ); 403 buf.append( " LAST_MONTH : å®Ÿè¡Œå‰æœˆã? åŒæ—¥ 00:00:00 を基準時刻" ).append( CR ); 404 buf.append( " LAST_YEAR : 実行å‰å¹´ã® åŒæœˆåŒæ—¥ 00:00:00 を基準時刻" ).append( CR ); 405 buf.append( "[ -useDIR=[false/true] ]?šåˆ¤å®šã‚’ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªåã‚‚å«ã‚ã¦è¡Œã†ã‹ã©ã?‹(åˆæœŸå€¤:false)" ).append( CR ); 406 buf.append( "[ -larger=サイズ(KByte) ]?šå¤§ãã•ãŒæŒ‡å®šã??«ãƒã‚¤ãƒˆæ•°ã‚ˆã‚Šå¤§ãã„ファイル" ).append( CR ); 407 buf.append( "[ -smaller=サイズ(KByte)]?šå¤§ãã•ãŒæŒ‡å®šã??«ãƒã‚¤ãƒˆæ•°ã‚ˆã‚Šå°ã•ã?ƒ•ァイル" ).append( CR ); 408 buf.append( "[ -maxLevel=æœ?¤§éšŽå±¤æ•° ]?šãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®éšŽå±¤ã‚’下ãŒã‚‹æœ€å¤§æ•°(åˆæœŸå€¤:256)" ).append( CR ); 409 buf.append( "[ -useLineCnt=行数計ç®? ]?šãƒ•ァイルã®è¡Œæ•°ã‚’カウントã™ã‚‹ã‹ã©ã?‹(åˆæœŸå€¤:false)" ).append( CR ); 410 buf.append( "[ -useMD5=MD5計算å? ]?šãƒ•ァイルã®MD5計算を行ã†ã‹ã©ã?‹ã‚’指å®?åˆæœŸå€¤:false)" ).append( CR ); 411 buf.append( "[ -inPath=入力å?通パス ]?šBIKO作æ?用ã®ãƒ•ァイルパスã‹ã‚‰å‰Šé™¤ã™ã‚‹æ–?—å?" ).append( CR ); 412 buf.append( "[ -outPath=出力追åŠ?ƒ‘ス ]?šBIKO作æ?用ã®ãƒ•ァイルパスã«è¿½åŠ?™ã‚‹æ–‡å—å?" ).append( CR ); 413 buf.append( "[ -display=[false/true] ]?štrueã¯ã€æ¤œç´¢çжæ³ã‚’表示(åˆæœŸå€¤:false)" ).append( CR ); 414 buf.append( CR ).append( CR ); 415 buf.append( getArgument().usage() ).append( CR ); 416 417 return buf.toString(); 418 } 419 420 /** 421 * ã“ã?クラスã¯ã€main メソãƒ?ƒ‰ã‹ã‚‰å®Ÿè¡Œã§ãã¾ã›ã‚“ã€? 422 * 423 * @param args コマンド引数é…å? 424 */ 425 public static void main( final String[] args ) { 426 LogWriter.log( new Process_FileSearch().usage() ); 427 } 428 429 /** 430 * ã“ã?クラスã¯ãƒ•ァイルをスタãƒ?‚¯ã‚’使用ã—ã¦å±•é–‹ã™ã‚‹å ´åˆã? 431 * 個ã?ã®çŠ¶æ…‹ã‚’ä¿æŒã™ã‚‹ç‚ºã®ã‚¯ãƒ©ã‚¹ã§ã™ã? 432 * 433 * @version 4.0 434 * @author Kazuhiko Hasegawa 435 * @since JDK5.0, 436 */ 437 private static final class FileListStack { 438 private int address ; 439 private final File[] files; 440 private final int level; 441 442 /** 443 * コンストラクター 444 * åˆæœŸå€¤ã‚’è¨å®šã—ã¾ã™ã? 445 * ファイルã®é…å?ã«ã¤ã?¦ã¯ã€ã‚³ãƒ”ã?ã›ãšãã?ã¾ã¾å†?ƒ¨é…å?ã«ã‚»ãƒ?ƒˆã—ã¦ã?¾ã™ã? 446 * 447 * @param files File[] ファイルã®é…å?(ファイルリスãƒ? 448 * @param level レベル(æŒ?®šã?startフォルãƒ?‹ã‚‰ã?階層数) 449 */ 450 FileListStack( final File[] files,final int level ) { 451 this.files = files; 452 this.address = 0; 453 this.level = level; 454 } 455 456 /** 457 * ファイルリストã?アドレスをè¨å®šã—ã¾ã™ã? 458 * スタãƒ?‚¯ã‹ã‚‰å–り出ã—ãŸå¾Œã?é…å?ã‚’å‰å›žã?ç¶šãã‹ã‚‰ã‚µãƒ¼ãƒã™ã‚‹å?åˆã«ä½¿ç”¨ã—ã¾ã™ã? 459 * 460 * @param address ファイルリストã?アドレス 461 */ 462 void setAddress( final int address ) { 463 this.address = address; 464 } 465 466 /** 467 * ファイルリストã?アドレスをå–りå?ã—ã¾ã™ã? 468 * 469 * @return ファイルリストã?アドレス 470 */ 471 int getAddress() { 472 return address; 473 } 474 475 /** 476 * ファイルリストをå–り出ã—ã¾ã™ã? 477 * ファイルã®é…å?ã«ã¤ã?¦ã¯ã€ã‚³ãƒ”ã?ã›ãšãã?ã¾ã¾å†?ƒ¨é…å?ã‚’è¿”ã—ã¦ã?¾ã™ã? 478 * 479 * @return File[] ファイルリスãƒ? 480 */ 481 File[] getFileList() { 482 return files; 483 } 484 485 /** 486 * 階層レベルをå–りå?ã—ã¾ã™ã? 487 * 488 * @return レベル 489 */ 490 int getLevel() { 491 return level; 492 } 493 } 494 }