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 }