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
026 import static org.opengion.fukurou.util.StringUtil.nval ;
027
028 import java.util.Arrays;
029 import java.io.File;
030 import java.io.FileFilter;
031 import java.io.ObjectOutputStream;
032 import java.io.ObjectInputStream;
033 import java.io.IOException;
034
035 /**
036 * ファイルを検索しã?DBTableModel にセãƒ?ƒˆするタグですã?
037 *
038 * ファイルの検索結果はã€?LEVEL","FILE_TYPE","PARENT","NAME","LASTMODIFIED","FILE_LENGTH","RWH"
039 * のカラãƒ?‚’持つ DBTableModel にセãƒ?ƒˆ されますã?こã?カラãƒ??、固定ですã?
040 * 並び替えにつã�?�¦は、このタグでæŒ?®šしますが、ファイルの選別(where 条件)はã€?
041 * BODY 部に記述する fileWhere タグでæŒ?®šしますã?(è¤?•°æŒ?®š可能))
042 *
043 * [カラãƒ?��] 検索するファイルの属æ?は、以下ã?カラãƒ?��で作æ?されますã?
044 * LEVEL ãƒ?‚£レクトリを展開する場合ã?レベルã€?
045 * FILE_TYPE ファイル(F)かディレクトリ(D)であるか判定ã?
046 * PARENT こã?抽象パス名ã?親のパス名文字å?を返しますã?
047 * NAME こã?抽象パス名が示すファイルまたã?ãƒ?‚£レクトリの名前を返しますã?
048 * LASTMODIFIED æœ?¾Œに変更された時刻を返しますã?
049 * FILE_LENGTH ファイルの長さを返しますã?
050 * RWH 読み込み、書き込みã€?š し属æ?をそれぞれã???w,h で表しますã?
051 *
052 * [from 属æ?] 検索を開始するファイルまたã?ãƒ?‚£レクトリの名前
053 *
054 * [multi 属æ?] ãƒ?‚£レクトリを下位展開するかどã�?�‹??
055 * true 下位展開する
056 * false 下位展開しなã�?初期値)
057 *
058 * [tableId 属æ?] settion に登録する時ã?ID
059 * [scope 属æ?] settion に登録する時ã?スコーãƒ?"request","page","session","applicaton"
060 * [maxRowCount 属æ?] 検索時ã?æœ?¤§検索件数(初期値:DB_MAX_ROW_COUNT[=1000])(0:[無制限])
061 * [displayMsg 属æ?] 検索終äº?™‚に表示する メãƒ?‚»ージリソースのID
062 * [overflowMsg 属æ?] オーバã?フロー時に表示する メãƒ?‚»ージリソースのID
063 * [command 属æ?] 実行を制御するコマンãƒ?"NEW" と "RENEW" 時ã?み実行すã‚?初期値:NEW)
064 * [orderBy 属æ?] ソートするカラãƒ?‚’æŒ?®šしまã�?ä¸?�¤のみ)
065 * [desc 属æ?] é€??でソートするå?合に、true を指定しますã?
066 * [addClms 属æ?] 検索結果のカラãƒ??に追åŠ?�™るカラãƒ?��をã?カンマ区åˆ?‚Šæ–?—でæŒ?®šしますã?
067 * [useUpdateClms 属æ?] trueをセãƒ?ƒˆすると、fileUpdateで使用する TO_PARENT、TO_NAMEカラãƒ?‚’追åŠ?�—まã�?初期値:false)
068 * [fileType属æ?] 選択対象(FILE,DIR)を指定しますã?下位展開はè€??(multi 属æ?準拠)されますã?
069 * [addFrom属æ?] from属æ?でæŒ?®šされた基準ファイル/フォルãƒ??体をリストに追åŠ?�™るかどã�?�‹(初期値:true)
070 *
071 * @og.formSample
072 * ●形式ï¼?lt;og:fileQuery from="…" multi="true/false" >
073 * <og:fileWhere … />
074 * …
075 * </og:fileQuery>
076 * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
077 *
078 * ●Tag定義??
079 * <og:fileQuery
080 * from ○ã?TAG】ファイルの検索å…?�¨なるディレクトリを指定しまã�?å¿??)ã€?
081 * multi 【TAG】多段階展開するかã??‘レベル展開するかどã�?�‹[true/false]を指定しまã�?初期値:false)
082 * tableId 【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しまã�?
083 * level 【TAG】多段階展開するレベルを指定しまã�?初期値:100)
084 * orderBy 【TAG】ソートするカラãƒ?��を指定しまã�?ä¸?�¤のみ)
085 * desc 【TAG】表示é ?‚’é€?»¢するかどã�?�‹[true/false]を指定しまã�?初期値:false)
086 * addClms 【TAG】検索結果のカラãƒ??に追åŠ?�™るカラãƒ?��をã?カンマ区åˆ?‚Šæ–?—でæŒ?®šしまã�?
087 * useUpdateClms 【TAG】TO_PARENT、TO_NAMEカラãƒ?‚’追åŠ?�™るかどã�?�‹[true/false]を指定しまã�?初期値:false)
088 * fileType 【TAG】ファイル名が、指定されたファイルタイプとä¸??した場合ã?スルー(選æŠ?されまã�?
089 * addFrom 【TAG】from属æ?でæŒ?®šされた基準ファイル/フォルãƒ??体をリストに追åŠ?�™るかどã�?�‹[true/false]を指定しまã�?初期値:true)
090 * command 【TAG】コマンãƒ?NEW,RENEW)をセãƒ?ƒˆしまã�?PlsqlUpdateTag,UpdateTag の場合ã?、ENTRY)
091 * maxRowCount 【TAGã€?通常は使ã�?�¾せん)ãƒ??タのæœ?¤§読み込み件数を指定しまã�?(初期値:DB_MAX_ROW_COUNT[=1000])
092 * displayMsg 【TAG】検索結果を画面上に表示するメãƒ?‚»ージリソースIDを指定しまã�?(初期値:VIEW_DISPLAY_MSG[=])
093 * notfoundMsg 【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])
094 * scope 【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
095 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
096 * > ... Body ...
097 * </og:fileQuery>
098 *
099 * ●使用ä¾?
100 * ・ä¸?ˆ¬çš?�ª属æ?でファイルの検索を行いますã?
101 * <og:fileQuery
102 * from = "d:/webapps/dbdef/jsp/"
103 * multi = "true"
104 * command = "{@command}" >
105 * <og:fileWhere endWith=".jsp" />
106 * </og:fileQuery>
107 *
108 * ・æœ?µ‚変更日でé€??ソートするã?対象はã€?002/10/01 以降に変更されたファイルã€?
109 * <og:fileQuery
110 * from = "d:/webapps/dbdef/jsp/"
111 * multi = "true"
112 * orderBy = "LASTMODIFIED"
113 * desc = "true"
114 * command = "{@command}" >
115 * <og:fileWhere lastModified="20021001000000" />
116 * </og:fileQuery>
117 *
118 * @og.rev 4.0.0.0 (2005/01/31) å†?ƒ¨ロジãƒ?‚¯改å®?
119 * @og.group そã?他å?åŠ?
120 *
121 * @version 4.0
122 * @author Kazuhiko Hasegawa
123 * @since JDK5.0,
124 */
125 public class FileQueryTag extends QueryTag {
126 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
127 private static final String VERSION = "5.3.9.0 (2011/09/01)" ;
128
129 private static final long serialVersionUID = 539020110901L ;
130
131 private static final String[] SELECT =
132 new String[] { "LEVEL","FILE_TYPE","PARENT","NAME","LASTMODIFIED","FILE_LENGTH","RWH" };
133
134 private static final int LEVEL = 0;
135 private static final int FILE_TYPE = 1;
136 private static final int PARENT = 2;
137 private static final int NAME = 3;
138 private static final int LASTMODIFIED = 4;
139 private static final int FILE_LENGTH = 5;
140 private static final int RWH = 6;
141
142 private static final String[] USE_UPDATE_CLM = new String[] { "TO_PARENT","TO_NAME" }; // 5.3.4.0 (2011/04/01)
143
144 private transient FileFilter filter = null; // FileWhere でæŒ?®šしたフィルター
145
146 private boolean multi = false; // 下位層展開?Œラク??
147 private int level = 100; // 展開?šベï¾?
148 private String from = HybsSystem.sys( "FILE_URL" ); // 検索起点?Œァ?²??
149 private String orderBy = null; // 5.3.4.0 (2011/04/01) ソートカラãƒ?
150 private boolean desc = false; // 5.3.4.0 (2011/04/01) ソートã?方å�?true:é€??)
151 private String[] addClms = new String[0]; // 5.3.4.0 (2011/04/01) 追åŠ?‚«ラãƒ??åˆ?
152 private String[] valClms = null; // 5.3.4.0 (2011/04/01) 追åŠ?‚«ラãƒ??列ã?初期値
153 private String fileType = null; // 5.3.4.0 (2011/04/01) 選択対象を指å®?FILE,DIR)
154 private boolean useUpdateClms = false; // 5.3.4.0 (2011/04/01) TO_PARENT、TO_NAMEカラãƒ?‚’追åŠ?true:追åŠ?
155 private boolean addFrom = true; // 5.3.9.0 (2011/09/01) from属æ?でæŒ?®šされた基準ファイル/フォルãƒ??体をリストに追åŠ?�™るかどã�?�‹
156
157 /**
158 * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
159 *
160 * @og.rev 5.3.4.0 (2011/04/01) æŒ?®šカラãƒ??ソートå?ç�?©Ÿè?追åŠ?
161 * @og.rev 5.3.5.0 (2011/05/01) æœ??のファイルが存在する場合ã?み、実行するã?
162 *
163 * @return 後続å?ç�??æŒ?¤º(SKIP_BODY)
164 */
165 @Override
166 public int doAfterBody() {
167 executeCount = 0;
168
169 table = initDBTable();
170 if( maxRowCount < 0 ) {
171 maxRowCount = sysInt( "DB_MAX_ROW_COUNT" ) ;
172 }
173
174 // execute( new File( from ),0 ) ; // 5.3.5.0 (2011/05/01) å»?¢
175
176 // 5.3.5.0 (2011/05/01) æœ??のファイルが存在する場合ã?み、実行するã?
177 File fin = new File( from );
178 if( fin.exists() ) {
179 execute( fin,0 ) ;
180
181 // 5.3.4.0 (2011/04/01) æŒ?®šカラãƒ??ソートå?ç�?
182 if( orderBy != null ) {
183 int clmNo = table.getColumnNo( orderBy );
184 DBTableModelSorter temp = new DBTableModelSorter();
185 temp.setModel( table );
186 temp.sortByColumn( clmNo,!desc ); // 注æ„?desc の値と ソート正é€??、反対ですã?
187 table = temp;
188 }
189 }
190
191 return(SKIP_BODY);
192 }
193
194 /**
195 * タグリブオブジェクトをリリースしますã?
196 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
197 *
198 * @og.rev 5.3.4.0 (2011/04/01) æŒ?®šカラãƒ??ソートå?ç�?©Ÿè?、カラãƒ?¿½åŠ?©Ÿè?、fileType追åŠ?
199 * @og.rev 5.3.9.0 (2011/09/01) addFrom属æ?追åŠ?
200 */
201 @Override
202 protected void release2() {
203 super.release2();
204 multi = false;
205 level = 100;
206 from = HybsSystem.sys( "FILE_URL" );
207 filter = null;
208 orderBy = null; // 5.3.4.0 (2011/04/01) ソートカラãƒ?
209 desc = false; // 5.3.4.0 (2011/04/01) 降é??Œラク??
210 addClms = new String[0]; // 5.3.4.0 (2011/04/01) 追åŠ?‚«ラãƒ??åˆ?
211 valClms = null; // 5.3.4.0 (2011/04/01) 追åŠ?‚«ラãƒ??列ã?初期値
212 fileType = null; // 5.3.4.0 (2011/04/01) 選択対象を指å®?FILE,DIR,ALL)
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 * @og.rev 5.3.4.0 (2011/04/01) æŒ?®šカラãƒ?¿½åŠ?©Ÿè?追åŠ?
256 *
257 * @return ãƒ??ブルモãƒ?ƒ«
258 */
259 private DBTableModel initDBTable() {
260 DBTableModel tbl = DBTableModelUtil.newDBTable();
261
262 // TO_PARENT、TO_NAMEカラãƒ?‚’追åŠ?
263 int clmSize = addClms.length ;
264 if( useUpdateClms ) {
265 if( clmSize == 0 ) {
266 addClms = USE_UPDATE_CLM ;
267 }
268 else {
269 addClms = Arrays.copyOf( addClms ,clmSize + USE_UPDATE_CLM.length ); // JDK1.6
270 for( int i=0; i<USE_UPDATE_CLM.length; i++ ) {
271 addClms[clmSize+i] = USE_UPDATE_CLM[i];
272 }
273 }
274 }
275 valClms = new String[addClms.length];
276
277 tbl.init( SELECT.length + addClms.length );
278 int ad=0;
279 for( int i=0; i<SELECT.length; i++ ) {
280 DBColumn dbColumn = getDBColumn( SELECT[i] );
281 tbl.setDBColumn( ad++,dbColumn );
282 }
283
284 for( int i=0; i<addClms.length; i++ ) {
285 DBColumn dbColumn = getDBColumn( addClms[i] );
286 valClms[i] = dbColumn.getDefault(); // 初期値を指定しておく
287 tbl.setDBColumn( ad++,dbColumn );
288 }
289
290 return tbl ;
291 }
292
293 /**
294 * DBTableModel に、ファイルæƒ??をセãƒ?ƒˆしますã?
295 * ファイルæƒ??はã€?LEVEL","FILE_TYPE","PARENT","NAME","LASTMODIFIED","FILE_LENGTH","RWH" ですã?
296 *
297 * @og.rev 5.3.4.0 (2011/04/01) æŒ?®šカラãƒ?¿½åŠ?©Ÿè?追åŠ?
298 *
299 * @param rowNo セãƒ?ƒˆする行番号
300 * @param lvl セãƒ?ƒˆするレベル
301 * @param fin ファイルæƒ??のå…?�¨なるファイルオブジェクãƒ?
302 */
303 private void addFileData( final int rowNo,final int lvl,final File fin ) {
304 try {
305 File file = fin.getCanonicalFile();
306
307 String rwh = ((file.canRead())?"r":"-" ) +
308 ((file.canWrite())?"w":"-" ) +
309 ((file.isHidden())?"h":"-" ) ;
310
311 String lastModified = HybsSystem.getDate( file.lastModified(),"yyyyMMddHHmmss" );
312
313 String[] data = new String[ SELECT.length + addClms.length ]; // 5.3.4.0 (2011/04/01) æŒ?®šカラãƒ?¿½åŠ?©Ÿè?
314 data[LEVEL ] = String.valueOf( lvl ) ;
315 data[FILE_TYPE ] = (file.isFile())?"F":"D" ;
316 data[PARENT ] = file.getParent() ;
317 data[NAME ] = file.getName() ;
318 data[LASTMODIFIED ] = lastModified ;
319 data[FILE_LENGTH ] = String.valueOf( file.length() ) ;
320 data[RWH ] = rwh ;
321
322 // これ以降ã? data 配å?には、カラãƒ?‚ªブジェクトã?初期値を設定しておくã€?
323 int ad = SELECT.length;
324 for( int i=0; i<addClms.length; i++ ) {
325 data[ad++] = valClms[i];
326 }
327
328 table.addColumnValues( data );
329 }
330 catch( IOException ex ) {
331 String errMsg = "正式なファイル名ã?取得に失敗しましたã€?" + fin + "]"
332 + " ROW=[" + rowNo + "]"
333 + HybsSystem.CR + ex.getMessage();
334 throw new HybsSystemException( errMsg,ex );
335 }
336 }
337
338 /**
339 * 【TAG】ファイルの検索å…?�¨なるディレクトリを指定しますã?
340 *
341 * @og.tag ファイルの検索å…?�¨なるディレクトリを指定しますã?
342 *
343 * @og.rev 4.0.0.0 (2007/11/20) æŒ?®šされたãƒ?‚£レクトリ名ã?æœ?¾Œが"\"or"/"で終わってã�?�ªã�??合にã€?/"を付加するã€?
344 *
345 * @param url ファイルの検索å…?�¨なるディレクトリ
346 */
347 public void setFrom( final String url ) {
348 String furl = nval( getRequestParameter( url ),null );
349 if( furl != null ) {
350 char ch = furl.charAt( furl.length()-1 );
351 if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
352 }
353 furl = StringUtil.urlAppend( from,furl );
354 furl = StringUtil.urlAppend( furl,"." );
355
356 from = HybsSystem.url2dir( furl );
357 }
358
359 /**
360 * 【TAG】多段階展開するかã??‘レベル展開するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
361 *
362 * @og.tag
363 * 初期値は、false (?‘レベル) ですã?
364 *
365 * @param mlti 多段階展開するã�?[true:する/false:?‘レベル]
366 */
367 public void setMulti( final String mlti ) {
368 multi = nval( getRequestParameter( mlti ),multi );
369 }
370
371 /**
372 * 【TAG】多段階展開するレベルを指定しまã�?初期値:100)ã€?
373 *
374 * @og.tag
375 *
376 * @param lvl 多段階展開するレベル
377 */
378 public void setLevel( final String lvl ) {
379 level = nval( getRequestParameter( lvl ),level );
380 }
381
382 /**
383 * 【TAG】ソートするカラãƒ?��を指定しまã�?ä¸?�¤のみ)ã€?
384 *
385 * @og.tag
386 * ソートするカラãƒ?��をã?"LEVEL","FILE_TYPE","PARENT","NAME","LASTMODIFIED","FILE_LENGTH","RWH"
387 * からä¸?�¤選びますã?
388 * これは、è¤?•°カラãƒ?�§のソートã?できませんã€?
389 * é€??にソートするå?合ã?、desc属æ?ã‚?true にセãƒ?ƒˆくださいã€?
390 * + をつけてもã?無効(カラãƒ?��がなã�?�¨ã�?�†ことでエラーになりますã?
391 *
392 * @og.rev 5.3.4.0 (2011/04/01) 新規追åŠ?
393 *
394 * @param clm ソートするカラãƒ?��(ä¸?�¤のみ)ã€??é ??、ã?イナスを付けるã?
395 * @see #setDesc( String )
396 */
397 public void setOrderBy( final String clm ) {
398 orderBy = nval( getRequestParameter( clm ),orderBy );
399
400 if( orderBy != null && ! check( orderBy, SELECT ) ) {
401 String errMsg = "æŒ?®šã? orderBy は、指定できませんã€? + HybsSystem.CR
402 + "orderBy=[" + orderBy + "] " + HybsSystem.CR
403 + StringUtil.array2csv( SELECT ) + HybsSystem.CR ;
404 // throw new HybsSystemException( errMsg.toString() );
405 throw new HybsSystemException( errMsg );
406 }
407 }
408
409 /**
410 * 【TAG】表示é ?‚’é€?»¢するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
411 *
412 * @og.tag
413 * orderBy 属æ?でæŒ?®šした表示é ?‚’ã€??é ?�«するかどã�?�‹を指定できますã?
414 * 初期値は、false (æ˜??) ですã?
415 *
416 * @og.rev 5.3.4.0 (2011/04/01) 新規追åŠ?
417 *
418 * @param flag 表示é ?‚’é€?»¢するかどã�?�‹ [é€??:true/正é ?false]
419 * @see #setOrderBy( String )
420 */
421 public void setDesc( final String flag ) {
422 desc = nval( getRequestParameter( flag ),desc );
423 }
424
425 /**
426 * 【TAG】検索結果のカラãƒ??に追åŠ?�™るカラãƒ?��をã?カンマ区åˆ?‚Šæ–?—でæŒ?®šしますã?
427 *
428 * @og.tag
429 * ãƒ?ƒ•ォルトã?カラãƒ?��ã€?LEVEL","FILE_TYPE","PARENT","NAME","LASTMODIFIED","FILE_LENGTH","RWH"
430 * 以外に、指定ã?カラãƒ?��を追åŠ?�™ることが可能ですã?
431 * これは、ファイル検索結果以外ã?é ?›®を追åŠ?�—て、データベã?スに書き込ã‚??合に、利用できますã?
432 * 並びé ??、デフォルトカラãƒ??後ろに、指定ã?カラãƒ??é ?•ªで付きますã?
433 * ここで追åŠ?�—たカラãƒ?�«は、å?はセãƒ?ƒˆされてã�?�¾せん。よって、ソート対象のカラãƒ?�«も指定できませんã€?
434 *
435 * @og.rev 5.3.4.0 (2011/04/01) 新規追åŠ?
436 *
437 * @param clms 検索結果のカラãƒ??に追åŠ?�™るカラãƒ?��をã?カンマ区åˆ?‚Šæ–?—でæŒ?®šしますã?
438 * @see #setUseUpdateClms( String )
439 */
440 public void setAddClms( final String clms ) {
441 String tmpClms = nval( getRequestParameter( clms ),null );
442
443 if( tmpClms != null && tmpClms.length() > 0 ) {
444 addClms = StringUtil.csv2Array( tmpClms );
445 }
446 }
447
448 /**
449 * 【TAG】TO_PARENT、TO_NAMEカラãƒ?‚’追åŠ?�™るかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
450 *
451 * @og.tag
452 * fileUpdateタグでは、ファイルのCOPYやMOVEがå?来ますが、そのコピã?先ã?移動å?の
453 * ファイルを行ごとにæŒ?®šするå?合ã?TO_PARENT、TO_NAMEカラãƒ?�¨ã�?�†固定名のカラãƒ?�Œ
454 * å¿?¦�ですã?
455 * これをã?addClms 属æ?でæŒ?®šする代わりに、この属æ?で、true をセãƒ?ƒˆすることでã€?
456 * 自動的に追åŠ?�•れますã?
457 * 初期値は、false (追åŠ?�—なã�? ですã?
458 *
459 * @og.rev 5.3.4.0 (2011/04/01) 新規追åŠ?
460 *
461 * @param flag TO_PARENT、TO_NAMEカラãƒ?‚’追åŠ?�™るかどã�?�‹ [true:追åŠ?�™ã‚?false:追åŠ?�—ない]
462 * @see #setAddClms( String )
463 */
464 public void setUseUpdateClms( final String flag ) {
465 useUpdateClms = nval( getRequestParameter( flag ),useUpdateClms );
466 }
467
468 /**
469 * 【TAG】ファイル名が、指定されたファイルタイプとä¸??した場合ã?スルー(選æŠ?されますã?
470 * @og.tag
471 * 大æ–?—小文字ã?区別しませんã€?
472 * ファイルタイãƒ?は、DIR,FILE が指定できますã?
473 * DIR は、ディレクトリのみ検索しますã?(階層下がりも行いまã�?
474 * FILEは、ファイルのみ検索しますã?(階層下がりも行いまã�?
475 * 引数ã�?null の場合ã?、追åŠ?�—ませんã€?つまりã?すべてスルーされますã?)
476 *
477 * @og.rev 5.3.4.0 (2011/04/01) fileType メソãƒ?ƒ‰で選択対象æŒ?®šã?追åŠ?
478 *
479 * @param str æŒ?®šするファイルタイãƒ?DIR,FILE,null)
480 */
481 public void setFileType( final String str ) {
482 String tmp = nval( getRequestParameter( str ),fileType );
483 if( tmp == null ||
484 "DIR".equalsIgnoreCase( tmp ) ||
485 "FILE".equalsIgnoreCase( tmp ) ) {
486 fileType = tmp;
487 }
488 else {
489 // ファイルタイプに不正な値が設定された場合ã?、エラーになるã?
490 String errMsg = "こã?、fileType 属æ?には、DIR,FILE 以外ã?æŒ?®šできませんã€?"
491 + tmp + "]";
492 throw new HybsSystemException( errMsg );
493 }
494 }
495
496 /**
497 * 【TAG】from属æ?でæŒ?®šされた基準ファイル/フォルãƒ??体をリストに追åŠ?�™るかどã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
498 * @og.tag
499 * 初期値はtrue(追åŠ?�™ã‚?ですã?
500 *
501 * @og.rev 5.3.9.0 (2011/09/01) 新規作æ?
502 *
503 * @param flg 基準ファイル/フォルãƒ??体をリストに追åŠ?�™るかどã�?�‹ true:追åŠ?�™ã‚?false:追åŠ?�—ない]
504 */
505 public void setAddFrom( final String flg ) {
506 addFrom = nval( getRequestParameter( flg ),addFrom );
507 }
508
509 /**
510 * FileFilterオブジェクトをセãƒ?ƒˆしますã?
511 * これは、BODY 部に登録した、FileWhereタグによって設定された
512 * ファイルフィルターですã?
513 *
514 * @param filter オブジェクãƒ?
515 */
516 protected void setFileFilter( final FileFilter filter ) {
517 this.filter = filter;
518 }
519
520 /**
521 * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
522 *
523 * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
524 * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
525 *
526 * @param strm ObjectOutputStreamオブジェクãƒ?
527 * @throws IOException シリアライズに関する入出力エラーが発生したå?å�?
528 */
529 private void writeObject( final ObjectOutputStream strm ) throws IOException {
530 strm.defaultWriteObject();
531 }
532
533 /**
534 * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
535 *
536 * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
537 *
538 * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
539 * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
540 *
541 * @param strm ObjectInputStreamオブジェクãƒ?
542 * @see #release2()
543 * @throws IOException シリアライズに関する入出力エラーが発生したå?å�?
544 * @throws ClassNotFoundException クラスを見つけることができなかったå?å�?
545 */
546 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
547 strm.defaultReadObject();
548 }
549
550 /**
551 * こã?オブジェクトã?æ–?—å?表現を返しますã?
552 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
553 *
554 * @return こã?クラスのæ–?—å?表現
555 */
556 @Override
557 public String toString() {
558 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
559 .println( "VERSION" ,VERSION )
560 .println( "multi" ,multi )
561 .println( "level" ,level )
562 .println( "from" ,from )
563 .fixForm().toString()
564 + HybsSystem.CR
565 + super.toString() ;
566 }
567 }