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    }