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.HybsSystem; 019 import org.opengion.hayabusa.common.HybsSystemException; 020 import org.opengion.hayabusa.db.DBTableModel; 021 import org.opengion.hayabusa.db.DBTableModelSorter; 022 import org.opengion.hayabusa.db.DBColumn; 023 import org.opengion.hayabusa.db.DBTableModelUtil; 024 import org.opengion.fukurou.util.StringUtil; 025 import org.opengion.fukurou.security.HybsCryptography ; // 5.7.4.3 (2014/03/28) 026 027 import static org.opengion.fukurou.util.StringUtil.nval ; 028 029 import java.util.Arrays; 030 import java.util.List; 031 import java.util.ArrayList; 032 import java.io.File; 033 import java.io.FileFilter; 034 import java.io.ObjectOutputStream; 035 import java.io.ObjectInputStream; 036 import java.io.IOException; 037 038 /** 039 * ファイルを検索し?DBTableModel にセ?するタグです? 040 * 041 * ファイルの検索結果は、[WRITABLE],LEVEL,FILE_TYPE,PARENT,NAME,LASTMODIFIED,FILE_LENGTH,RWH,[MD5],[TO_PARENT,TO_NAME],[????] 042 * のカラ?持つ DBTableModel にセ? されます?こ?カラ??、固定です? 043 * 並び替えにつ?は、このタグで?しますが、ファイルの選別(where 条件)は? 044 * BODY 部に記述する fileWhere タグで?します?(??可能)) 045 * 046 * [カラ?] 検索するファイルの属?は、以下?カラ?で作?されます? 047 * [WRITABLE] useWritable=trueで、?頭カラ?、WRITABLE カラ?挿入されます? 048 * LEVEL ?レクトリを展開する場合?レベル? 049 * FILE_TYPE ファイル(F)かディレクトリ(D)であるか判定? 050 * PARENT こ?抽象パス名?親のパス名文字?を返します? 051 * NAME こ?抽象パス名が示すファイルまた??レクトリの名前を返します? 052 * LASTMODIFIED ?に変更された時刻を返します? 053 * FILE_LENGTH ファイルの長さを返します? 054 * RWH 読み込み、書き込み?し属?をそれぞれ???w,h で表します? 055 * [MD5] useMD5=trueで、MD5 と?カラ?追?たうえで、ファイルのMD5計算を行います? 056 * [TO_PARENT] useUpdateClms=trueで、fileUpdateタグでCOPYやMOVEを行う時に使用する??となるカラ?TO_PARENT,TO_NAME)を追?ます? 057 * [TO_NAME] 同? 058 * [????] addClms属?で?されたカラ?追?ます? 059 * 060 * @og.formSample 061 * ●形式?lt;og:fileQuery from="…" multi="true/false" > 062 * <og:fileWhere … /> 063 * … 064 * </og:fileQuery> 065 * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま? 066 * 067 * ●Tag定義?? 068 * <og:fileQuery 069 * from ○?TAG】検索を開始するファイルまた??レクトリを指定しま???)? 070 * multi 【TAG】多段階展開するか??レベル展開するかど?[true:多段?false:?レベル]を指定しま?初期値:false:?レベル)? 071 * level 【TAG】多段階展開するレベルを指定しま?初期値:100)? 072 * orderBy 【TAG】ソートするカラ?を指定しま??のみ)? 073 * desc 【TAG】表示??するかど?[true/false]を指定しま?初期値:false)? 074 * useWritable 【TAG】?頭カラ?、WRITABLE カラ?追?るかど?[true/false]を指定しま?初期値:false)? 075 * useMD5 【TAG】MD5カラ?追?たうえで、MD5計算を行うかど?[true/false]を指定しま?初期値:false)? 076 * useUpdateClms 【TAG】TO_PARENT、TO_NAMEカラ?追?るかど?[true/false]を指定しま?初期値:false)? 077 * addClms 【TAG】検索結果のカラ??に追?るカラ?を?カンマ区??で?します? 078 * fileType 【TAG】選択対象[FILE/DIR]を指定します?下位展開は??(multi 属?準拠)されます? 079 * addFrom 【TAG】from属?で?された基準ファイル/フォル??体をリストに追?るかど?[true/false]を指定しま?初期値:true)? 080 * command 【TAG】コマン?NEW,RENEW)をセ?しま?"NEW" と "RENEW" 時?み実行す?初期値:NEW))? 081 * maxRowCount 【TAG?通常は使?せん)??タの?読み込み件数を指定しま?(初期値:DB_MAX_ROW_COUNT[=1000])(0:[無制限])? 082 * displayMsg 【TAG】検索結果を画面上に表示するメ?ージリソースIDを指定しま?(初期値:VIEW_DISPLAY_MSG[=])v 083 * overflowMsg 【TAG】検索??タが最大検索数をオーバ?した場合に表示するメ?ージリソースIDを指定しま?(初期値:MSG0007[検索結果が?制限行数を?ましたので、残りはカ?されました])? 084 * notfoundMsg 【TAG】検索結果がゼロ件の場合に表示するメ?ージリソースIDを指定しま?初期値:MSG0077[対象??タはありませんでした])? 085 * tableId 【TAG?通常は使?せん)結果のDBTableModelを?sessionに登録するとき?キーを指定しま? 086 * scope 【TAG】キャ?ュする場合?スコープ[request/page/session/applicaton]を指定しま?初期値:session)? 087 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)? 088 * > ... Body ... 089 * </og:fileQuery> 090 * 091 * ●使用? 092 * ・??属?でファイルの検索を行います? 093 * <og:fileQuery 094 * from = "d:/webapps/dbdef/jsp/" 095 * multi = "true" 096 * command = "{@command}" > 097 * <og:fileWhere endWith=".jsp" /> 098 * </og:fileQuery> 099 * 100 * ・?変更日で??ソートする?対象は?002/10/01 以降に変更されたファイル? 101 * <og:fileQuery 102 * from = "d:/webapps/dbdef/jsp/" 103 * multi = "true" 104 * orderBy = "LASTMODIFIED" 105 * desc = "true" 106 * command = "{@command}" > 107 * <og:fileWhere lastModified="20021001000000" /> 108 * </og:fileQuery> 109 * 110 * @og.rev 4.0.0.0 (2005/01/31) ?ロジ?改? 111 * @og.group そ?他?? 112 * 113 * @version 4.0 114 * @author Kazuhiko Hasegawa 115 * @since JDK5.0, 116 */ 117 public class FileQueryTag extends QueryTag { 118 //* こ?プログラ??VERSION??を設定します? {@value} */ 119 private static final String VERSION = "5.7.4.3 (2014/03/28)" ; 120 121 private static final long serialVersionUID = 574320140328L ; 122 123 private static final String[] SELECT = 124 new String[] { "LEVEL","FILE_TYPE","PARENT","NAME","LASTMODIFIED","FILE_LENGTH","RWH" }; 125 126 // 5.7.4.3 (2014/03/28) WRITABLE 対応?ため、固定ア??レスを止めます? 127 // private static final int LEVEL = 0; 128 // private static final int FILE_TYPE = 1; 129 // private static final int PARENT = 2; 130 // private static final int NAME = 3; 131 // private static final int LASTMODIFIED = 4; 132 // private static final int FILE_LENGTH = 5; 133 // private static final int RWH = 6; 134 135 private static final String[] USE_UPDATE_CLM = new String[] { "TO_PARENT","TO_NAME" }; // 5.3.4.0 (2011/04/01) 136 137 private transient FileFilter filter = null; // FileWhere で?したフィルター 138 139 private boolean multi = false; // 下位層展開?ラク?? 140 private int level = 100; // 展開?ベ? 141 private String from = HybsSystem.sys( "FILE_URL" ); // 検索起点?ァ??? 142 private String orderBy = null; // 5.3.4.0 (2011/04/01) ソートカラ? 143 private boolean desc = false; // 5.3.4.0 (2011/04/01) ソート?方?true:??) 144 private String[] addClms = new String[0]; // 5.3.4.0 (2011/04/01) 追?ラ??? 145 // private String[] valClms = null; // 5.3.4.0 (2011/04/01) 追?ラ??列?初期値 146 private String[] defClms = null; // 5.7.4.3 (2014/03/28) 初期値のカラ??? 147 private String fileType = null; // 5.3.4.0 (2011/04/01) 選択対象を指?FILE,DIR) 148 private boolean useWritable = false; // 5.7.4.3 (2014/03/28) 先?カラ?、WRITABLE カラ?追?るかど?[true/false](初期値:false) 149 private boolean useMD5 = false; // 5.7.4.3 (2014/03/28) MD5カラ?追?たうえで、MD5計算を行うかど?[true/false](初期値:false) 150 private boolean useUpdateClms = false; // 5.3.4.0 (2011/04/01) TO_PARENT、TO_NAMEカラ?追?true:追? 151 private boolean addFrom = true; // 5.3.9.0 (2011/09/01) from属?で?された基準ファイル/フォル??体をリストに追?るかど? 152 153 /** 154 * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします? 155 * 156 * @og.rev 5.3.4.0 (2011/04/01) ?カラ??ソート???追? 157 * @og.rev 5.3.5.0 (2011/05/01) ??のファイルが存在する場合?み、実行する? 158 * 159 * @return 後続????(SKIP_BODY) 160 */ 161 @Override 162 public int doAfterBody() { 163 executeCount = 0; 164 165 table = initDBTable(); 166 if( maxRowCount < 0 ) { 167 maxRowCount = sysInt( "DB_MAX_ROW_COUNT" ) ; 168 } 169 170 // execute( new File( from ),0 ) ; // 5.3.5.0 (2011/05/01) ? 171 172 // 5.3.5.0 (2011/05/01) ??のファイルが存在する場合?み、実行する? 173 File fin = new File( from ); 174 if( fin.exists() ) { 175 execute( fin,0 ) ; 176 177 // 5.3.4.0 (2011/04/01) ?カラ??ソート?? 178 if( orderBy != null ) { 179 int clmNo = table.getColumnNo( orderBy ); 180 DBTableModelSorter temp = new DBTableModelSorter(); 181 temp.setModel( table ); 182 temp.sortByColumn( clmNo,!desc ); // 注?desc の値と ソート正??、反対です? 183 table = temp; 184 } 185 } 186 187 return(SKIP_BODY); 188 } 189 190 /** 191 * タグリブオブジェクトをリリースします? 192 * キャ?ュされて再利用される?で、フィールド?初期設定を行います? 193 * 194 * @og.rev 5.3.4.0 (2011/04/01) ?カラ??ソート???、カラ???、fileType追? 195 * @og.rev 5.3.9.0 (2011/09/01) addFrom属?追? 196 * @og.rev 5.7.4.3 (2014/03/28) useWritable,useMD5属?追??valClms ?defClms に置き換え? 197 */ 198 @Override 199 protected void release2() { 200 super.release2(); 201 multi = false; 202 level = 100; 203 from = HybsSystem.sys( "FILE_URL" ); 204 filter = null; 205 orderBy = null; // 5.3.4.0 (2011/04/01) ソートカラ? 206 desc = false; // 5.3.4.0 (2011/04/01) 降??ラク?? 207 addClms = new String[0]; // 5.3.4.0 (2011/04/01) 追?ラ??? 208 // valClms = null; // 5.3.4.0 (2011/04/01) 追?ラ??列?初期値 209 defClms = null; // 5.7.4.3 (2014/03/28) 初期値のカラ??? 210 fileType = null; // 5.3.4.0 (2011/04/01) 選択対象を指?FILE,DIR,ALL) 211 useWritable = false; // 5.7.4.3 (2014/03/28) 先?カラ?、WRITABLE カラ?追?るかど?[true/false](初期値:false) 212 useMD5 = false; // 5.7.4.3 (2014/03/28) MD5カラ?追?たうえで、MD5計算を行うかど?[true/false](初期値:false) 213 useUpdateClms = false; // 5.3.4.0 (2011/04/01) TO_PARENT、TO_NAMEカラ?追?true:追? 214 addFrom = true; // 5.3.9.0 (2011/09/01) addFrom属?追? 215 } 216 217 /** 218 * FileQuery を実行します? 219 * 220 * @og.rev 5.3.4.0 (2011/04/01) fileType の条件に合?する場合だけ???タを作?する? 221 * @og.rev 5.3.7.0 (2011/07/01) フォル?アクセスできな??合?、null となる?でそ?対? 222 * @og.rev 5.3.9.0 (2011/09/01) addFrom属?追? 223 * 224 * @param fin 検索を開始するファイル/?レクトリ 225 * @param lvl 階層展開レベル 226 */ 227 protected void execute( final File fin,final int lvl ) { 228 if( ( !multi && lvl > 1 ) || lvl > level ) { return; } // 階層展開する、しな? 229 if( executeCount > maxRowCount ) { table.setOverflow( true ); return; } 230 231 boolean isDIR = fin.isDirectory(); 232 233 if( fileType == null || 234 ( isDIR && "DIR".equalsIgnoreCase( fileType ) ) || 235 ( !isDIR && "FILE".equalsIgnoreCase( fileType ) ) ) { 236 if( addFrom || ( !addFrom && lvl > 0 ) ) { 237 addFileData( executeCount++,lvl,fin ); 238 } 239 } 240 // if( fin.isDirectory() ) { 241 if( isDIR ) { 242 File[] list = fin.listFiles( filter ); 243 // 5.3.7.0 (2011/07/01) フォル?アクセスできな??合?、null となる? 244 if( list != null ) { 245 for( int i = 0; i < list.length; i++ ) { 246 execute( list[i],lvl+1 ); 247 } 248 } 249 } 250 } 251 252 /** 253 * 初期化された DBTableModel を返します? 254 * 255 * ここでは、useWritable、useMD5、useUpdateClms、addClms を加味した 256 * DBTableModel と初期値??タ(defClms)を作?します? 257 * 以前?、TO_PARENT、TO_NAMEと、addClms ??み初期値を持って?したが? 258 * 5.7.4.3 (2014/03/28)で、?頭カラ??WRITABLEの初期値を?DBColumn の初期値ではな? 259 * 手動設定する?がある為、すべてのカラ??の初期値を持っておきます? 260 * 261 * @og.rev 5.3.4.0 (2011/04/01) ?カラ???追? 262 * @og.rev 5.7.4.3 (2014/03/28) useWritable,useMD5属?追? 263 * 264 * @return ??ブルモ? 265 */ 266 private DBTableModel initDBTable() { 267 DBTableModel tbl = DBTableModelUtil.newDBTable(); 268 269 // 5.7.4.3 (2014/03/28) 以下?処??、ほぼ全面見直? 270 int size = SELECT.length ; // 基本カラ??数 271 if( useWritable ) { size++ ; } // WRITABLE カラ?追? 272 if( useMD5 ) { size++ ; } // MD5 カラ?追? 273 if( useUpdateClms ) { size += USE_UPDATE_CLM.length; } // TO_PARENT、TO_NAMEカラ?追? 274 size += addClms.length ; // addClms(追?ラ?数を追? 275 276 // DBTableModel の初期化と、?期?配?の確? 277 tbl.init( size ); 278 defClms = new String[size]; 279 280 int ad=0; 281 // 先?は、WRITABLE 282 if( useWritable ) { 283 DBColumn dbColumn = getDBColumn( "WRITABLE" ); 284 defClms[ad] = "1"; // WRITABLE を設定するとき?、とりあえず 書き込み許可 285 tbl.setDBColumn( ad++,dbColumn ); 286 } 287 288 // SELECT の 基本カラ??設定?(初期値は不? 289 for( int i=0; i<SELECT.length; i++ ) { 290 DBColumn dbColumn = getDBColumn( SELECT[i] ); 291 tbl.setDBColumn( ad++,dbColumn ); 292 } 293 294 // MD5 カラ?追?? 295 if( useMD5 ) { 296 DBColumn dbColumn = getDBColumn( "MD5" ); 297 defClms[ad] = ""; // ?レクトリの場合?、MD5計算しません? 298 tbl.setDBColumn( ad++,dbColumn ); 299 } 300 301 // TO_PARENT、TO_NAMEカラ?追? 302 if( useUpdateClms ) { 303 for( int i=0; i<USE_UPDATE_CLM.length; i++ ) { 304 DBColumn dbColumn = getDBColumn( USE_UPDATE_CLM[i] ); 305 defClms[ad] = dbColumn.getDefault(); // 初期値を指定しておく 306 tbl.setDBColumn( ad++,dbColumn ); 307 } 308 } 309 310 // 追?ラ??addClmsカラ?追? 311 for( int i=0; i<addClms.length; i++ ) { 312 DBColumn dbColumn = getDBColumn( addClms[i] ); 313 defClms[ad] = dbColumn.getDefault(); // 初期値を指定しておく 314 tbl.setDBColumn( ad++,dbColumn ); 315 } 316 317 return tbl ; 318 319 // // TO_PARENT、TO_NAMEカラ?追? 320 // int clmSize = addClms.length ; 321 // if( useUpdateClms ) { 322 // if( clmSize == 0 ) { 323 // addClms = USE_UPDATE_CLM ; 324 // } 325 // else { 326 // // 追?ラ?存在する場合?、加算します? 327 // addClms = Arrays.copyOf( addClms ,clmSize + USE_UPDATE_CLM.length ); // JDK1.6 328 // for( int i=0; i<USE_UPDATE_CLM.length; i++ ) { 329 // addClms[clmSize+i] = USE_UPDATE_CLM[i]; 330 // } 331 // } 332 // } 333 // valClms = new String[addClms.length]; 334 // 335 // tbl.init( SELECT.length + addClms.length ); 336 // int ad=0; 337 // for( int i=0; i<SELECT.length; i++ ) { 338 // DBColumn dbColumn = getDBColumn( SELECT[i] ); 339 // tbl.setDBColumn( ad++,dbColumn ); 340 // } 341 // 342 // for( int i=0; i<addClms.length; i++ ) { 343 // DBColumn dbColumn = getDBColumn( addClms[i] ); 344 // valClms[i] = dbColumn.getDefault(); // 初期値を指定しておく 345 // tbl.setDBColumn( ad++,dbColumn ); 346 // } 347 // 348 // return tbl ; 349 } 350 351 /** 352 * DBTableModel に、ファイル??をセ?します? 353 * ファイル??は、[WRITABLE],LEVEL,FILE_TYPE,PARENT,NAME,LASTMODIFIED,FILE_LENGTH,RWH,[MD5],[TO_PARENT,TO_NAME],[????] です? 354 * 355 * useWritable=true の場合?先?カラ?、WRITABLE カラ?追?ます? 356 * useMD5=true の場合?MD5カラ?追?たうえで、MD5計算を行いま?ファイルのみ計算しま?? 357 * useUpdateClms=true の場?O_PARENT、TO_NAMEカラ?追?ます? 358 * addClms で?されたカラ?そ?後ろに追?ます? 359 * 360 * @og.rev 5.3.4.0 (2011/04/01) ?カラ???追? 361 * @og.rev 5.7.4.3 (2014/03/28) useWritable,useMD5属?追? 362 * 363 * @param rowNo セ?する行番号 364 * @param lvl セ?するレベル 365 * @param fin ファイル??の?なるファイルオブジェク? 366 */ 367 private void addFileData( final int rowNo,final int lvl,final File fin ) { 368 try { 369 File file = fin.getCanonicalFile(); 370 371 String rwh = ((file.canRead())?"r":"-" ) + 372 ((file.canWrite())?"w":"-" ) + 373 ((file.isHidden())?"h":"-" ) ; 374 375 String lastModified = HybsSystem.getDate( file.lastModified(),"yyyyMMddHHmmss" ); 376 377 boolean isF = file.isFile(); // File=true,それ以?false 378 379 int size = table.getColumnCount() ; 380 // String[] data = new String[size]; // 昔ながらの配?コピ? 381 // System.arraycopy( defClms, 0, data, 0, size ); 382 String[] data = Arrays.copyOf( defClms,size ); // JDK1.6 383 384 int ad=0; 385 if( useWritable ) { ad++ ; } // 単にひとつ進める。?期?はセ?済み? 386 387 // SELECT の 基本カラ??設? 388 data[ad++] = String.valueOf( lvl ) ; // LEVEL 389 data[ad++] = (isF) ? "F" : "D" ; // FILE_TYPE 390 data[ad++] = file.getParent() ; // PARENT 391 data[ad++] = file.getName() ; // NAME 392 data[ad++] = lastModified ; // LASTMODIFIED 393 data[ad++] = (isF) ? String.valueOf( file.length() ) : "" ; // FILE_LENGTH 394 data[ad++] = rwh ; // RWH 395 396 // MD5 カラ?追?ファイルの場合?み計算しま? 397 if( useMD5 && isF ) { 398 data[ad++] = HybsCryptography.getMD5( file ); 399 } 400 401 // useUpdateClms=true 時? TO_PARENT、TO_NAMEカラ?、addClmsの追?ラ??、?期?のみセ? 402 // 初期値セ?は、Arrays.copyOf で、defClms のコピ?で完?? 403 404 table.addColumnValues( data ); 405 406 // String[] data = new String[ SELECT.length + addClms.length ]; // 5.3.4.0 (2011/04/01) ?カラ??? 407 // data[LEVEL ] = String.valueOf( lvl ) ; 408 // data[FILE_TYPE ] = (file.isFile())?"F":"D" ; 409 // data[PARENT ] = file.getParent() ; 410 // data[NAME ] = file.getName() ; 411 // data[LASTMODIFIED ] = lastModified ; 412 // data[FILE_LENGTH ] = String.valueOf( file.length() ) ; 413 // data[RWH ] = rwh ; 414 // 415 // // これ以降? data 配?には、カラ?ブジェクト?初期値を設定しておく? 416 // int ad = SELECT.length; 417 // for( int i=0; i<addClms.length; i++ ) { 418 // data[ad++] = valClms[i]; 419 // } 420 421 // table.addColumnValues( data ); 422 } 423 catch( IOException ex ) { 424 String errMsg = "正式なファイル名?取得に失敗しました?" + fin + "]" 425 + " ROW=[" + rowNo + "]" 426 + HybsSystem.CR + ex.getMessage(); 427 throw new HybsSystemException( errMsg,ex ); 428 } 429 } 430 431 /** 432 * 【TAG】ファイルの検索?なるディレクトリを指定します? 433 * 434 * @og.tag ファイルの検索?なるディレクトリを指定します? 435 * 436 * @og.rev 4.0.0.0 (2007/11/20) ?された?レクトリ名??が"\"or"/"で終わって???合に?/"を付加する? 437 * 438 * @param url ファイルの検索?なるディレクトリ 439 */ 440 public void setFrom( final String url ) { 441 String furl = nval( getRequestParameter( url ),null ); 442 if( furl != null ) { 443 char ch = furl.charAt( furl.length()-1 ); 444 if( ch != '/' && ch != '\\' ) { furl = furl + "/"; } 445 } 446 furl = StringUtil.urlAppend( from,furl ); 447 furl = StringUtil.urlAppend( furl,"." ); 448 449 from = HybsSystem.url2dir( furl ); 450 } 451 452 /** 453 * 【TAG】多段階展開するか??レベル展開するかど?[true/false]を指定しま?初期値:false)? 454 * 455 * @og.tag 456 * 初期値は、false (?レベル) です? 457 * 458 * @param mlti 多段階展開する?[true:する/false:?レベル] 459 */ 460 public void setMulti( final String mlti ) { 461 multi = nval( getRequestParameter( mlti ),multi ); 462 } 463 464 /** 465 * 【TAG】多段階展開するレベルを指定しま?初期値:100)? 466 * 467 * @og.tag 468 * 469 * @param lvl 多段階展開するレベル 470 */ 471 public void setLevel( final String lvl ) { 472 level = nval( getRequestParameter( lvl ),level ); 473 } 474 475 /** 476 * 【TAG】ソートするカラ?を指定しま??のみ)? 477 * 478 * @og.tag 479 * ソートするカラ?を?"LEVEL","FILE_TYPE","PARENT","NAME","LASTMODIFIED","FILE_LENGTH","RWH" 480 * から?選びます? 481 * これは、?カラ?のソート?できません? 482 * ??にソートする?合?、desc属??true にセ?ください? 483 * + をつけても?無効(カラ?がな??ことでエラーになります? 484 * 485 * @og.rev 5.3.4.0 (2011/04/01) 新規追? 486 * 487 * @param clm ソートするカラ?(?のみ)????、?イナスを付ける? 488 * @see #setDesc( String ) 489 */ 490 public void setOrderBy( final String clm ) { 491 orderBy = nval( getRequestParameter( clm ),orderBy ); 492 493 if( orderBy != null && ! check( orderBy, SELECT ) ) { 494 String errMsg = "?? orderBy は、指定できません? + HybsSystem.CR 495 + "orderBy=[" + orderBy + "] " + HybsSystem.CR 496 + StringUtil.array2csv( SELECT ) + HybsSystem.CR ; 497 // throw new HybsSystemException( errMsg.toString() ); 498 throw new HybsSystemException( errMsg ); 499 } 500 } 501 502 /** 503 * 【TAG】表示??するかど?[true/false]を指定しま?初期値:false)? 504 * 505 * @og.tag 506 * orderBy 属?で?した表示????するかど?を指定できます? 507 * 初期値は、false (??) です? 508 * 509 * @og.rev 5.3.4.0 (2011/04/01) 新規追? 510 * 511 * @param flag 表示??するかど? [??:true/正?false] 512 * @see #setOrderBy( String ) 513 */ 514 public void setDesc( final String flag ) { 515 desc = nval( getRequestParameter( flag ),desc ); 516 } 517 518 /** 519 * 【TAG】?頭カラ?、WRITABLE カラ?追?るかど?[true/false]を指定しま?初期値:false)? 520 * 521 * @og.tag 522 * ファイル検索結果の?レコード単位に、書き込み許可/禁止属?を付けるには? 523 * カラ??の先?に、WRITABLE カラ?追?る?があります? 524 * 初期値は、false (追?な? です? 525 * 526 * @og.rev 5.7.4.3 (2014/03/28) 新規追? 527 * 528 * @param flag 先?カラ?、WRITABLE カラ?追?るかど?[true:追??false:追?ない] 529 */ 530 public void setUseWritable( final String flag ) { 531 useWritable = nval( getRequestParameter( flag ),useWritable ); 532 } 533 534 /** 535 * 【TAG】MD5カラ?追?たうえで、MD5計算を行うかど?[true/false]を指定しま?初期値:false)? 536 * 537 * @og.tag 538 * ファイルの改変等をチェ?するには、ファイルのハッシュ値を拾??があります? 539 * タイ?タンプとサイズ??ASTMODIFIED,FILE_LENGTH?でも?類似の処??可能ですが? 540 * より、厳???をみるなら?MD5でハッシュした結果を突き合わせるのが?ストです? 541 * useMD5=true に設定すると、MD5 と?カラ?追?たうえで、MD5計算結果をセ?します? 542 * 初期値は、false (追?な? です? 543 * 544 * @og.rev 5.7.4.3 (2014/03/28) 新規追? 545 * 546 * @param flag MD5カラ?追?たうえで、MD5計算を行うかど?[true:追??false:追?ない] 547 */ 548 public void setUseMD5( final String flag ) { 549 useMD5 = nval( getRequestParameter( flag ),useMD5 ); 550 } 551 552 /** 553 * 【TAG】TO_PARENT、TO_NAMEカラ?追?るかど?[true/false]を指定しま?初期値:false)? 554 * 555 * @og.tag 556 * fileUpdateタグでは、ファイルのCOPYやMOVEが?来ますが、そのコピ?先?移動?の 557 * ファイルを行ごとに?する?合?TO_PARENT、TO_NAMEカラ??固定名のカラ? 558 * ?です? 559 * これを?addClms 属?で?する代わりに、この属?で、true をセ?することで? 560 * 自動的に追?れます? 561 * 初期値は、false (追?な? です? 562 * 563 * @og.rev 5.3.4.0 (2011/04/01) 新規追? 564 * 565 * @param flag TO_PARENT、TO_NAMEカラ?追?るかど? [true:追??false:追?ない] 566 * @see #setAddClms( String ) 567 * @see org.opengion.hayabusa.taglib.FileUpdateTag 568 */ 569 public void setUseUpdateClms( final String flag ) { 570 useUpdateClms = nval( getRequestParameter( flag ),useUpdateClms ); 571 } 572 573 /** 574 * 【TAG】検索結果のカラ??に追?るカラ?を?カンマ区??で?します? 575 * 576 * @og.tag 577 * ?ォルト?カラ?、[WRITABLE],LEVEL,FILE_TYPE,PARENT,NAME,LASTMODIFIED,FILE_LENGTH,RWH,[MD5],[TO_PARENT,TO_NAME] 578 * 以外に、指定?カラ?を追?ることが可能です? 579 * これは、ファイル検索結果以外??を追?て、データベ?スに書き込??合に、利用できます? 580 * 並び??、デフォルトカラ??後ろに、指定?カラ???で付きます? 581 * ここで追?たカラ?は、カラ?ソースの初期値がセ?されます? 582 * 583 * @og.rev 5.3.4.0 (2011/04/01) 新規追? 584 * 585 * @param clms 検索結果のカラ??に追?るカラ?を?カンマ区??で?します? 586 * @see #setUseUpdateClms( String ) 587 */ 588 public void setAddClms( final String clms ) { 589 String tmpClms = nval( getRequestParameter( clms ),null ); 590 591 if( tmpClms != null && tmpClms.length() > 0 ) { 592 addClms = StringUtil.csv2Array( tmpClms ); 593 } 594 } 595 596 /** 597 * 【TAG】ファイル名が、指定されたファイルタイプ[DIR/FILE]と??した場合?スルー(選?されます? 598 * @og.tag 599 * 大?小文字?区別しません? 600 * ファイルタイ?は、DIR,FILE が指定できます? 601 * DIR は、ディレクトリのみ検索します?(階層下がりも行いま? 602 * FILEは、ファイルのみ検索します?(階層下がりも行いま? 603 * 引数?null の場合?、追?ません?つまり?すべてスルーされます?) 604 * 605 * @og.rev 5.3.4.0 (2011/04/01) fileType メソ?で選択対象??追? 606 * 607 * @param str ?するファイルタイ?DIR,FILE,null) 608 */ 609 public void setFileType( final String str ) { 610 String tmp = nval( getRequestParameter( str ),fileType ); 611 if( tmp == null || 612 "DIR".equalsIgnoreCase( tmp ) || 613 "FILE".equalsIgnoreCase( tmp ) ) { 614 fileType = tmp; 615 } 616 else { 617 // ファイルタイプに不正な値が設定された場合?、エラーになる? 618 String errMsg = "こ?、fileType 属?には、DIR,FILE 以外??できません?" 619 + tmp + "]"; 620 throw new HybsSystemException( errMsg ); 621 } 622 } 623 624 /** 625 * 【TAG】from属?で?された基準ファイル/フォル??体をリストに追?るかど?[true/false]を指定しま?初期値:true)? 626 * @og.tag 627 * 初期値はtrue(追??です? 628 * 629 * @og.rev 5.3.9.0 (2011/09/01) 新規作? 630 * 631 * @param flg 基準ファイル/フォル??体をリストに追?るかど? true:追??false:追?ない] 632 */ 633 public void setAddFrom( final String flg ) { 634 addFrom = nval( getRequestParameter( flg ),addFrom ); 635 } 636 637 /** 638 * FileFilterオブジェクトをセ?します? 639 * これは、BODY 部に登録した、FileWhereタグによって設定された 640 * ファイルフィルターです? 641 * 642 * @param filter オブジェク? 643 */ 644 protected void setFileFilter( final FileFilter filter ) { 645 this.filter = filter; 646 } 647 648 /** 649 * シリアライズ用のカスタ?リアライズ書き込みメソ? 650 * 651 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 652 * @serialData ?のオブジェクト?、シリアライズされません? 653 * 654 * @param strm ObjectOutputStreamオブジェク? 655 * @throws IOException シリアライズに関する入出力エラーが発生した?? 656 */ 657 private void writeObject( final ObjectOutputStream strm ) throws IOException { 658 strm.defaultWriteObject(); 659 } 660 661 /** 662 * シリアライズ用のカスタ?リアライズ読み込みメソ? 663 * 664 * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します? 665 * 666 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 667 * @serialData ?のオブジェクト?、シリアライズされません? 668 * 669 * @param strm ObjectInputStreamオブジェク? 670 * @see #release2() 671 * @throws IOException シリアライズに関する入出力エラーが発生した?? 672 * @throws ClassNotFoundException クラスを見つけることができなかった?? 673 */ 674 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 675 strm.defaultReadObject(); 676 } 677 678 /** 679 * こ?オブジェクト???表現を返します? 680 * 基本???目?使用します? 681 * 682 * @return こ?クラスの??表現 683 */ 684 @Override 685 public String toString() { 686 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 687 .println( "VERSION" ,VERSION ) 688 .println( "multi" ,multi ) 689 .println( "level" ,level ) 690 .println( "from" ,from ) 691 .fixForm().toString() 692 + HybsSystem.CR 693 + super.toString() ; 694 } 695 }