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 */
016package org.opengion.hayabusa.taglib;
017
018import org.opengion.hayabusa.common.HybsSystemException;
019import org.opengion.fukurou.util.HybsFileFilter;
020import org.opengion.fukurou.util.ToString;                                              // 6.1.1.0 (2015/01/17)
021
022import static org.opengion.fukurou.util.StringUtil.nval ;
023
024/**
025 * fileOption でファイルを検索する場合の条件を指定するタグです。
026 *
027 * @og.formSample
028 * ●形式:<og:fileWhere name="…" startsWith="…" endsWith="…" … />
029 * ●body:なし
030 *
031 * ●Tag定義:
032 *   <og:fileWhere
033 *       startsWith         【TAG】指定された接頭辞で始まる場合、スルー(選択)されます(初期値:null)
034 *       unStartsWith       【TAG】(追加:7.2.6.0 (2020/06/30))指定された接頭辞で始まらない場合、スルー(選択)されます(初期値:null)
035 *       startsDir          【TAG】(追加:7.2.6.0 (2020/06/30))指定された接頭辞で始まるフォルダ場合、スルー(選択)されます(初期値:null)
036 *       unStartsDir        【TAG】(追加:7.2.6.0 (2020/06/30))指定された接頭辞で始まらないフォルダ場合、スルー(選択)されます(初期値:null)
037 *       endsWith           【TAG】指定された接頭辞で終わる場合、スルー(選択)されます(初期値:null)
038 *       unEndsWith         【TAG】(追加:7.2.6.0 (2020/06/30))指定された接頭辞で終わらない場合、スルー(選択)されます(初期値:null)
039 *       instr              【TAG】指定された文字列がファイル名に含まれる場合、スルー(選択)されます(初期値:null)
040 *       unInstr            【TAG】(追加:7.2.6.0 (2020/06/30))指定された文字列がファイル名に含まれない場合、スルー(選択)されます(初期値:null)
041 *       instrDir           【TAG】(追加:7.2.6.0 (2020/06/30))指定された文字列がフォルダ名に含まれる場合、スルー(選択)されます(初期値:null)
042 *       unInstrDir         【TAG】(追加:7.2.6.0 (2020/06/30))指定された文字列がフォルダ名に含まれない場合、スルー(選択)されます(初期値:null)
043 *   ×  equals             【廃止】ファイル名が一致する場合、スルー(選択)されます(初期値:null) 7.2.7.0 (2020/08/07)
044 *       fileEquals         【TAG】ファイル名が一致する場合、スルー(選択)されます(初期値:null) 7.2.7.0 (2020/08/07) 新規
045 *       unFileEquals       【TAG】(追加:7.2.6.0 (2020/06/30))ファイル名が一致しない場合、スルー(選択)されます(初期値:null)
046 *       matches            【TAG】ファイル名が、指定された正規表現と一致する場合、スルー(選択)されます(初期値:null)
047 *       unMatches          【TAG】ファイル名が、指定された正規表現と一致しない場合、スルー(選択)されます(初期値:null)
048 *       matchDir           【TAG】(追加:7.2.6.0 (2020/06/30))フォルダ名が、指定された正規表現と一致する場合、スルー(選択)されます(初期値:null)
049 *       unMatchDir         【TAG】(追加:7.2.6.0 (2020/06/30))フォルダ名が、指定された正規表現と一致しない場合、スルー(選択)されます(初期値:null)
050 *       lastModified       【TAG】指定のタイムスタンプ以後に変更されている場合、スルー(選択)されます(初期値:null)
051 *       unLastModified     【TAG】(追加:7.2.6.0 (2020/06/30))指定のタイムスタンプ以前に変更されている場合、スルー(選択)されます(初期値:null)
052 *       isLarger           【TAG】指定の大きさより大きいファイルの場合、スルー(選択)されます(初期値:null)
053 *       isSmaller          【TAG】指定の大きさより小さいファイルの場合、スルー(選択)されます(初期値:null)
054 *       isHidden           【TAG】true:HIDDENファイルのみ/false:NORMALファイルのみスルー(選択)されます(初期値:null)
055 *   ×  useDir             【廃止】(廃止:7.2.6.0 (2020/06/30))判定をファイルだけでなく、ディレクトリでも行うかどうかを指定[false:File/true:File+Dir/only:Dir](初期値:false)
056 *       ignoreCase         【TAG】大文字/小文字を区別しないかどうか[true/false]を指定します(初期値:false(区別する))
057 *       notEquals          【TAG】判定結果を反転させるかどうか[true/false]を指定します(初期値:false) 6.8.0.0 (2017/06/02)
058 *       caseKey            【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 6.8.0.0 (2017/06/02)
059 *       caseVal            【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 6.8.0.0 (2017/06/02)
060 *       caseNN             【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 6.8.0.0 (2017/06/02)
061 *       caseNull           【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 6.8.0.0 (2017/06/02)
062 *       caseIf             【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない) 6.8.0.0 (2017/06/02)
063 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
064 *   />
065 *
066 * ●使用例
067 *     <og:fileOption select="NAME" from="./jsp" >
068 *         <og:fileWhere
069 *             startsWith = "File"          :指定された接頭辞で始まる場合、選択される
070 *             endsWith   = ".java"         :指定された接頭辞で終わる場合、選択される
071 *             instr      = "Tag"           :指定された文字列がファイル名に含まれる場合、選択される
072 *             equalsName = "FileWhereTag.java" :ファイル名が一致する場合、選択される(大文字小文字は区別しない)
073 *             matches    = "File*Tag"      :ファイル名が、指定された正規表現と一致する場合、選択される(大文字小文字は区別しない)
074 *             unMatches  = "File*Tag"      :ファイル名が、指定された正規表現と一致しない場合、選択される(大文字小文字は区別しない)
075 *             lastModified = "20050101"    :指定のタイムスタンプ以後に変更された場合、選択される
076 *                                           日付けの指定は、YYYYMMDD 形式, TODAY , YESTERDAY が使用できます。
077 *             isLarger   = "1024"          :指定の大きさ(バイト単位)より大きいファイルの場合、選択される
078 *             isSmaller  = "1024"          :指定の大きさ(バイト単位)より小さいファイルの場合、選択される
079 *             isHidden   = "true"          :true:HIDDENファイルのみ選択される
080 *             useDir     = "false"         :(廃止)フィルタによる対象の絞込みをディレクトリにも適用するかどうか
081 *         />
082 *     </og:fileOption>
083 *
084 *       ・検索条件が入力された時
085 *         条件を満足して全てのファイルを列挙します。
086 *
087 *       ・検索条件が入力されなかった時
088 *         該当ディレクトリ内の全てのファイルを列挙します。
089 *
090 * @og.rev 2.1.1.0 (2002/11/11) 新規作成
091 * @og.rev 4.0.0.0 (2005/01/31) 内部ロジックの全面見直し
092 * @og.rev 7.2.6.0 (2020/06/30) 内部ロジックの全面見直し
093 * @og.group その他入力
094 *
095 * @version  7.2
096 * @author   Kazuhiko Hasegawa
097 * @since    JDK11.0,
098 */
099public class FileWhereTag extends CommonTagSupport {
100        /** このプログラムのVERSION文字列を設定します。   {@value} */
101        private static final String VERSION = "7.2.6.2 (2020/07/29)" ;
102        private static final long serialVersionUID = 726220200729L ;
103
104        private String  startsWith              ;               // 指定された接頭辞で始まる場合、選択される
105        private String  unStartsWith    ;               // (追加:7.2.6.0 (2020/06/30))指定された接頭辞で始まらない場合、スルー(選択)されます(初期値:null)
106        private String  startsDir               ;               // (追加:7.2.6.0 (2020/06/30))指定された接頭辞で始まるフォルダ場合、スルー(選択)されます(初期値:null)
107        private String  unStartsDir             ;               // (追加:7.2.6.0 (2020/06/30))指定された接頭辞で始まらないフォルダ場合、スルー(選択)されます(初期値:null)
108        private String  endsWith                ;               // 指定された接頭辞で終わる場合、選択される
109        private String  unEndsWith              ;               // (追加:7.2.6.0 (2020/06/30))指定された接頭辞で終わらない場合、スルー(選択)されます(初期値:null)
110        private String  instr                   ;               // 指定された文字列がファイル名に含まれる場合、選択される
111        private String  unInstr                 ;               // (追加:7.2.6.0 (2020/06/30))指定された文字列がファイル名に含まれない場合、スルー(選択)されます(初期値:null)
112        private String  instrDir                ;               // (追加:7.2.6.0 (2020/06/30))指定された文字列がフォルダ名に含まれる場合、スルー(選択)されます(初期値:null)
113        private String  unInstrDir              ;               // (追加:7.2.6.0 (2020/06/30))指定された文字列がフォルダ名に含まれない場合、スルー(選択)されます(初期値:null)
114        private String  fileEquals              ;               // ファイル名が一致する場合、選択される(大文字小文字は区別しない)
115        private String  unFileEquals    ;               // ファイル名が一致しない場合、選択される(大文字小文字は区別しない)
116        private String  matches                 ;               // ファイル名が、指定された正規表現と一致する場合、選択される(大文字小文字は区別しない)
117        private String  unMatches               ;               // ファイル名が、指定された正規表現と一致しない場合、選択される(大文字小文字は区別しない)
118        private String  matchDir                ;               // (追加:7.2.6.0 (2020/06/30))フォルダ名が、指定された正規表現と一致する場合、スルー(選択)されます(初期値:null)
119        private String  unMatchDir              ;               // (追加:7.2.6.0 (2020/06/30))フォルダ名が、指定された正規表現と一致しない場合、スルー(選択)されます(初期値:null)
120        private String  lastModified    ;               // 指定のタイムスタンプ以後に変更された場合、選択される
121        private String  unLastModified  ;               // (追加:7.2.6.0 (2020/06/30))指定のタイムスタンプ以前に変更されている場合、スルー(選択)されます(初期値:null)
122        private String  isLarger                ;               // 指定の大きさ(バイト単位)より大きいファイルの場合、選択される
123        private String  isSmaller               ;               // 指定の大きさ(バイト単位)より小さいファイルの場合、選択される
124        private String  isHidden                ;               // 5.7.5.0 (2014/04/04) true:HIDDENファイルのみ/false:NORMALファイルのみスルー(選択)されます
125//      private String  useDir  = "false";              // (廃止:7.2.6.0 (2020/06/30))6.4.0.2 (2015/12/11) useDIR 属性に、onlyパラメータを追加します[false:File/true:File+Dir/only:Dir]。
126        private boolean ignoreCase              ;               // 6.3.1.1 (2015/07/10) 大文字/小文字の区別なしで検索可能にするかどうか(初期値:false:区別する)
127        private boolean notEquals               ;               // 6.8.0.0 (2017/06/02) 判定結果を反転させて処理します。
128
129        /**
130         * デフォルトコンストラクター
131         *
132         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
133         */
134        public FileWhereTag() { super(); }              // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
135
136        /**
137         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
138         *
139         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
140         * @og.rev 5.1.2.0 (2010/01/01) unMatches メソッドで反転属性の追加
141         * @og.rev 5.3.9.0 (2011/09/01) useDir属性を追加
142         * @og.rev 5.6.6.0 (2013/07/05) unMatchesの引数間違いの訂正
143         * @og.rev 5.7.5.0 (2014/04/04) isHidden属性を追加します。
144         * @og.rev 6.3.1.1 (2015/07/10) メソッドチェーン化と、大文字/小文字の区別なし(ignoreCase=true)対応
145         * @og.rev 6.4.0.2 (2015/12/11) useDIR 属性に、onlyパラメータを追加します[false:File/true:File+Dir/only:Dir]。
146         * @og.rev 6.8.0.0 (2017/06/02) caseKey,caseVal,caseNN,caseNull 属性を追加
147         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
148         * @og.rev 7.2.6.2 (2020/07/29) unEquals対応忘れ
149         *
150         * @return      後続処理の指示
151         */
152        @Override
153        public int doEndTag() {
154                debugPrint();           // 4.0.0 (2005/02/28)
155
156                // 6.8.0.0 (2017/06/02) caseKey,caseVal,caseNN,caseNull 属性を追加
157                if( !useTag() ) { return EVAL_PAGE ; }
158
159                // 6.3.1.1 (2015/07/10) メソッドチェーン化と、大文字/小文字の区別なし(ignoreCase=true)対応
160                // 6.8.0.0 (2017/06/02) notEquals で、判定結果を反転させて処理します。
161//              final HybsFileFilter filter = new HybsFileFilter( useDir,ignoreCase,notEquals )
162                final HybsFileFilter filter = new HybsFileFilter( ignoreCase,notEquals )                        // 7.2.6.0 (2020/06/30) useDIR 属性 廃止
163                        .startsWith(    startsWith              )
164                        .startsWith(    unStartsWith, true  )   // 7.2.6.0 (2020/06/30)
165                        .startsDir(             startsDir               )               // 7.2.6.0 (2020/06/30)
166                        .startsDir(             unStartsDir     , true  )       // 7.2.6.0 (2020/06/30)
167                        .endsWith(              endsWith                )
168                        .endsWith(              unEndsWith      , true  )       // 7.2.6.0 (2020/06/30)
169                        .instr(                 instr                   )
170                        .instr(                 unInstr         , true  )       // 7.2.6.0 (2020/06/30)
171                        .instrDir(              instrDir        )                       // 7.2.6.0 (2020/06/30)
172                        .instrDir(              unInstrDir      , true  )       // 7.2.6.0 (2020/06/30)
173                        .fileEquals(    fileEquals              )
174                        .fileEquals(    unFileEquals, true      )       // 7.2.6.2 (2020/07/29) 対応忘れ
175                        .matches(               matches                 )
176                        .matches(               unMatches       , true )        // 7.2.6.0 (2020/06/30)
177                        .matchDir(              matchDir                )               // 7.2.6.0 (2020/06/30)
178                        .matchDir(              unMatchDir      , true  )       // 7.2.6.0 (2020/06/30)
179                        .lastModified(  lastModified    )
180                        .lastModified(  unLastModified  , true  )       // 7.2.6.0 (2020/06/30)
181                        .isLarger(              isLarger                )
182                        .isSmaller(             isSmaller               )
183                        .isHidden(              isHidden                );              // 5.7.5.0 (2014/04/04) 追加
184
185                // ファイルフィルタを追加
186                final FileQueryTag fileQuery = (FileQueryTag)findAncestorWithClass( this, FileQueryTag.class );
187                if( fileQuery != null ) {
188                        fileQuery.setFileFilter( filter );
189                        return EVAL_PAGE ;
190                }
191
192                final FileOptionTag fileOption = (FileOptionTag)findAncestorWithClass( this, FileOptionTag.class );
193                if( fileOption != null ) {
194                        fileOption.setFileFilter( filter );
195                        return EVAL_PAGE ;
196                }
197
198                // どちらにも属していなかった場合は、エラーになる。
199                final String errMsg = "この、FileWhereTag タグは、FileQueryTag か、FileOption の"
200                                        + "BODY 部にのみ、配置できます。(それ以外の箇所での使用はできません。)" ;
201                throw new HybsSystemException( errMsg );
202        }
203
204        /**
205         * タグリブオブジェクトをリリースします。
206         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
207         *
208         * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加
209         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
210         * @og.rev 4.0.0.0 (2005/01/31) 内部ロジックの全面見直し
211         * @og.rev 5.3.9.0 (2011/09/01) useDir属性追加
212         * @og.rev 5.7.4.3 (2014/03/28) isLarger,isSmaller属性を文字列に変更
213         * @og.rev 5.7.5.0 (2014/04/04) isHidden属性を追加
214         * @og.rev 6.3.1.1 (2015/07/10) 大文字/小文字の区別なし(ignoreCase=true)対応
215         * @og.rev 6.4.0.2 (2015/12/11) useDIR 属性に、onlyパラメータを追加します[false:File/true:File+Dir/only:Dir]。
216         * @og.rev 6.8.0.0 (2017/06/02) notEquals 属性追加 , useDir="false" の初期値設定
217         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
218         * @og.rev 7.2.6.2 (2020/07/29) unEquals対応忘れ
219         */
220        @Override
221        protected void release2() {
222                super.release2();
223                startsWith              = null;
224                unStartsWith    = null;         // 7.2.6.0 (2020/06/30)
225                startsDir               = null;         // 7.2.6.0 (2020/06/30)
226                unStartsDir             = null;         // 7.2.6.0 (2020/06/30)
227                endsWith                = null;
228                unEndsWith              = null;         // 7.2.6.0 (2020/06/30)
229                instr                   = null;
230                unInstr                 = null;         // 7.2.6.0 (2020/06/30)
231                instrDir                = null;         // 7.2.6.0 (2020/06/30)
232                unInstrDir              = null;         // 7.2.6.0 (2020/06/30)
233                fileEquals              = null;
234                unFileEquals    = null;         // 7.2.6.2 (2020/07/29) 対応忘れ
235                matches                 = null;
236                unMatches               = null;
237                matchDir                = null;         // 7.2.6.0 (2020/06/30)
238                unMatchDir              = null;         // 7.2.6.0 (2020/06/30)
239                lastModified    = null;
240                unLastModified  = null;         // 7.2.6.0 (2020/06/30)
241                isLarger                = null;         // 5.7.4.3 (2014/03/28) isLarger,isSmaller属性を文字列に変更
242                isSmaller               = null;         // 5.7.4.3 (2014/03/28) isLarger,isSmaller属性を文字列に変更
243                isHidden                = null;         // 5.7.5.0 (2014/04/04) isHidden属性を追加
244//              useDir                  = "false";      // 6.4.0.2 (2015/12/11) useDIR 属性に、onlyパラメータを追加 // 7.2.6.0 (2020/06/30) useDIR 属性 廃止
245                ignoreCase              = false;        // 大文字/小文字の区別
246                notEquals               = false;        // 6.8.0.0 (2017/06/02) notEquals 属性追加
247        }
248
249        /**
250         * 【TAG】指定された接頭辞で始まる場合、スルー(選択)されます(初期値:null)。
251         * @og.tag
252         * 引数が null の場合は、追加しません。
253         *
254         * @param    prefix 接頭辞
255         * @see java.lang.String#startsWith(String)
256         */
257        public void setStartsWith( final String prefix ) {
258                startsWith = nval( getRequestParameter( prefix ),startsWith );
259        }
260
261        /**
262         * 【TAG】指定された接頭辞で始まらない場合、スルー(選択)されます(初期値:null)。
263         * @og.tag
264         * 引数が null の場合は、追加しません。
265         *
266         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
267         *
268         * @param    prefix 接頭辞
269         * @see java.lang.String#startsWith(String)
270         */
271        public void setUnStartsWith( final String prefix ) {
272                unStartsWith = nval( getRequestParameter( prefix ),unStartsWith );
273        }
274
275        /**
276         * 【TAG】指定された接頭辞で始まるフォルダ場合、スルー(選択)されます(初期値:null)。
277         * @og.tag
278         * 引数が null の場合は、追加しません。
279         *
280         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
281         *
282         * @param    prefix 接頭辞
283         * @see java.lang.String#startsWith(String)
284         */
285        public void setStartsDir( final String prefix ) {
286                startsDir = nval( getRequestParameter( prefix ),startsDir );
287        }
288
289        /**
290         * 【TAG】指定された接頭辞で始まらないフォルダ場合、スルー(選択)されます(初期値:null)。
291         * @og.tag
292         * 引数が null の場合は、追加しません。
293         *
294         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
295         *
296         * @param    prefix 接頭辞
297         * @see java.lang.String#startsWith(String)
298         */
299        public void setUnStartsDir( final String prefix ) {
300                unStartsDir = nval( getRequestParameter( prefix ),unStartsDir );
301        }
302
303        /**
304         * 【TAG】指定された接頭辞で終わる場合、スルー(選択)されます(初期値:null)。
305         * @og.tag
306         * 引数が null の場合は、追加しません。
307         *
308         * @param    suffix 接尾辞
309         * @see java.lang.String#endsWith(String)
310         */
311        public void setEndsWith( final String suffix ) {
312                endsWith = nval( getRequestParameter( suffix ),endsWith );
313        }
314
315        /**
316         * 【TAG】指定された接頭辞で終わらない場合、スルー(選択)されます(初期値:null)。
317         * @og.tag
318         * 引数が null の場合は、追加しません。
319         *
320         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
321         *
322         * @param    suffix 接尾辞
323         * @see java.lang.String#endsWith(String)
324         */
325        public void setUnEndsWith( final String suffix ) {
326                unEndsWith = nval( getRequestParameter( suffix ),unEndsWith );
327        }
328
329        /**
330         * 【TAG】指定された文字列がファイル名に含まれる場合、スルー(選択)されます(初期値:null)。
331         * @og.tag
332         * 引数が null の場合は、追加しません。
333         *
334         * @param    str 指定の部分文字列
335         */
336        public void setInstr( final String str ) {
337                instr = nval( getRequestParameter( str ),instr );
338        }
339
340        /**
341         * 【TAG】指定された文字列がファイル名に含まれない場合、スルー(選択)されます(初期値:null)。
342         * @og.tag
343         * 引数が null の場合は、追加しません。
344         *
345         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
346         *
347         * @param    str 指定の部分文字列
348         * @see java.lang.String#endsWith(String)
349         */
350        public void setUnInstr( final String str ) {
351                unInstr = nval( getRequestParameter( str ),unInstr );
352        }
353
354        /**
355         * 【TAG】指定された文字列がフォルダ名に含まれる場合、スルー(選択)されます(初期値:null)。
356         * @og.tag
357         * 引数が null の場合は、追加しません。
358         *
359         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
360         *
361         * @param    str 指定の部分文字列
362         * @see java.lang.String#endsWith(String)
363         */
364        public void setInstrDir( final String str ) {
365                instrDir = nval( getRequestParameter( str ),instrDir );
366        }
367
368        /**
369         * 【TAG】指定された文字列がフォルダ名に含まれない場合、スルー(選択)されます(初期値:null)。
370         * @og.tag
371         * 引数が null の場合は、追加しません。
372         *
373         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
374         *
375         * @param    str 指定の部分文字列
376         * @see java.lang.String#endsWith(String)
377         */
378        public void setUnInstrDir( final String str ) {
379                unInstrDir = nval( getRequestParameter( str ),unInstrDir );
380        }
381
382        /**
383         * 【TAG】ファイル名が一致する場合、スルー(選択)されます(初期値:null)。
384         * @og.tag
385         * 大文字小文字は区別しません。
386         * 引数が null の場合は、追加しません。
387         *
388         * @param    str ファイル名文字列
389         * @see java.lang.String#equals(Object)
390         */
391//      public void setEquals( final String str ) {
392        public void setFileEquals( final String str ) {
393                fileEquals = nval( getRequestParameter( str ),fileEquals );
394        }
395
396        /**
397         * 【TAG】ファイル名が一致しない場合、スルー(選択)されます(初期値:null)。
398         * @og.tag
399         * 大文字小文字は区別しません。
400         * 引数が null の場合は、追加しません。
401         *
402         * @og.rev 7.2.6.2 (2020/07/29) unEquals対応忘れ
403         *
404         * @param    str ファイル名文字列
405         * @see java.lang.String#equals(Object)
406         */
407//      public void setUnEquals( final String str ) {
408        public void setUnFileEquals( final String str ) {
409                unFileEquals = nval( getRequestParameter( str ),unFileEquals );
410        }
411
412        /**
413         * 【TAG】ファイル名が、指定された正規表現と一致する場合、スルー(選択)されます(初期値:null)。
414         * @og.tag
415         *
416         * ignoreCase を使用する場合、Pattern.CASE_INSENSITIVE を適用します。
417         * Pattern.compile( str,Pattern.CASE_INSENSITIVE ) ;
418         * pattern.matcher( pathname.getName() ).find() == true と同じ結果が得られます。
419         * 引数が null の場合は、追加しません。
420         *
421         * @param    str ファイル名文字列(正規表現)
422         * @see java.util.regex.Pattern#compile(String,int)
423         * @see java.util.regex.Matcher#find()
424         */
425        public void setMatches( final String str ) {
426                matches = nval( getRequestParameter( str ),matches );
427        }
428
429        /**
430         * 【TAG】ファイル名が、指定された正規表現と一致しない場合、スルー(選択)されます(初期値:null)。
431         * @og.tag
432         *
433         * ignoreCase を使用する場合、Pattern.CASE_INSENSITIVE を適用します。
434         * Pattern.compile( str,Pattern.CASE_INSENSITIVE ) ;
435         * pattern.matcher( pathname.getName() ).find() == false と同じ結果が得られます。
436         * 引数が null の場合は、追加しません。
437         *
438         * @param    str ファイル名文字列(不一致させる正規表現)
439         * @see java.util.regex.Pattern#compile(String,int)
440         * @see java.util.regex.Matcher#find()
441         */
442        public void setUnMatches( final String str ) {
443                unMatches = nval( getRequestParameter( str ),unMatches );
444        }
445
446        /**
447         * 【TAG】フォルダ名が、指定された正規表現と一致する場合、スルー(選択)されます(初期値:null)。
448         * @og.tag
449         *
450         * ignoreCase を使用する場合、Pattern.CASE_INSENSITIVE を適用します。
451         * Pattern.compile( str,Pattern.CASE_INSENSITIVE ) ;
452         * pattern.matcher( pathname.getName() ).find() == true と同じ結果が得られます。
453         * 引数が null の場合は、追加しません。
454         *
455         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
456         *
457         * @param    str ファイル名文字列(正規表現)
458         * @see java.util.regex.Pattern#compile(String,int)
459         * @see java.util.regex.Matcher#find()
460         */
461        public void setMatchDir( final String str ) {
462                matchDir = nval( getRequestParameter( str ),matchDir );
463        }
464
465        /**
466         * 【TAG】フォルダ名が、指定された正規表現と一致しない場合、スルー(選択)されます(初期値:null)。
467         * @og.tag
468         *
469         * ignoreCase を使用する場合、Pattern.CASE_INSENSITIVE を適用します。
470         * Pattern.compile( str,Pattern.CASE_INSENSITIVE ) ;
471         * pattern.matcher( pathname.getName() ).find() == true と同じ結果が得られます。
472         * 引数が null の場合は、追加しません。
473         *
474         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
475         *
476         * @param    str ファイル名文字列(正規表現)
477         * @see java.util.regex.Pattern#compile(String,int)
478         * @see java.util.regex.Matcher#find()
479         */
480        public void setUnMatchDir( final String str ) {
481                unMatchDir = nval( getRequestParameter( str ),unMatchDir );
482        }
483
484        /**
485         * 【TAG】指定のタイムスタンプ以後に変更されている場合、スルー(選択)されます(初期値:null)。
486         * @og.tag
487         * ディレクトリは、ここの判定では無視します。(必ず true を返します)
488         * 日付けの指定に、YYYYMMDD 形式の 8文字数字文字列以外に、
489         * TODAY や YESTERDAY なども使用できます。
490         * TODAY は、実行日の 00:00:00 を基準時刻とし、YESTERDAY は、その前日になります。
491         * 引数が null の場合は、追加しません。
492         *
493         *     YYYYMMDD   YYYYMMDD形式の指定日の 00:00:00 を基準時刻
494         *     TODAY      実行日の 00:00:00 を基準時刻
495         *     YESTERDAY  実行日前日の 00:00:00 を基準時刻
496         *     LAST_WEEK  実行日の先週(7日前) 00:00:00 を基準時刻
497         *     MONTH      実行月の 1日 00:00:00 を基準時刻
498         *     LAST_MONTH 実行前月の 同日 00:00:00 を基準時刻
499         *     LAST_YEAR  実行前年の 同月同日 00:00:00 を基準時刻
500         *
501         * @param    modify YYYYMMDD形式の指定日
502         */
503        public void setLastModified( final String modify ) {
504                lastModified = nval( getRequestParameter( modify ),lastModified );
505        }
506
507        /**
508         * 【TAG】指定のタイムスタンプ以前に変更されている場合、スルー(選択)されます(初期値:null)。
509         * @og.tag
510         * ディレクトリは、ここの判定では無視します。(必ず true を返します)
511         * 日付けの指定のフォーマットは、lastModifiedと同じ記号が使用できます。
512         *     LAST_YEAR  実行前年の 同月同日 00:00:00 を基準時刻
513         *
514         * @param    modify YYYYMMDD形式の指定日
515         */
516        public void setUnLastModified( final String modify ) {
517                unLastModified = nval( getRequestParameter( modify ),unLastModified );
518        }
519
520        /**
521         * 【TAG】指定の大きさより大きいファイルの場合、スルー(選択)されます(初期値:null)。
522         *
523         * @og.tag
524         * ファイルの大きさ(バイト単位)は同値を含みます。
525         * 未指定の場合は、スルー(選択)されます。
526         *
527         * 指定はバイト単位ですが、**KB , **MB , **GB などの単位を付ける事も可能です。
528         * 現時点では、K , KB , M , MB , G , GB のみ指定可能です。
529         *
530         * @param       len     ファイルの大きさ(バイト単位)
531         */
532        public void setIsLarger( final String len ) {
533                isLarger = nval( getRequestParameter( len ),isLarger );
534        }
535
536        /**
537         * 【TAG】指定の大きさより小さいファイルの場合、スルー(選択)されます(初期値:null)。
538         *
539         * @og.tag
540         * ファイルの大きさ(バイト単位)は同値を含みません。
541         * 未指定の場合は、スルー(選択)されます。
542         *
543         * 指定はバイト単位ですが、**KB , **MB , **GB などの単位を付ける事も可能です。
544         * 現時点では、K , KB , M , MB , G , GB のみ指定可能です。
545         *
546         * @param       len     ファイルの大きさ(バイト単位)
547         */
548        public void setIsSmaller( final String len ) {
549                isSmaller = nval( getRequestParameter( len ),isSmaller );
550        }
551
552        /**
553         * 【TAG】対象に隠しファイル(hidden)を、スルー(選択)する場合、true を指定します(初期値:null)。
554         * @og.tag
555         * trueを指定すると、隠しファイル(hidden)のみ選択します。
556         * falseを指定すると、隠しファイル(hidden)以外を選択します。
557         * 隠しファイルかどうかの定義はOSに従います。
558         * 初期値は、両方とも選択する為、null (trueでもfalseでもない)です。
559         *
560         * @og.rev 5.7.5.0 (2014/04/04) 新規作成
561         *
562         * @param    flag hidden対象 [true:する/false:しない]
563         */
564        public void setIsHidden( final String flag ) {
565                isHidden = nval( getRequestParameter( flag ), isHidden );
566        }
567
568        /**
569         * 【廃止】フィルタによる対象の絞込みをディレクトリにも適用するかどうか[false:File/true:File+Dir/only:Dir]を指定します(初期値:false:しない)。
570         *
571         * @og.tag
572         * このフラグは、設定したすべての属性に対して一律に作用します。
573         * 個々に適用するには、それぞれの属性のxxxDir などを使用してください。
574         * 初期値は、false(ディレクトリはフィルタによる絞込みをしない)です。
575         *
576         * @og.rev 5.3.9.0 (2011/09/01) 新規作成
577         * @og.rev 6.4.0.2 (2015/12/11) useDIR 属性に、onlyパラメータを追加します[false:File/true:File+Dir/only:Dir]。
578         * @og.rev 7.2.6.0 (2020/06/30) ディレクトリ処理を統一します。
579         *
580         * @param       flag    ディレクトリ適用 [true:する/false:しない]
581         */
582        public void setUseDir( final String flag ) {
583//              useDir = nval( getRequestParameter( flag ),useDir );
584        }
585
586        /**
587         * 【TAG】大文字/小文字を区別しないかどうか[true/false]を指定します(初期値:false(区別する))。
588         *
589         * @og.tag
590         * startsWith , contains , endsWith , equalsIgnoreCase での比較時に、比較対象の
591         * 大文字/小文字を区別しないかどうかを指定します。
592         * 区別しない ("true") 場合、aaa と AAA は、一致したとみなされます。
593         * 初期値は、区別する ("false") です。
594         *
595         * @og.rev 6.3.1.1 (2015/07/10) 大文字/小文字の区別なし(ignoreCase=true)対応
596         *
597         * @param   flag 大文字/小文字を区別しないかどうか [true:しない/それ以外:する]
598         */
599        public void setIgnoreCase( final String flag ) {
600                ignoreCase = nval( getRequestParameter( flag ),ignoreCase );
601        }
602
603        /**
604         * 【TAG】判定結果を反転させるかどうか[true/false]を指定します(初期値:false)。
605         *
606         * @og.tag
607         * 通常の判定結果において、結果の正反対の処理を行います。
608         * 初期値は、通常 (false)です。
609         *
610         * @og.rev 6.8.0.0 (2017/06/02) 新規追加
611         *
612         * @param   flag 判定結果反転 [true:反転する/それ以外:通常]
613         */
614        public void setNotEquals( final String flag ) {
615                notEquals = nval( getRequestParameter( flag ),notEquals );
616        }
617
618        /**
619         * このオブジェクトの文字列表現を返します。
620         * 基本的にデバッグ目的に使用します。
621         *
622         * @return String型。このクラスの文字列表現
623         * @og.rtnNotNull
624         */
625        @Override
626        public String toString() {
627                return ToString.title( this.getClass().getName() )
628                                .println( "VERSION"                     ,VERSION                )
629                                .println( "startsWith"          ,startsWith             )
630                                .println( "endsWith"            ,endsWith               )
631                                .println( "instr"                       ,instr                  )
632                                .println( "equals"                      ,fileEquals             )
633                                .println( "matches"                     ,matches                )
634                                .println( "unMatches"           ,unMatches              )
635                                .println( "lastModified"        ,lastModified   )
636                                .println( "isLarger"            ,isLarger               )
637                                .println( "isSmaller"           ,isSmaller              )
638//                              .println( "useDir"                      ,useDir                 )
639                                .println( "ignoreCase"          ,ignoreCase             )               // 6.3.1.1 (2015/07/10)
640                                .println( "Other..."            ,getAttributes().getAttribute() )
641                                .fixForm().toString() ;
642        }
643}