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