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 }