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    
021    import org.opengion.fukurou.util.StringUtil;
022    import static org.opengion.fukurou.util.StringUtil.nval ;
023    
024    /**
025     * Whereå¥ã‚’作æ?ã™ã‚‹ãŸã‚ã®æ¡ä»¶ã‚’指定ã—ã¾ã™ã?
026     *
027     * ã“ã?ã‚¿ã‚°ã®value 値ã«ã€{@XXXX} 変数ãŒå«ã¾ã‚Œã¦ã?‚‹å ´åˆã?ãã?リクエストå?ã?
028     * ãªã??åˆã?ã€ã“ã®ã‚¿ã‚°ãã?ã‚‚ã?ãŒãªã«ã‚‚å?力ã—ã¾ã›ã‚“ã€?ã¤ã¾ã‚Šæ¡ä»¶ã‹ã‚‰æ¶ˆãˆã¾ã™ã?)
029     * startKeyã¯ã€value ã‚’é?çµã™ã‚‹å?åˆã?é ­ã«ç½®ã‹ã‚Œã‚‹æ–‡å­—å?ã§ã€whereå¥ã®æœ??ã«ã¯è¡¨ç¤ºã•れãšã?
030     * ãれ以é™ã«ã¤ã?¦ã€è¡¨ç¤ºã•れã¾ã™ã?(ã¤ã¾ã‚Šã?where VALUE1 and VALUE2 and VALUE3 … ã§ã™ã?)
031     * startKey ã®åˆæœŸå€¤ã¯ã€?and" ã§ã™ã?
032     * multi ã¯ã€{@XXXX} 変数ã«ã€å?ãŒè¤?•°å«ã¾ã‚Œã¦ã?‚‹å ´åˆã?処ç?‚’è¦å®šã—ã¾ã™ã?
033     * è¤?•°ã®å€¤ã¨ã¯ã€åŒä¸?ameã§ãƒã‚§ãƒ?‚¯ãƒœãƒƒã‚¯ã‚¹æŒ?®šã‚„ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ã®è¤?•°æŒ?®šã—ãŸå?åˆã?
034     * リクエストãŒé…å?ã§é€ã‚‰ã‚Œã¾ã™ã?multi="true" ã¨ã™ã‚‹ã¨ã€?xx1','xx2','xx3', ?¥?¥?¥ ã¨ã?†
035     * å½¢å¼ã«å¤‰æ›ã•れã¾ã™ã?
036     * 具体的ã«ã¯ã€?where PN in ( {@PN} )" ã¨ã?†æ–?­—å?ã«å¯¾ã—ã¦ã€?
037     * "where PN in ( 'xx1','xx2','xx3' )" を作æ?ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã?
038     * multi ã®åˆæœŸå€¤ã¯ã€?false" ã§ã™ã?
039     * SystemData ã® USE_SQL_INJECTION_CHECK ã?true ã‹ã?quotCheck 属æ?ã?true ã®å ´åˆã?ã€?
040     * ?³?±?¬ã‚¤ãƒ³ã‚¸ã‚§ã‚¯ã‚·ãƒ§ãƒ³å¯¾ç­–用ã®ã‚¯ã‚©ãƒ¼ãƒ?‚£ã‚·ãƒ§ãƒ³ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?リクエスト引数ã«
041     * クォーãƒ?‚£ã‚·ãƒ§ãƒ³(')ãŒå«ã¾ã‚Œã‚‹ã¨ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã?
042     * åŒæ§˜ã«USE_XSS_CHECKãŒtrueã‹ã?xssCheck属æ?ãŒtrueã®å ´åˆã?ã€?
043     * クロスサイトススクリプティング(XSS)対策ã?ãŸã‚less/greater than signã®ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
044     *
045     * å?±žæ?ã¯ã€{@XXXX} 変数ãŒä½¿ç”¨ã§ãã¾ã™ã?
046     * ã“れã¯ã€ServletRequest ã‹ã‚‰ã€XXXX をキーã«å€¤ã‚’å–りå?ã?ã“ã?変数ã«å‰²ã‚Šå½“ã¦ã¾ã™ã?
047     * ã¤ã¾ã‚Šã?ã“ã?XXXXをキーã«ãƒªã‚¯ã‚¨ã‚¹ãƒˆã™ã‚Œã?ã€ã“ã®å¤‰æ•°ã«å€¤ã‚’ã‚»ãƒ?ƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã?
048     *
049     * @og.formSample
050     * â—å½¢å¼ï¼?lt;og:and startKey="[and|or|…]" value="…" multi="[false|true]" />
051     * â—body?šã‚ã‚?
052     *
053     * â—Tag定義??
054     *   <og:and
055     *       startKey           ã€TAG】SQLæ¡ä»¶å¥ã®æœ??ã®æ¼”ç®—å­ã‚’æŒ?®šã—ã¾ã?åˆæœŸå€¤:and)
056     *       value              ã€TAG】æ¡ä»¶ã®å€¤ã‚?ã‚»ãƒ?ƒˆã—ã¾ã?
057     *       multi              ã€TAG】è¤?•°ã®å¼•æ•°ã«å¯¾ã—ã¦å‡¦ç?™ã‚‹ã‹ã©ã?‹[true/false]を設定ã—ã¾ã?åˆæœŸå€¤:false)
058     *       separator          ã€TAG】multi アクション時ã?æ–?­—å?ã‚’å?割ã™ã‚‹é ?›®åŒºåˆ?‚Šæ–?­—ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?
059     *       quotCheck          ã€TAG】リクエスト情報㮠クォーãƒ?‚£ã‚·ãƒ§ãƒ³(') 存在ãƒã‚§ãƒ?‚¯ã‚’実施ã™ã‚‹ã‹ã©ã?‹[true/false]を設定ã—ã¾ã?(åˆæœŸå€¤:USE_SQL_INJECTION_CHECK[=true])
060     *       instrVals          ã€TAG】スペã?スã§åŒºåˆ?‚‰ã‚ŒãŸè¤?•°ã®å€¤ã™ã¹ã¦ã‚’å«ã‚?¡ä»¶ã‚’作æ?ã—ã¾ã?
061     *       instrType          ã€TAG】instrValsã§è¤?•°ã®å€¤ã‚’æ¡ä»¶ã«ã™ã‚‹éš›ã?方法をæŒ?®šã—ã¾ã?åˆæœŸå€¤:and)
062     *       xssCheck           ã€TAG】リクエスト情報㮠HTMLTagé–‹å§?終äº?–‡å­?><) 存在ãƒã‚§ãƒ?‚¯ã‚’実施ã™ã‚‹ã‹ã©ã?‹[true/false]を設定ã—ã¾ã?(åˆæœŸå€¤:USE_XSS_CHECK[=true])
063     *       caseKey            ã€TAG】ã“ã®ã‚¿ã‚°è‡ªä½“を利用ã™ã‚‹ã‹ã©ã?‹ã®æ¡ä»¶ã‚­ãƒ¼ã‚’指定ã—ã¾ã?åˆæœŸå€¤:null)
064     *       caseVal            ã€TAG】ã“ã®ã‚¿ã‚°è‡ªä½“を利用ã™ã‚‹ã‹ã©ã?‹ã®æ¡ä»¶å€¤ã‚’指定ã—ã¾ã?åˆæœŸå€¤:null)
065     *       debug              ã€TAG】デãƒãƒƒã‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
066     *   >   ... Body ...
067     *   </og:and>
068     *
069     * â—使用ä¾?
070     *     <og:query command="NEW">
071     *             select PN,YOBI,NMEN,HINM from XX01
072     *         <og:where>
073     *             <og:and value="PN   =    '{@PN}'"    />
074     *             <og:and value="YOBI like '{@YOBI}%'" />
075     *         </og:where>
076     *             order by PN
077     *     </og:query>
078     *
079     *          ・検索æ¡ä»¶ãŒå?力ã•ã‚ŒãŸæ™?PN=AAA , YOBI=BBB)
080     *            作æ?ã•れるSQLæ–?çselect PN,YOBI,NMEN,HINM from XX01 where PN = 'AAA' and YOBI like 'BBB%' order by PN
081     *
082     *          ・検索æ¡ä»¶ãŒç‰‡æ–¹å…¥åŠ›ã•れãªã‹ã£ãŸæ™‚(PNãŒNULLã®ã¨ã? YOBI=BBB)
083     *            作æ?ã•れるSQLæ–?çselect PN,YOBI,NMEN,HINM from XX01 where YOBI like 'BBB%' order by PN
084     *
085     *          ・検索æ¡ä»¶ãŒå?力ã•れãªã‹ã£ãŸæ™‚(PNãŒNULL, YOBIãŒNULL) WHEREå¥ãŒãªããªã‚‹ã?
086     *            作æ?ã•れるSQLæ–?çselect PN,YOBI,NMEN,HINM from XX01 order by PN
087     *
088     *        注æ„?WhereTagを使ã‚ãªã??åˆã«ã€æ¤œç´¢æ¡ä»¶ãŒå?力ã•れãªã‹ã£ãŸå?åˆã?ã€ä¸‹è¨˜ã?よã†ã«ãªã‚Šã¾ã™ã?
089     *            select PN,YOBI,NMEN,HINM from XX01 where PN = '' and YOBI like '%' order by PN
090     *
091     *    --------------------------------------------------------------------------------------------------------------
092     *
093     *     <og:query command="NEW">
094     *             select PN,YOBI,NMEN,HINM from XX01 where PN="11111"
095     *         <og:where startKey="and">
096     *             <og:and value="YOBI in   ({@YOBI})" multi="true" />
097     *             <og:and value="HINM like '{@HINM}%'"             />
098     *         </og:where>
099     *             order by PN
100     *     </og:query>
101     *
102     *          ・YOBI ã‚’è¤?•°é¸æŠžã—ã€in ã§æ¤œç´¢ã™ã‚‹æ™?YOBI=AA,BB,CC ã‚’é¸æŠ?
103     *            作æ?ã•れるSQLæ–?çselect PN,YOBI,NMEN,HINM from XX01 where PN = '11111'
104     *                             and YOBI in ( 'AA','BB','CC' ) and HINM like 'BBB%' order by PN
105     *
106     * @og.group ç”»é¢éƒ¨å“?
107     *
108     * @version  4.0
109     * @author       Kazuhiko Hasegawa
110     * @since    JDK5.0,
111     */
112    public class SqlAndTag extends CommonTagSupport {
113            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
114            private static final String VERSION = "5.5.1.1 (2012/04/06)" ;
115    
116            private static final long serialVersionUID = 551120120406L ;
117    
118            private String  startKey        = "and";
119            private String  value           = "";
120            private String  instrVals       = null;         // 3.8.8.1 (2007/01/06)
121            private String  instrType       = "and";        // 5.4.1.0 (2011/11/01)
122            private boolean multi           = false;
123            private boolean quotCheck       = HybsSystem.sysBool( "USE_SQL_INJECTION_CHECK" );      // 4.0.0 (2005/08/31)
124            private boolean xssCheck        = HybsSystem.sysBool( "USE_XSS_CHECK" );        // 5.0.0.2 (2009/09/15)
125    
126            private boolean allNull         = false;        // 5.0.0.2 (2009/09/15)
127    
128    //      private String  matchKey        = null;         // 5.1.9.0 (2010/08/01) â‡?5.2.2.0 (2010/11/01) å»?­¢(caseKey,caseVal属æ?を使用ã—ã¦ãã ã•ã„ã€?
129    
130    //      private String  matchVal        = null;         // 5.1.9.0 (2010/08/01) â‡?5.2.2.0 (2010/11/01) å»?­¢(caseKey,caseVal属æ?を使用ã—ã¦ãã ã•ã„ã€?
131    
132            private String  separator       = null;         // 5.2.2.0 (2010/11/01) é ?›®åŒºåˆ?‚Šæ–?­?
133    
134            /**
135             * Taglibã®é–‹å§‹ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doStartTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
136             *
137             * @og.rev 4.0.0.0 (2006/12/05) BODY 部ã®å€¤ã‚?value ã«ä½¿ç”¨ã™ã‚‹æ©Ÿè?追åŠ?
138             * @og.rev 4.0.0.0 (2005/08/31) useQuotCheck() ã«ã‚ˆã‚‹?³?±?¬ã‚¤ãƒ³ã‚¸ã‚§ã‚¯ã‚·ãƒ§ãƒ³å¯¾ç­?
139             * @og.rev 5.0.0.2 (2009/09/15) XSS対�
140             * @og.rev 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
141             *
142             * @return      後続å?ç??æŒ?¤º
143             */
144            @Override
145            public int doStartTag() {
146                    // 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
147                    if( useTag() ) {
148                            useQuotCheck( quotCheck );
149                            // 5.0.0.2 (2009/09/15) XSS対�
150                            useXssCheck( xssCheck );
151    
152                            value = getRequestParameter( value );
153    
154                            if( value == null || value.isEmpty() ) {
155                                    return( EVAL_BODY_BUFFERED );   // Body を評価ã™ã‚‹ã€? extends BodyTagSupport æ™?
156                            }
157    
158            //              if( value != null && value.length() > 0 ) {
159            //                      return( SKIP_BODY );                    // Body を評価ã—ãªã?
160            //              }
161            //              else {
162            //                      return( EVAL_BODY_BUFFERED );   // Body を評価ã™ã‚‹ã€? extends BodyTagSupport æ™?
163            //              }
164                    }
165                    return( SKIP_BODY );                    // Body を評価ã—ãªã?
166            }
167    
168            /**
169             * Taglibã®ã‚¿ã‚°æœ¬ä½“を処ç?™ã‚?doAfterBody() ã‚?オーãƒã?ライドã—ã¾ã™ã?
170             *
171             * @og.rev 4.0.0.0 (2006/12/05) BODY 部ã®å€¤ã‚?value ã«ä½¿ç”¨ã™ã‚‹æ©Ÿè?追åŠ?
172             *
173             * @return      後続å?ç??æŒ?¤º(SKIP_BODY)
174             */
175            @Override
176            public int doAfterBody() {
177                    value = getBodyString();
178                    return(SKIP_BODY);
179            }
180    
181            /**
182             * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
183             *
184             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()ã§å‘¼ã¶ã€?
185             * @og.rev 3.8.8.1 (2007/01/06) makeInstrVals を加味ã™ã‚‹ã€?
186             * @og.rev 5.0.0.2 (2009/09/15) multi時ã?allNull対å¿?
187             * @og.rev 5.1.9.0 (2010/08/01) matchKey ã€matchVal 対å¿?â‡?5.2.2.0 (2010/11/01) å»?­¢
188             * @og.rev 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
189             *
190             * @return      後続å?ç??æŒ?¤º
191             */
192            @Override
193            public int doEndTag() {
194                    debugPrint();           // 4.0.0 (2005/02/28)
195                    // 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
196                    if( useTag() ) {
197                            SqlWhereTag where = (SqlWhereTag)findAncestorWithClass( this,SqlWhereTag.class );
198                            if( where == null ) {
199                                    String errMsg = "<b>ã“ã?ã‚¿ã‚°ã¯ã€where ã‚¿ã‚°ã®å†?ƒ¨ã«ãŠãå¿?¦ãŒã‚りã¾ã™ã?</b>";
200                                    throw new HybsSystemException( errMsg );
201                            }
202    
203                            // 5.1.9.0 (2010/08/01) matchKey ã€matchVal 対å¿?â‡?5.2.2.0 (2010/11/01) å»?­¢
204            //              boolean flag = (matchKey == null) || (matchVal == null) || matchKey.matches( matchVal ) ;
205    
206                            // if( ! isNull() ) {
207            //              if( ! isNull() && ! allNull ) {                 // 5.0.0.2 (2009/09/15)
208            //              if( ! isNull() && ! allNull && flag ) { // 5.1.9.0 (2010/08/01)
209                            if( ! isNull() && ! allNull ) {                 // 5.2.2.0 (2010/11/01)
210    //                              value = makeInstrVals( instrVals,value );       // 3.8.8.1 (2007/01/06)
211                                    value = makeInstrVals( instrVals,instrType,value );     // 5.4.1.0 (2011/11/01)
212                                    if( value != null ) {
213                                            set( "keyWord", startKey );
214                                            set( "value"  , value );
215                                            where.setAttributes( getAttributes() );
216                                    }
217                            }
218                    }
219                    return(EVAL_PAGE);
220            }
221    
222            /**
223             * タグリブオブジェクトをリリースã—ã¾ã™ã?
224             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
225             *
226             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿ã‚°ã® release() メソãƒ?ƒ‰ã‚’ã?追åŠ?
227             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()ã§å‘¼ã¶ã€?
228             * @og.rev 3.8.8.1 (2007/01/06) instrVals 属æ?追åŠ?
229             * @og.rev 4.0.0.0 (2005/08/31) quotCheck 属æ?ã®è¿½åŠ?
230             * @og.rev 5.0.0.2 (2009/09/15) XSS対�
231             * @og.rev 5.0.0.2 (2009/09/15) multi時ã?allNull対å¿?
232             * @og.rev 5.1.9.0 (2010/08/01) matchKeyã€matchVal 属æ?ã®è¿½åŠ?
233             * @og.rev 5.2.2.0 (2010/11/01) separator , isMatch 属æ?ã®è¿½åŠ?
234             * @og.rev 5.2.2.0 (2010/11/01) matchKeyã€matchVal 属æ?å»?­¢(caseKey,caseVal属æ?を使用ã—ã¦ãã ã•ã„ã€?
235             * @og.rev 5.4.1.0 (2011/11/01) instrType属æ?追åŠ?
236             */
237            @Override
238            protected void release2() {
239                    super.release2();
240                    startKey        = "and";
241                    value           = "";
242                    instrVals       = null;         // 3.8.8.1 (2007/01/06)
243                    instrType       = "and";        // 5.4.1.0 (2011/11/01)
244                    multi           = false;
245                    quotCheck       = HybsSystem.sysBool( "USE_SQL_INJECTION_CHECK" );      // 4.0.0 (2005/08/31)
246                    xssCheck        = HybsSystem.sysBool( "USE_XSS_CHECK" );        // 5.0.0.2 (2009/09/15)
247                    allNull         = false;        // 5.0.0.2 (2009/09/15)
248    //              matchKey        = null;         // 5.1.9.0 (2010/08/01) æ–°è¦è¿½åŠ?
249    //              matchVal        = null;         // 5.1.9.0 (2010/08/01) æ–°è¦è¿½åŠ?
250                    separator       = null;         // 5.2.2.0 (2010/11/01) é ?›®åŒºåˆ?‚Šæ–?­?
251            }
252    
253            /**
254             * ãƒªã‚¯ã‚¨ã‚¹ãƒˆæƒ…å ±ã®æ–?­—å?ã‚’å–å¾—ã—ã¾ã™ã?
255             *
256             * ã“れã¯ã€??常ã®getRequestParameter 処ç??中ã§å‘¼ã°ã‚Œã‚‹ getRequestValue ã‚?
257             * オーãƒã?ライトã—ã¦ã?¾ã™ã?
258             *
259             * @og.rev 5.0.0.2 (2009/09/15) valuesã®å…¨NULL/空æ–?­—ã‚’isNull扱ã?«ã™ã‚‹
260             * @og.rev 5.3.8.0 (2011/08/01) Attributeç­‰ã‹ã‚‰ã‚‚値ãŒå–å¾—ã§ãるよã†ã«ã™ã‚‹ã€‚ã?対応時ã®ç‰¹æ®Šå?ç?
261             *
262             * @param    key キー
263             *
264             * @return   ãƒªã‚¯ã‚¨ã‚¹ãƒˆæƒ…å ±ã®æ–?­—å?
265             */
266            @Override
267            protected String getRequestValue( final String key ) {
268                    String rtn = "";
269    
270                    if( multi ) {
271                            // 5.3.8.0 (2011/08/01) getRequestValues ã®ä¸­ã§ã€getRequestValue を呼ã³å‡ºã™ãŸã‚ã“ã®ã¾ã¾ã§ã¯
272                            // å†å¸°å‘¼ã³å‡ºã—ãŒæ°¸é?«ç¶šãã®ã§ã€?¼’回目以é™ã?ã€å?帰ã—ãªã?‚ˆã?«ã€å¼·åˆ¶çš?« multi ã®å€¤ã‚’æ›¸ãæ›ãˆã¾ã™ã?
273                            multi = false;  // 5.3.8.0 (2011/08/01) å†å¸°ã—ãªã?‚ˆã?«ã€å¼·åˆ¶çš?«å€¤ã‚’æ›¸ãæ›ã?
274                            String[] array = getRequestValues( key );
275                            allNull = true; // 5.0.0.2 (2009/09/15) arrayã®å†?®¹ãŒå?ã¦null/空æ–?­—ã‹
276                            if( ! isNull() ) {
277                                    // 5.0.0.2 (2009/09/15) å…¨ã¦null/空æ–?­—ã?å ´åˆã?nullã¨æ‰±ã?
278                                    for( int i = 0; i < array.length; i++ ) {
279                                            if( array[i] != null && array[i].length() > 0 ) {
280                                                    allNull = false;
281                                                    break;
282                                            }
283                                    }
284                                    if( ! allNull ){
285                                            rtn = makeCSVvalue( array );
286                                    }
287                            }
288                            multi = true;   // 5.3.8.0 (2011/08/01) 強制çš?«æ›¸ãæ›ãˆãŸå€¤ã‚’å?ã«æˆ»ã™ã?
289                    }
290                    else {
291                            rtn = super.getRequestValue( key );
292                    }
293                    return rtn ;
294            }
295    
296            /**
297             * è¤?•°ã®å€¤ã‚?'xx1','xx2','xx3', ?¥?¥?¥ ã¨ã?†å½¢å¼ã«å¤‰æ›ã—ã¾ã™ã?
298             *
299             * ã“ã?処ç??ã€in ãªã©ã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é…å?ã§å—ã‘å–ã£ã¦å‡¦ç?
300             * ã™ã‚‹å ´åˆã?æ–?­—å?を加工ã—ã¾ã™ã?
301             *
302             * @og.rev 5.2.2.0 (2010/11/01) separator 対�
303             *
304             * @param       array   å…??é…å?æ–?­—å?
305             *
306             * @return  連çµå¾Œã?æ–?­—å?
307             */
308            private String makeCSVvalue( final String[] array ) {
309                    if( array == null || array.length == 0 ) {
310                            String errMsg = "array 引数ã«ã€null ã‚??サイズゼロã®é…å?ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“ã€?;
311                            throw new HybsSystemException( errMsg );
312                    }
313    
314                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
315    
316                    if( separator != null ) {
317                            for(int i=0; i < array.length; i++) {
318                                    String[] ary = array[i].split( separator );
319                                    for( int j=0; j<ary.length; j++ ) {
320                                            buf.append( "'" );
321                                            buf.append( ary[j] );
322                                            buf.append( "'," );
323                                    }
324                            }
325                            buf.deleteCharAt( buf.length()-1 );             // æœ?¾Œã? ピリオドを削除ã™ã‚‹ã€?
326                    }
327                    else {
328                            for(int i=0; i < array.length; i++) {
329                                    buf.append( "'" );
330                                    buf.append( array[i] );
331                                    buf.append( "'," );
332                            }
333                            buf.deleteCharAt( buf.length()-1 );             // æœ?¾Œã? ピリオドを削除ã™ã‚‹ã€?
334                    }
335    //              buf.append( "'" );
336    //              buf.append( array[0] );
337    //              buf.append( "'" );
338    //              for(int i=1; i < array.length; i++) {
339    //                      buf.append( ",'" );
340    //                      buf.append( array[i] );
341    //                      buf.append( "'" );
342    //              }
343                    return buf.toString();
344            }
345    
346            /**
347             * スペã?スã§åŒºåˆ?‚‰ã‚ŒãŸè¤?•°ã®å€¤ã‚?and 接続ã§é€£çµã—ã¾ã™ã?
348             *
349             * value="CLM" instrVals="ABC DEF GHI" ã¨æŒ?®šã™ã‚‹ã¨ã€?
350             * value="CLM LIKE '%ABC%' AND CLM LIKE '%DEF%'  AND CLM LIKE '%GHI%' "
351             * ã¨ã?†æ–?­—å?を作æ?ã—ã¾ã™ã?
352             * 個別ã«LIKE検索é ?›®ã‚?AND 連çµã™ã‚‹ç‚ºã€ç¾ã‚Œã‚‹å ´æ‰?«ä¾å­˜ã—ã¾ã›ã‚“ã€?
353             * é€?«ã€ç¾ã‚Œã‚‹é ?ºã‚’æŒ?®šã™ã‚‹å?åˆã?ã€ABC%DEF ã®æ§˜ã«æŒ?®šå¯èƒ½ã§ã™ã?
354             * ãŸã ã—ã?columnMarker ã® instrVals ã§ã€è¤?•°æ–?­—ã?マã?カーを行ã†å ´åˆã?
355             * ABC%DEF ã¨ã?†æ–?­—å?ã¯ã€ã‚ªãƒªã‚¸ãƒŠãƒ«ã§ãªã??ã§ã€ã?ークアãƒ??ã•れã¾ã›ã‚“ã€?
356             *
357             * @og.rev 5.4.1.0 (2011/11/01) instrType属æ?対å¿?
358             * @og.rev 5.5.1.1 (2012/04/06) notin対�
359             *
360             * @param       instrVals       ç¹°è¿”ã—処ç?‚’行ㆠ値
361             * @param       instrType       é€£çµæ–¹æ³?
362             * @param       value           ç¹°è¿”ã—処ç?‚’行ㆠvalue
363             *
364             * @return  連çµå¾Œã?æ–?­—å?
365             * @see         #setInstrVals( String )
366             * @see         ColumnMarkerTag#setInstrVals( String )
367             */
368            private String makeInstrVals( final String instrVals, final String instrType , final String value ) {
369                    if( instrVals == null || instrVals.length() == 0 ) { return value; }
370    
371                    String reqVals = nval( getRequestParameter( instrVals ),null );
372                    if( reqVals == null || reqVals.length() == 0 ) { return null; }
373    
374                    final String[] vals ;
375                    if( multi ) {
376                            // multi ã®ã¨ãã?ã€makeCSVvalue ã§åŠ?·¥ã•れãŸå?ã«ãªã£ã¦ã?‚‹ã€?
377                            vals = StringUtil.csv2Array( reqVals,',' );
378                            // å‰å¾Œã? ' ã¯ãšã—
379                            for( int i=0; i<vals.length; i++ ) {
380                                    vals[i] = vals[i].substring( 1,vals[i].length()-1 );
381                            }
382                    }
383                    else {
384                            vals = StringUtil.csv2Array( reqVals,' ' );
385                    }
386    
387                    if( vals == null || vals.length == 0 ) { return null; }
388    
389                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
390    
391    //              buf.append( value );
392    //              buf.append( " LIKE '%" );
393    //              buf.append( vals[0] );
394    //              buf.append( "%'" );
395    
396                    buf.append( " (" );
397                    // æ¡ä»¶:and â‡?å??ã‚’andã®likeæ¡ä»¶ã§çµåˆ(%ã‚り)
398                    if( instrType.startsWith( "a" ) ) {
399                            for(int i=0; i < vals.length; i++) {
400                                    if( i > 0 ) { buf.append( " and " ); }
401                                    buf.append( value );
402                                    buf.append( " LIKE '%" ).append( vals[i] ).append( "%'" );
403                            }
404                    }
405                    // æ¡ä»¶:or â‡?å??ã‚’orã®likeæ¡ä»¶ã§çµåˆ(%ã‚り)
406                    else if( instrType.startsWith( "o" ) ) {
407                            for(int i=0; i < vals.length; i++) {
408                                    if( i > 0 ) { buf.append( " or " ); }
409                                    buf.append( value );
410                                    buf.append( " LIKE '%" ).append( vals[i] ).append( "%'" );
411                            }
412                    }
413                    // æ¡ä»¶:in â‡?å??ã‚’orã®likeæ¡ä»¶ã§çµåˆ(%ãªã?
414                    else if( instrType.startsWith( "i" ) ) {
415                            for(int i=0; i < vals.length; i++) {
416                                    if( i > 0 ) { buf.append( " or " ); }
417                                    buf.append( value );
418                                    buf.append( " LIKE '" ).append( vals[i] ).append( "'" );
419                            }
420                    }
421                    // æ¡ä»¶:notin â‡?å??ã‚’andã®not likeæ¡ä»¶ã§çµåˆ(%ãªã? 5.5.1.1(2012/04/05)
422                    else if( instrType.startsWith( "n" ) ) {
423                            for(int i=0; i < vals.length; i++) {
424                                    if( i > 0 ) { buf.append( " and " ); }
425                                    buf.append( value );
426                                    buf.append( " NOT LIKE '" ).append( vals[i] ).append( "'" );
427                            }
428                    }
429                    else {
430                            String errMsg = "instrTypeã«ã¯ã€?and','or','in','notin'ã®ã?šã‚Œã‹ã‚’指定ã—ã¦ä¸‹ã•ã??instrType=[" + instrType + "]";
431                            throw new HybsSystemException( errMsg );
432                    }
433                    buf.append( ") " );
434    
435                    return buf.toString();
436            }
437    
438            /**
439             * ã€TAG】SQLæ¡ä»¶å¥ã®æœ??ã®æ¼”ç®—å­ã‚’æŒ?®šã—ã¾ã?åˆæœŸå€¤:and)ã€?
440             *
441             * @og.tag
442             * value ã‚’é?çµã™ã‚‹å?åˆã?é ­ã«ç½®ã‹ã‚Œã‚‹æ–‡å­—å?ã§ã€whereå¥ã®æœ??ã«ã¯è¡¨ç¤ºã•れãšã?
443             * ãれ以é™ã«ã¤ã?¦ã€è¡¨ç¤ºã•れã¾ã™ã?
444             * (ã¤ã¾ã‚Šã?where VALUE1 and VALUE2 and VALUE3 … ã§ã™ã?)
445             * startKey ã®åˆæœŸå€¤ã¯ã€?and" ã§ã™ã?
446             *
447             * @param       skey æ¡ä»¶å¥ã®æœ??ã®æ¼”ç®—å­?
448             */
449            public void setStartKey( final String skey ) {
450                    if( skey != null && skey.length() > 0 ) { startKey = skey; }
451            }
452    
453            /**
454             * ã€TAG】æ¡ä»¶ã®å€¤ã‚?ã‚»ãƒ?ƒˆã—ã¾ã™ã?
455             *
456             * @og.tag
457             * æ¡ä»¶å€¤ã«ã€{&#064;XXXX} 変数ãŒå«ã¾ã‚Œã¦ã?‚‹å ´åˆã?ãã?リクエストå?ãŒãªã??åˆã?ã€?
458             * ã“ã?ã‚¿ã‚°ãã?ã‚‚ã?ãŒãªã«ã‚‚å?力ã—ã¾ã›ã‚“ã€?ã¤ã¾ã‚Šæ¡ä»¶ã‹ã‚‰æ¶ˆãˆã¾ã™ã?)
459             * BODY 部ã«è¨˜è¿°ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã?ãã?å ´åˆã?ã€æ¡ä»¶å±žæ?ã«ãªã«ã‚‚設定ã§ãã¾ã›ã‚“ã€?
460             *
461             * @param       val æ¡ä»¶å€¤
462             */
463            public void setValue( final String val ) {
464                    value = val;
465            }
466    
467            /**
468             * ã€TAG】スペã?スã§åŒºåˆ?‚‰ã‚ŒãŸè¤?•°ã®å€¤ã™ã¹ã¦ã‚’å«ã‚?¡ä»¶ã‚’作æ?ã—ã¾ã™ã?
469             *
470             * @og.tag
471             * 通常ã€value="CLM LIKE 'ABC%'" ã¨ã?†æ–?­—å?を指定ã—ã¾ã™ãŒã€?
472             * value="CLM" instrVals="ABC DEF GHI" ã¨æŒ?®šã™ã‚‹ã¨ã€?
473             * value="CLM LIKE '%ABC%' AND CLM LIKE '%DEF%'  AND CLM LIKE '%GHI%' "
474             * ã¨ã?†æ–?­—å?を作æ?ã—ã¾ã™ã?
475             * ã“れã¯ã€instrVals ã«æŒ?®šã—ãŸå¼•æ•°ã«å¯¾ã—ã¦ã€ã‚¹ãƒšã?ス区åˆ?‚Šã§åˆ?‰²ã—ã?
476             * 剿–¹ã® value ã«è¤?•°ã®ANDæ¤œç´¢ã‚’åŒæ™‚ã«å®Ÿç¾ã§ãるよã†ã«æŒ?®šã—ã¾ã?
477             * 個別ã«LIKE検索é ?›®ã‚?AND 連çµã™ã‚‹ç‚ºã€ç¾ã‚Œã‚‹å ´æ‰?«ä¾å­˜ã—ã¾ã›ã‚“ã€?
478             * é€?«ã€ç¾ã‚Œã‚‹é ?ºã‚’æŒ?®šã™ã‚‹å?åˆã?ã€ABC%DEF ã®æ§˜ã«æŒ?®šå¯èƒ½ã§ã™ã?
479             * ãŸã ã—ã?columnMarker ã® instrVals ã§ã€è¤?•°æ–?­—ã?マã?カーを行ã†å ´åˆã?
480             * ABC%DEF ã¨ã?†æ–?­—å?ã¯ã€ã‚ªãƒªã‚¸ãƒŠãƒ«ã§ãªã??ã§ã€ã?ークアãƒ??ã•れã¾ã›ã‚“ã€?
481             * ※instrType属æ?ã®æŒ?®šã«ã‚ˆã‚Šæ¡ä»¶ã®ç”Ÿæ?方法を変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã?
482             *   詳細ã«ã¤ã?¦ã¯ã€instrType属æ?ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç?下ã•ã??
483             *
484             * @param       val è¤?ˆæ¡ä»¶ä½œæ?ã®ãŸã‚ã®è¨­å®šå?
485             * @see         #setInstrType
486             * @see         ColumnMarkerTag#setInstrVals( String )
487             */
488            public void setInstrVals( final String val ) {
489                    instrVals = val;
490            }
491    
492            /**
493             * ã€TAG】instrValsã§è¤?•°ã®å€¤ã‚’æ¡ä»¶ã«ã™ã‚‹éš›ã?方法をæŒ?®šã—ã¾ã?åˆæœŸå€¤:and)ã€?
494             *
495             * @og.tag
496             * 通常ã€instrValsã«æŒ?®šã•れãŸå€¤ã¯ã€ã‚¹ãƒšã?ス区åˆ?‚Šã§åˆ?‰²ã—ãŸå??ã‚’LIKEæ¡ä»¶ã¨ã—ã¦andçµåˆã—ã¾ã™ã?
497             * ã—ã‹ã—ã?instrType属æ?を変更ã™ã‚‹ã“ã¨ã§ã€ã“ã®æ¡ä»¶å¼ã?生æ?方法を変更
498             * ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã?
499             * 具体的ã«ã¯ã€ä»¥ä¸‹ã?通りã§ã™ã?
500             * â‘?nstrTypeã«"and"ãŒæŒ‡å®šã•れã¦ã?‚‹å ´å?åˆæœŸå€¤)
501             *   ã‚¿ã‚°ã®è¨˜è¿° : value="CLM" instrVals="ABC DEF GHI"
502             *   生æ?æ–?­—å? :       "( CLM LIKE '%ABC%' AND CLM LIKE '%DEF%' AND CLM LIKE '%GHI%' )"
503             * â‘¡instrTypeã«"or"ãŒæŒ‡å®šã•れã¦ã?‚‹å ´å?
504             *   ã‚¿ã‚°ã®è¨˜è¿° : value="CLM" instrVals="ABC DEF GHI"
505             *   生æ?æ–?­—å? :       "( CLM LIKE '%ABC%' OR CLM LIKE '%DEF%' OR CLM LIKE '%GHI%' )"
506             * â‘¢instrTypeã«"in"ãŒæŒ‡å®šã•れã¦ã?‚‹å ´å?
507             *   ã‚¿ã‚°ã®è¨˜è¿° : value="CLM" instrVals="ABC DEF GHI"
508             *   生æ?æ–?­—å? :       "( CLM LIKE 'ABC' OR CLM LIKE 'DEF5' OR CLM LIKE 'GHI' )"
509             * â‘£instrTypeã«"notin"ãŒæŒ‡å®šã•れã¦ã?‚‹å ´å?
510             *       ã‚¿ã‚°ã®è¨˜è¿° : value="CLM" instrVals="ABC DEF GHI"
511             *   生æ?æ–?­—å? :       "( CLM NOT LIKE 'ABC' AND CLM NOT LIKE 'DEF5' AND CLM NOT LIKE 'GHI' )"
512             * ※ã“ã?属æ?を指定ã—ãªã??åˆã?ã€â‘ ã®LIKEæ¡ä»¶ã§ã®andçµåˆã¨ãªã‚Šã¾ã™ã?
513             * ※③④ã«ã¤ã?¦ã€LIKEæ¡ä»¶ã§%ã‚’è?動付加ã—ãªã?“ã¨ã«ã‚ˆã‚Šã€ç”»é¢ã‹ã‚‰ã®å…¥åŠ›å?ã«å¿œã˜ã¦ã€?
514             *   剿–¹ä¸??ã€å¾Œæ–¹ä¸??ã€å‰å¾Œæ–¹ä¸??ã®åˆ¶å¾¡ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã?
515             *
516             * @og.rev 5.5.1.1 (2012/04/06) notin対�コメント修正)
517             *
518             * @param       tp æ¡ä»¶æ–¹æ³•[and/or/in/notin]
519             * @see         #setInstrVals( String )
520             */
521            public void setInstrType( final String tp ) {
522                    instrType = nval( getRequestParameter( tp ),tp );
523            }
524    
525            /**
526             * ã€TAG】è¤?•°ã®å¼•æ•°ã«å¯¾ã—ã¦å‡¦ç?™ã‚‹ã‹ã©ã?‹[true/false]を設定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
527             *
528             * @og.tag
529             * {&#064;XXXX} 変数ã«ã€å?ãŒè¤?•°å«ã¾ã‚Œã¦ã?‚‹å ´åˆã?処ç?‚’è¦å®šã—ã¾ã™ã?
530             * multi="true" ã«è¨­å®šã™ã‚‹ã¨ã€è¤?•°ã®å¼•æ•°ã¯ã€?xx1','xx2','xx3', ?¥?¥?¥ ã¨ã?†
531             * å½¢å¼ã«å¤‰æ›ã—ã¾ã™ã?
532             * where æ¡ä»¶ã§è¨?†ã¨ã€?"where PN in ( {&#064;PN} )" ã¨ã?†æ–?­—å?ã«å¯¾ã—ã¦ã€?
533             * "where PN in ( 'xx1','xx2','xx3' )" を作æ?ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã?
534             * åˆæœŸå€¤ã¯ã€?false (マルãƒå¤‰æ›ã—ãªã? ã§ã™ã?
535             *
536             * @param   flag マルãƒå¤‰æ› [true:ã™ã‚‹/ãれ以å¤?ã—ãªã?
537             * @see         #setSeparator( String )
538             */
539            public void setMulti( final String flag ) {
540                    multi = nval( flag,multi );
541            }
542    
543            /**
544             * ã€TAG】multi アクション時ã?æ–?­—å?ã‚’å?割ã™ã‚‹é ?›®åŒºåˆ?‚Šæ–?­—ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
545             *
546             * @og.tag
547             * multi="true" ã®å ´åˆã?è¤?•°ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’連çµã—ã¦ã€?in å¥ã§å•åˆã›ã‚’è¡Œã†æ–?­—å?ã‚?
548             * 作æ?ã—ã¾ã™ãŒã€separator を指定ã™ã‚‹ã¨ã€ã•らã«ã€separator ã§æ–?­—å?ã‚’å?割ã—ã¦ã€?
549             * in å¥ã®å¼•数を構築ã—ã¾ã™ã?
550             * 具体的ã«ã¯ã€å?割後ã?æ–?­—å?ãŒã?è¤?•°ã®å€‹ã?ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤‰æ•°ã¨åŒã˜å½¢å¼ã«åŠ?·¥ã•れã¾ã™ã?
551             * ã“ã?機è?ã¯ã€multi="true" を指定ã—ãŸå?åˆã?ã¿æœ‰åйã«ãªã‚Šã¾ã™ã?
552             * åˆæœŸå€¤ã¯ã€null ã§ã™ã?ã¤ã¾ã‚Šã?åˆ?‰²å‡¦ç??行ã„ã¾ã›ã‚“ã€?
553             *
554             * @og.rev 5.2.2.0 (2010/11/01) æ–°è¦è¿½åŠ?
555             *
556             * @param   sepa é ?›®åŒºåˆ?‚Šæ–?­?
557             * @see         #setMulti( String )
558             */
559            public void setSeparator( final String sepa ) {
560                    separator = nval( getRequestParameter( sepa ),separator );
561            }
562    
563            /**
564             * ã€TAG】リクエスト情報㮠クォーãƒ?‚£ã‚·ãƒ§ãƒ³(') 存在ãƒã‚§ãƒ?‚¯ã‚’実施ã™ã‚‹ã‹ã©ã?‹[true/false]を設定ã—ã¾ã?
565             *              (åˆæœŸå€¤:USE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}])ã€?
566             *
567             * @og.tag
568             * ?³?±?¬ã‚¤ãƒ³ã‚¸ã‚§ã‚¯ã‚·ãƒ§ãƒ³å¯¾ç­–ã?ä¸?¤ã¨ã—ã¦ã€æš«å®šçš„ã§ã¯ã‚りã¾ã™ãŒã€SQLã®ãƒ‘ラメータã«
569             * æ¸¡ã™æ–‡å­—å?ã«ã‚¯ã‚©ãƒ¼ãƒ?‚£ã‚·ãƒ§ãƒ³(') を許ã•ãªã?¨­å®šã«ã™ã‚Œã°ã€ã‚る程度ã¯é˜²æ­¢ã§ãã¾ã™ã?
570             * 数字タイプã?引数ã«ã¯ã€?or 5=5 ãªã©ã®ã‚¯ã‚©ãƒ¼ãƒ?‚£ã‚·ãƒ§ãƒ³ã‚’使用ã—ãªã?‚³ãƒ¼ãƒ‰ã‚’埋ã‚ã¦ã‚‚ã?
571             * æ•°å­—ãƒã‚§ãƒ?‚¯ã§æ¤œå?å¯èƒ½ã§ã™ã?æ–?­—タイプã?å ´åˆã?ã€å¿?š (')ã‚’ã?ãšã—ã¦ã€?
572             * ' or 'A' like 'A ã®ã‚ˆã†ãªå½¢å¼ã«ãªã‚‹ç‚ºã€?')ãƒã‚§ãƒ?‚¯ã?‘ã§ã‚‚有効ã§ã™ã?
573             * (') ãŒå«ã¾ã‚Œã¦ã?Ÿã‚¨ãƒ©ãƒ¼ã«ã™ã‚‹(true)?ã‹ãƒŽã?ãƒã‚§ãƒ?‚¯ã?false)を指定ã—ã¾ã™ã?
574             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®USE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}])ã€?
575             *
576             * @og.rev 4.0.0.0 (2005/08/31) æ–°è¦è¿½åŠ?
577             *
578             * @param   flag クォーãƒ?‚£ã‚·ãƒ§ãƒ³ãƒã‚§ãƒ?‚¯ [true:ã™ã‚‹/ãれ以å¤?ã—ãªã„]
579             * @see         org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK
580             */
581            public void setQuotCheck( final String flag ) {
582                    quotCheck = nval( getRequestParameter( flag ),quotCheck );
583            }
584    
585            /**
586             * ã€TAG】リクエスト情報㮠HTMLTagé–‹å§?終äº?–‡å­?&gt;&lt;) 存在ãƒã‚§ãƒ?‚¯ã‚’実施ã™ã‚‹ã‹ã©ã?‹[true/false]を設定ã—ã¾ã?
587             *              (åˆæœŸå€¤:USE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])ã€?
588             *
589             * @og.tag
590             * クロスサイトスクリプティング(XSS)対策ã?ä¸?’°ã¨ã—ã¦less/greater than signã«ã¤ã?¦ã®ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
591             * (&gt;&lt;) ãŒå«ã¾ã‚Œã¦ã?Ÿã‚¨ãƒ©ãƒ¼ã«ã™ã‚‹(true)?ã‹ãƒŽã?ãƒã‚§ãƒ?‚¯ã?false)を指定ã—ã¾ã™ã?
592             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®USE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])ã€?
593             *
594             * @og.rev 5.0.0.2 (2009/09/15) æ–°è¦è¿½åŠ?
595             *
596             * @param       flag    XSSãƒã‚§ãƒ?‚¯ [true:ã™ã‚‹/false:ã—ãªã„]
597             * @see         org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK
598             */
599            public void setXssCheck( final String flag ) {
600                    xssCheck = nval( getRequestParameter( flag ),xssCheck );
601            }
602    
603            /**
604             * ã€TAG】ã“ã®ã‚¿ã‚°è‡ªä½“を利用ã™ã‚‹ã‹ã©ã?‹ã®æ¡ä»¶ã‚­ãƒ¼ã‚’指定ã—ã¾ã™ã?
605             *
606             * @og.tag
607             * matchKey.matches( matchVal ) ã®å€¤ãŒã?true ã®å ´åˆã?ã€ã“ã®ã‚¿ã‚°ã¯ä½¿ç”¨ã•れã¾ã™ã?
608             * false ã®å ´åˆã?ã€ã“ã®ã‚¿ã‚°ã¯ä½¿ç”¨ã•れã¾ã›ã‚“ã€?
609             * value 値ã«ã€{&#064;XXXX} 変数ãŒå«ã¾ã‚Œã¦ã?‚‹å ´åˆã¨åŒã˜åŠ¹æžœã‚’å¾—ã‚‰ã‚Œã¾ã™ã?
610             * 何もæŒ?®šã—ãªã??åˆã?ã¾ãŸã?ã€å¼•æ•°ã?null ã®å ´åˆã?ã€true ã¨åŒã˜ã§ä½¿ç”¨ã•れã¾ã™ã?
611             *
612             * @og.rev 5.1.9.0 (2010/08/01) æ–°è¦è¿½åŠ?
613             * @og.rev 5.2.2.0 (2010/11/01) å»?­¢(caseKey,caseVal属æ?を使用ã—ã¦ãã ã•ã„ã€?
614             *
615             * @param       mkey String
616             */
617    //      public void setMatchKey( final String mkey ) {
618    //              matchKey = nval( getRequestParameter( mkey ),matchKey );
619    //      }
620    
621            /**
622             * ã€TAG】ã“ã®ã‚¿ã‚°è‡ªä½“を利用ã™ã‚‹ã‹ã©ã?‹ã®æ¡ä»¶å€¤ã‚’指定ã—ã¾ã™ã?
623             *
624             * @og.tag
625             * matchKey.matches( matchVal ) ã®å€¤ãŒã?true ã®å ´åˆã?ã€ã“ã®ã‚¿ã‚°ã¯ä½¿ç”¨ã•れã¾ã™ã?
626             * false ã®å ´åˆã?ã€ã“ã®ã‚¿ã‚°ã¯ä½¿ç”¨ã•れã¾ã›ã‚“ã€?
627             * value 値ã«ã€{&#064;XXXX} 変数ãŒå«ã¾ã‚Œã¦ã?‚‹å ´åˆã¨åŒã˜åŠ¹æžœã‚’å¾—ã‚‰ã‚Œã¾ã™ã?
628             * 何もæŒ?®šã—ãªã??åˆã?ã¾ãŸã?ã€å¼•æ•°ã?null ã®å ´åˆã?ã€true ã¨åŒã˜ã§ä½¿ç”¨ã•れã¾ã™ã?
629             *
630             * @og.rev 5.1.9.0 (2010/08/01) æ–°è¦è¿½åŠ?
631             * @og.rev 5.2.2.0 (2010/11/01) å»?­¢(caseKey,caseVal属æ?を使用ã—ã¦ãã ã•ã„ã€?
632             *
633             * @param       mval String
634             */
635    //      public void setMatchVal( final String mval ) {
636    //              matchVal = nval( getRequestParameter( mval ),matchVal );
637    //      }
638    
639            /**
640             * ã‚¿ã‚°ã®åç§°ã‚’ã?è¿”ã—ã¾ã™ã?
641             * 自åˆ??身ã®ã‚¯ãƒ©ã‚¹åよりã?自動的ã«å–り出ã›ãªã?Ÿã‚ã?ã“ã?メソãƒ?ƒ‰ã‚’オーãƒã?ライドã—ã¾ã™ã?
642             *
643             * @og.rev 4.0.0.0 (2005/01/31) æ–°è¦è¿½åŠ?
644             *
645             * @return  ã‚¿ã‚°ã®åç§°
646             */
647            @Override
648            protected String getTagName() {
649                    return "and" ;
650            }
651    
652            /**
653             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
654             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
655             *
656             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
657             */
658            @Override
659            public String toString() {
660                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
661                                    .println( "VERSION"                     ,VERSION        )
662                                    .println( "startKey"            ,startKey       )
663                                    .println( "value"                       ,value          )
664                                    .println( "instrVals"           ,instrVals      )
665                                    .println( "multi"                       ,multi          )
666                                    .println( "quotCheck"           ,quotCheck      )
667                                    .println( "Other..."    ,getAttributes().getAttribute() )
668                                    .fixForm().toString() ;
669            }
670    }