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.hayabusa.taglib;
017
018 import org.opengion.hayabusa.common.HybsSystemException;
019 import org.opengion.fukurou.util.HybsFileFilter;
020
021 import static org.opengion.fukurou.util.StringUtil.nval ;
022
023 /**
024 * fileOption でファイルを検索する場合?条件を指定するタグです?
025 *
026 * @og.formSample
027 * ●形式?lt;og:fileWhere name="…" startsWith="…" endsWith="…" … />
028 * ●body?な?
029 *
030 * ●Tag定義??
031 * <og:fileWhere
032 * startsWith 【TAG】指定された接頭辞で始まる?合?スルー(選?されま?
033 * endsWith 【TAG】指定された接頭辞で終わる?合?スルー(選?されま?
034 * instr 【TAG】指定された??がファイル名に含まれる場合?スルー(選?されま?
035 * equals 【TAG】ファイル名が??する場合?スルー(選?されま?
036 * matches 【TAG】ファイル名が、指定された正規表現と??する場合?スルー(選?されま?
037 * unMatches 【TAG】ファイル名が、指定された正規表現と??しな??合?スルー(選?されま?
038 * lastModified 【TAG】指定?タイ?タンプ以後に変更されて?場合?スルー(選?されま?
039 * isLarger 【TAG】指定?大きさより大きいファイルの場合?スルー(選?されま?
040 * isSmaller 【TAG】指定?大きさより小さ?ァイルの場合?スルー(選?されま?
041 * isHidden 【TAG】true:HIDDENファイルのみ/false:NORMALファイルのみスルー(選?されま?
042 * useDir 【TAG】フィルタによる対象の絞込みをディレクトリにも適用するかど?を指定しま?
043 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
044 * />
045 *
046 * ●使用?
047 * <og:fileOption select="NAME" from="./jsp" >
048 * <og:fileWhere
049 * startsWith = "File" :?された接頭辞で始まる?合?選択される
050 * endsWith = ".java" :?された接頭辞で終わる?合?選択される
051 * instr = "Tag" :?された??がファイル名に含まれる場合?選択される
052 * fileEquals = "FileWhereTag.java" :ファイル名が??する場合?選択される(大?小文字?区別しな?
053 * matches = "File*Tag" :ファイル名が、指定された正規表現と??する場合?選択される(大?小文字?区別しな?
054 * unMatches = "File*Tag" :ファイル名が、指定された正規表現と??しな??合?選択される(大?小文字?区別しな?
055 * lastModified = "20050101" :??タイ?タンプ以後に変更された?合?選択される
056 * 日付けの??、YYYYMMDD 形? TODAY , YESTERDAY が使用できます?
057 * isLarger = "1024" :??大きさ(バイト単?より大きいファイルの場合?選択される
058 * isSmaller = "1024" :??大きさ(バイト単?より小さ?ァイルの場合?選択される
059 * isHidden = "true" :true:HIDDENファイルのみ選択される
060 * useDir = "false" :フィルタによる対象の絞込みをディレクトリにも適用するかど?
061 * />
062 * </og:fileOption>
063 *
064 * ・検索条件が?力された?
065 * 条件を?して全てのファイルを?挙します?
066 *
067 * ・検索条件が?力されなかった時
068 * 該当ディレクトリ??全てのファイルを?挙します?
069 *
070 * @og.rev 2.1.1.0 (2002/11/11) 新規作?
071 * @og.rev 4.0.0.0 (2005/01/31) ?ロジ?の全面見直?
072 * @og.group そ?他??
073 *
074 * @version 4.0
075 * @author Kazuhiko Hasegawa
076 * @since JDK5.0,
077 */
078 public class FileWhereTag extends CommonTagSupport {
079 //* こ?プログラ??VERSION??を設定します? {@value} */
080 private static final String VERSION = "5.7.5.0 (2014/04/04)" ;
081
082 private static final long serialVersionUID = 575020140404L ;
083
084 private String startsWith = null; // ?された接頭辞で始まる?合?選択される
085 private String endsWith = null; // ?された接頭辞で終わる?合?選択される
086 private String instr = null; // ?された??がファイル名に含まれる場合?選択される
087 private String fileEquals = null; // ファイル名が??する場合?選択される(大?小文字?区別しな?
088 private String matches = null; // ファイル名が、指定された正規表現と??する場合?選択される(大?小文字?区別しな?
089 private String unMatches = null; // ファイル名が、指定された正規表現と??しな??合?選択される(大?小文字?区別しな?
090 private String lastModified = null; // ??タイ?タンプ以後に変更された?合?選択される
091 // private int isLarger = -1; // ??大きさ(バイト単?より大きいファイルの場合?選択される
092 // private int isSmaller = -1; // ??大きさ(バイト単?より小さ?ァイルの場合?選択される
093 private String isLarger = null; // ??大きさ(バイト単?より大きいファイルの場合?選択される
094 private String isSmaller = null; // ??大きさ(バイト単?より小さ?ァイルの場合?選択される
095 private String isHidden = null; // 5.7.5.0 (2014/04/04) true:HIDDENファイルのみ/false:NORMALファイルのみスルー(選?されま?
096 private boolean useDir = false; // 5.3.9.0 (2011/09/01) フィルタによる対象の絞込みをディレクトリにも適用するかど?
097
098 /**
099 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
100 *
101 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
102 * @og.rev 5.1.2.0 (2010/01/01) unMatches メソ?で反転属?の追?
103 * @og.rev 5.3.9.0 (2011/09/01) useDir属?を追?
104 * @og.rev 5.6.6.0 (2013/07/05) unMatchesの引数間違??訂正
105 * @og.rev 5.7.5.0 (2014/04/04) isHidden属?を追?ます?
106 *
107 * @return 後続????
108 */
109 @Override
110 public int doEndTag() {
111 debugPrint(); // 4.0.0 (2005/02/28)
112
113 // 5.3.9.0 (2011/09/01) useDir属?を追?
114 // HybsFileFilter filter = new HybsFileFilter();
115 HybsFileFilter filter = new HybsFileFilter( useDir );
116 filter.startsWith( startsWith );
117 filter.endsWith( endsWith );
118 filter.instr( instr );
119 filter.fileEquals( fileEquals );
120 filter.matches( matches );
121 // filter.matches( matches , true ); // 5.1.2.0 (2010/01/01) 反転属?の追?
122 filter.matches( unMatches , true ); // 5.6.6.0 (2013/07/05) 引数間違??訂正
123 // filter.unMatches( unMatches );
124 filter.lastModified( lastModified );
125 filter.isLarger( isLarger );
126 filter.isSmaller( isSmaller );
127 filter.isHidden( isHidden ); // 5.7.5.0 (2014/04/04) 追?
128
129 // ファイルフィルタを追?
130 FileQueryTag fileQuery = (FileQueryTag)findAncestorWithClass( this, FileQueryTag.class );
131 if( fileQuery != null ) {
132 fileQuery.setFileFilter( filter );
133 return(EVAL_PAGE);
134 }
135
136 FileOptionTag fileOption = (FileOptionTag)findAncestorWithClass( this, FileOptionTag.class );
137 if( fileOption != null ) {
138 fileOption.setFileFilter( filter );
139 return(EVAL_PAGE);
140 }
141
142 // どちらにも属して?かった?合?、エラーになる?
143 String errMsg = "こ?、FileWhereTag タグは、FileQueryTag か?FileOption の"
144 + "BODY 部にのみ??置できます?(それ以外??での使用はできません?" ;
145 throw new HybsSystemException( errMsg );
146 }
147
148 /**
149 * タグリブオブジェクトをリリースします?
150 * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
151 *
152 * @og.rev 2.0.0.4 (2002/09/27) カスタ?グの release() メソ?を?追?
153 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
154 * @og.rev 4.0.0.0 (2005/01/31) ?ロジ?の全面見直?
155 * @og.rev 5.3.9.0 (2011/09/01) useDir属?追?
156 * @og.rev 5.7.4.3 (2014/03/28) isLarger,isSmaller属?を文字?に変更
157 * @og.rev 5.7.5.0 (2014/04/04) isHidden属?を追?
158 */
159 @Override
160 protected void release2() {
161 super.release2();
162 startsWith = null;
163 endsWith = null;
164 instr = null;
165 fileEquals = null;
166 matches = null;
167 unMatches = null;
168 lastModified = null;
169 // isLarger = -1;
170 // isSmaller = -1;
171 isLarger = null; // 5.7.4.3 (2014/03/28) isLarger,isSmaller属?を文字?に変更
172 isSmaller = null; // 5.7.4.3 (2014/03/28) isLarger,isSmaller属?を文字?に変更
173 isHidden = null; // 5.7.5.0 (2014/04/04) isHidden属?を追?
174 useDir = false; // 5.3.9.0 (2011/09/01) useDir属?追?
175 }
176
177 /**
178 * 【TAG】指定された接頭辞で始まる?合?スルー(選?されます?
179 * @og.tag
180 * 引数?null の場合?、追?ません?
181 *
182 * @param prefix 接頭?
183 * @see java.lang.String#startsWith(String)
184 */
185 public void setStartsWith( final String prefix ) {
186 startsWith = nval( getRequestParameter( prefix ),startsWith );
187 }
188
189 /**
190 * 【TAG】指定された接頭辞で終わる?合?スルー(選?されます?
191 * @og.tag
192 * 引数?null の場合?、追?ません?
193 *
194 * @param suffix 接尾?
195 * @see java.lang.String#endsWith(String)
196 */
197 public void setEndsWith( final String suffix ) {
198 endsWith = nval( getRequestParameter( suffix ),endsWith );
199 }
200
201 /**
202 * 【TAG】指定された??がファイル名に含まれる場合?スルー(選?されます?
203 * @og.tag
204 * 引数?null の場合?、追?ません?
205 *
206 * @param str ??部?字?
207 */
208 public void setInstr( final String str ) {
209 instr = nval( getRequestParameter( str ),instr );
210 }
211
212 /**
213 * 【TAG】ファイル名が??する場合?スルー(選?されます?
214 * @og.tag
215 * 大?小文字?区別しません?
216 * 引数?null の場合?、追?ません?
217 *
218 * @param str ファイル名文字?
219 * @see java.lang.String#equals(Object)
220 */
221 public void setEquals( final String str ) {
222 fileEquals = nval( getRequestParameter( str ),fileEquals );
223 }
224
225 /**
226 * 【TAG】ファイル名が、指定された正規表現と??する場合?スルー(選?されます?
227 * @og.tag
228 * 大?小文字?区別しません?
229 * Pattern.compile( str,Pattern.CASE_INSENSITIVE ) ;
230 * pattern.matcher( pathname.getName() ).find() == true と同じ結果が得られます?
231 * 引数?null の場合?、追?ません?
232 *
233 * @param str ファイル名文字?(正規表現)
234 * @see java.util.regex.Pattern#compile(String,int)
235 * @see java.util.regex.Matcher#find()
236 */
237 public void setMatches( final String str ) {
238 matches = nval( getRequestParameter( str ),matches );
239 }
240
241 /**
242 * 【TAG】ファイル名が、指定された正規表現と??しな??合?スルー(選?されます?
243 * @og.tag
244 * 大?小文字?区別しません?
245 * Pattern.compile( str,Pattern.CASE_INSENSITIVE ) ;
246 * pattern.matcher( pathname.getName() ).find() == false と同じ結果が得られます?
247 * 引数?null の場合?、追?ません?
248 *
249 * @param str ファイル名文字?(正規表現) とマッチしな?
250 * @see java.util.regex.Pattern#compile(String,int)
251 * @see java.util.regex.Matcher#find()
252 */
253 public void setUnMatches( final String str ) {
254 unMatches = nval( getRequestParameter( str ),unMatches );
255 }
256
257 /**
258 * 【TAG】指定?タイ?タンプ以後に変更されて?場合?スルー(選?されます?
259 * @og.tag
260 * ?レクトリは、ここ?判定では無視します?(? true を返しま?
261 * 日付けの?に、YYYYMMDD 形式? ?文字数字文字?以外に?
262 * TODAY ?YESTERDAY なども使用できます?
263 * TODAY は、実行日の 00:00:00 を基準時刻とし?YESTERDAY は、その前日になります?
264 * 引数?null の場合?、追?ません?
265 *
266 * YYYYMMDD YYYYMMDD形式??日の 00:00:00 を基準時刻
267 * TODAY 実行日の 00:00:00 を基準時刻
268 * YESTERDAY 実行日前日の 00:00:00 を基準時刻
269 * LAST_WEEK 実行日の先?(7日? 00:00:00 を基準時刻
270 * MONTH 実行月の 1日 00:00:00 を基準時刻
271 * LAST_MONTH 実行前月? 同日 00:00:00 を基準時刻
272 * LAST_YEAR 実行前年の 同月同日 00:00:00 を基準時刻
273 *
274 * @param modify YYYYMMDD形式??日
275 */
276 public void setLastModified( final String modify ) {
277 lastModified = nval( getRequestParameter( modify ),lastModified );
278 }
279
280 /**
281 * 【TAG】指定?大きさより大きいファイルの場合?スルー(選?されます?
282 *
283 * @og.tag
284 * ファイルの大きさ(バイト単?は同?を含みます?
285 * 未??場合?、スルー(選?されます?
286 *
287 * ??バイト単位ですが?*KB , **MB , **GB などの単位を付ける事も可能です?
288 * 現時点では、K , KB , M , MB , G , GB のみ?可能です?
289 *
290 * @param len ファイルの大きさ(バイト単?。同値を含??
291 */
292 public void setIsLarger( final String len ) {
293 isLarger = nval( getRequestParameter( len ),isLarger );
294 }
295
296 /**
297 * 【TAG】指定?大きさより小さ?ァイルの場合?スルー(選?されます?
298 *
299 * @og.tag
300 * ファイルの大きさ(バイト単?は同?を含みません?
301 * 未??場合?、スルー(選?されます?
302 *
303 * ??バイト単位ですが?*KB , **MB , **GB などの単位を付ける事も可能です?
304 * 現時点では、K , KB , M , MB , G , GB のみ?可能です?
305 *
306 * @param len ファイルの大きさ(バイト単?。同値を含まな??
307 */
308 public void setIsSmaller( final String len ) {
309 isSmaller = nval( getRequestParameter( len ),isSmaller );
310 }
311
312
313 /**
314 * 【TAG】対象に?ファイル(hidden)を?スルー(選?する場合?true を指定しま?初期値:null)?
315 * @og.tag
316 * trueを指定すると?しファイル(hidden)のみ選択します?
317 * falseを指定すると?しファイル(hidden)以外を選択します?
318 * ?ファイルかど?の定義はOSに従います?
319 * 初期値は、両方とも選択する為、null (trueでもfalseでもな?です?
320 *
321 * @og.rev 5.7.5.0 (2014/04/04) 新規作?
322 *
323 * @param flg ?ファイルを対象にするかど? true:する/false:しない]
324 */
325 public void setIsHidden( final String flg ) {
326 isHidden = nval( getRequestParameter( flg ), isHidden );
327 }
328
329 /**
330 * 【TAG】フィルタによる対象の絞込みをディレクトリにも適用するかど?を指定します?
331 * @og.tag 初期値は、false(?レクトリはフィルタによる絞込みをしな?です?
332 *
333 * @og.rev 5.3.9.0 (2011/09/01) 新規作?
334 *
335 * @param flg フィルタによる対象の絞込みをディレクトリにも適用するかど?(初期値:false)
336 */
337 public void setUseDir( final String flg ) {
338 useDir = nval( getRequestParameter( flg ),useDir );
339 }
340
341 /**
342 * こ?オブジェクト???表現を返します?
343 * 基本???目?使用します?
344 *
345 * @return String型?こ?クラスの??表現
346 */
347 @Override
348 public String toString() {
349 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
350 .println( "VERSION" ,VERSION )
351 .println( "startsWith" ,startsWith )
352 .println( "endsWith" ,endsWith )
353 .println( "instr" ,instr )
354 .println( "fileEquals" ,fileEquals )
355 .println( "matches" ,matches )
356 .println( "unMatches" ,unMatches )
357 .println( "lastModified" ,lastModified )
358 .println( "isLarger" ,isLarger )
359 .println( "isSmaller" ,isSmaller )
360 .println( "useDir" ,useDir )
361 .println( "Other..." ,getAttributes().getAttribute() )
362 .fixForm().toString() ;
363 }
364 }