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