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.fukurou.util.Attributes; 020 021 import java.util.List; 022 import java.util.ArrayList; 023 024 /** 025 * and ã‚¿ã‚°ã§æŒ?®šã•ã‚ŒãŸæ¡ä»¶ã‚’å?ã«ã€WHEREå¥ã‚’作æ?ã—ã¾ã™ã? 026 * 027 * å?±žæ?ã¯ã€{@XXXX} 変数ãŒä½¿ç”¨ã§ãã¾ã™ã? 028 * ã“れã¯ã€ServletRequest ã‹ã‚‰ã€XXXX ã‚’ã‚ーã«å€¤ã‚’å–りå?ã?ã“ã?変数㫠029 * 割り当ã¦ã¾ã™ã?ã¤ã¾ã‚Šã?ã“ã?XXXXã‚’ã‚ーã«ãƒªã‚¯ã‚¨ã‚¹ãƒˆã™ã‚Œã?ã€? 030 * ã“ã?変数ã«å€¤ã‚’ã‚»ãƒ?ƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã? 031 * 032 * @og.formSample 033 * â—å½¢å¼ï¼?lt;og:where startKey="…" > <og:and startKey="…" ... /> </og:where> 034 * â—body?šã‚ã‚?EVAL_BODY_INCLUDE:BODYをインクルードã—ã€{@XXXX} ã¯è§£æžã—ã¾ã›ã‚“) 035 * 036 * â—Tag定義?? 037 * <og:where 038 * startKey ã€TAG】SQLæ¡ä»¶å¥ã®æœ??ã®æ¼”ç®—åã‚’æŒ?®šã—ã¾ã?åˆæœŸå€¤:where) 039 * debug ã€TAG】デãƒãƒƒã‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false) 040 * > ... Body ... 041 * </og:where> 042 * 043 * â—使用ä¾? 044 * <og:query command="NEW"> 045 * select PN,YOBI,NMEN,HINM from XX01 where PN = '{@PN}' order by PN 046 * </og:query> 047 * 048 * ・検索æ¡ä»¶ãŒå?力ã•ã‚ŒãŸæ™?{@PN}ãŒNOT NULLã®ã¨ã? 049 * 作æ?ã•れるSQLæ–?çselect PN,YOBI,NMEN,HINM from XX01 where PN = 'AAA' order by PN 050 * ・検索æ¡ä»¶ãŒå?力ã•れãªã‹ã£ãŸæ™‚({@PN}ãŒNULLã®ã¨ã? 051 * 作æ?ã•れるSQLæ–?çselect PN,YOBI,NMEN,HINM from XX01 where PN = '' order by PN 052 * 053 * <og:query command="NEW"> 054 * select PN,YOBI,NMEN,HINM from XX01 055 * <og:where> 056 * <og:and value="PN = '{@PN}%'" /> 057 * <og:and value="YOBI like '{@YOBI}%'" /> 058 * </og:where> 059 * order by PN 060 * </og:query> 061 * 062 * ・検索æ¡ä»¶ãŒå?力ã•ã‚ŒãŸæ™?{@PN}ãŒNOT NULLã®ã¨ã? 063 * 作æ?ã•れるSQLæ–?çselect PN,YOBI,NMEN,HINM from XX01 PN = 'AAA%' and YOBI like 'BBB%' order by PN 064 * ・検索æ¡ä»¶ãŒå?力ã•れãªã‹ã£ãŸæ™‚({@PN}ãŒNULLã®ã¨ã? WHEREå¥ãŒãªããªã‚‹ã? 065 * 作æ?ã•れるSQLæ–?çselect PN,YOBI,NMEN,HINM from XX01 order by PN 066 * 067 * 注æ„?WhereTagを使ã£ãŸå?åˆã?下ã?よã†ã«ã¯ãªã‚Šã¾ã›ã‚“ã€? 068 * select PN,YOBI,NMEN,HINM from XX01 PN = '' and YOBI like '%' order by PN 069 * 070 * <og:query command="NEW"> 071 * select PN,YOBI,NMEN,HINM from XX01 where PN="11111" 072 * <og:where startKey="and"> 073 * <og:and value="YOBI like '{@PN}%'" /> 074 * </og:where> 075 * order by PN 076 * </og:query> 077 * 078 * ・検索æ¡ä»¶ãŒå?力ã•ã‚ŒãŸæ™?{@YOBI}ãŒNOT NULLã®ã¨ã? 079 * 作æ?ã•れるSQLæ–?çselect PN,YOBI,NMEN,HINM from XX01 PN = '11111' and YOBI like 'BBB%' order by PN 080 * ・検索æ¡ä»¶ãŒå?力ã•れãªã‹ã£ãŸæ™‚({@YOBI}ãŒNULLã®ã¨ã? WHEREå¥ãŒãªããªã‚‹ã? 081 * 作æ?ã•れるSQLæ–?çselect PN,YOBI,NMEN,HINM from XX01 PN = '11111' order by PN 082 * 083 * @og.group ç”»é¢éƒ¨å“? 084 * 085 * @version 4.0 086 * @author Kazuhiko Hasegawa 087 * @since JDK5.0, 088 */ 089 public class SqlWhereTag extends CommonTagSupport { 090 //* ã“ã?プãƒã‚°ãƒ©ãƒ??VERSIONæ–?—å?ã‚’è¨å®šã—ã¾ã™ã? {@value} */ 091 private static final String VERSION = "4.0.0.0 (2005/01/31)" ; 092 093 private static final long serialVersionUID = 400020050131L ; 094 095 private transient List<Attributes> values = null; 096 097 private String startKey = "where"; 098 private String whereWord = ""; 099 100 /** 101 * Taglibã®é–‹å§‹ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doStartTag() ã‚?オーãƒã?ライドã—ã¾ã™ã? 102 * 103 * @return 後続å?ç??æŒ?¤º( EVAL_BODY_INCLUDE ) 104 */ 105 @Override 106 public int doStartTag() { 107 return( EVAL_BODY_INCLUDE ); // Body インクルーãƒ? extends TagSupport æ™? 108 } 109 110 /** 111 * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã? 112 * 113 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()ã§å‘¼ã¶ã€? 114 * 115 * @return 後続å?ç??æŒ?¤º 116 */ 117 @Override 118 public int doEndTag() { 119 debugPrint(); // 4.0.0 (2005/02/28) 120 jspPrint( makeSqlWhere() ); 121 122 return(EVAL_PAGE); 123 } 124 125 /** 126 * タグリブオブジェクトをリリースã—ã¾ã™ã? 127 * ã‚ャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨å®šã‚’行ã„ã¾ã™ã? 128 * 129 * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿ã‚°ã® release() メソãƒ?ƒ‰ã‚’ã?追åŠ? 130 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()ã§å‘¼ã¶ã€? 131 * 132 */ 133 @Override 134 protected void release2() { 135 super.release2(); 136 values = null; 137 startKey = "where"; 138 whereWord = ""; 139 } 140 141 /** 142 * å†?ƒ¨ã‚¿ã‚°ã® SqlAndTag / SqlAndTag よりã€å?ã€??カラãƒ??å€¤ã‚’æ›¸ãæ›ãˆã‚‹ 143 * 為ã®ã‚¢ãƒˆãƒªãƒ“ュートをå—ã‘å–ã‚‹ã€? 144 * 145 * è¤?•°ã®å€¤ã‚’å—ã‘å–ã£ã¦ã€å¾Œã»ã©ã€ã™ã¹ã¦ã®ã‚«ãƒ©ãƒ?«å¯¾ã—ã¦å‡¦ç?‚’行ã„ã¾ã™ã? 146 * 147 * @og.rev 3.1.0.0 (2003/03/20) Vector を使用ã—ã¦ã?‚‹ç®?‰€ã§ã€?žåŒæœŸã§ã‚‚æ§‹ã‚ãªã?®?‰€ã‚’ã?ArrayList ã«ç½®æ›ãˆã€? 148 * @og.rev 3.1.2.0 (2003/04/07) taglib パッケージå†?ƒ¨ã§ä½¿ç”¨ã—ã¦ã?‚‹ç®?‰€ã‚?protected 化ã™ã‚‹ã? 149 * 150 * @param attri 属æ?リスãƒ? 151 */ 152 protected void setAttributes( final Attributes attri ) { 153 if( values == null ) { values = new ArrayList<Attributes>(); } 154 values.add( attri ); 155 } 156 157 /** 158 * ã€TAG】SQLæ¡ä»¶å¥ã®æœ??ã®æ¼”ç®—åã‚’æŒ?®šã—ã¾ã?åˆæœŸå€¤:where)ã€? 159 * 160 * @og.tag SQLæ¡ä»¶å¥ã®æœ??ã®æ¼”ç®—åã‚’æŒ?®šã—ã¾ã™ã? 161 * 162 * @param skey æ¡ä»¶å¥ã®æœ??ã®æ¼”ç®—å? 163 */ 164 public void setStartKey( final String skey ) { 165 String key = getRequestParameter( skey ); 166 if( key != null && key.length() > 0 ) { startKey = key; } 167 } 168 169 /** 170 * SqlAndTag / SqlOrTag ã§æŒ?®šã•ã‚ŒãŸæ¡ä»¶ã‚’å?ã«ã€WHEREå¥ã‚’作æ?ã—ã¾ã™ã? 171 * 172 * @return WHEREå¥ã®æ–?—å? 173 */ 174 private String makeSqlWhere() { 175 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 176 if( values != null ) { 177 for( int i=0; i<values.size(); i++ ) { 178 Attributes attri = values.get( i ); 179 String keyWord = attri.get( "keyWord" ); 180 String value = attri.get( "value" ); 181 if( rtn.length() == 0 ) { keyWord = this.startKey; } 182 rtn.append( " " ); 183 rtn.append( keyWord ); 184 rtn.append( " " ); 185 rtn.append( value ); 186 } 187 } 188 rtn.append( " " ); 189 whereWord = rtn.toString(); 190 return whereWord; 191 } 192 193 /** 194 * ã‚¿ã‚°ã®åç§°ã‚’ã?è¿”ã—ã¾ã™ã? 195 * 自åˆ??身ã®ã‚¯ãƒ©ã‚¹åよりã?自動的ã«å–り出ã›ãªã?Ÿã‚ã?ã“ã?メソãƒ?ƒ‰ã‚’オーãƒã?ライドã—ã¾ã™ã? 196 * 197 * @og.rev 4.0.0.0 (2005/01/31) æ–°è¦è¿½åŠ? 198 * 199 * @return ã‚¿ã‚°ã®åç§° 200 */ 201 @Override 202 protected String getTagName() { 203 return "where" ; 204 } 205 206 /** 207 * ã“ã?オブジェクトã?æ–?—å?表ç¾ã‚’è¿”ã—ã¾ã™ã? 208 * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã? 209 * 210 * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?—å?è¡¨ç¾ 211 */ 212 @Override 213 public String toString() { 214 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 215 .println( "VERSION" ,VERSION ) 216 .println( "startKey" ,startKey ) 217 .println( "whereWord" ,whereWord ) 218 .println( "Other..." ,getAttributes().getAttribute() ) 219 .fixForm().toString() ; 220 } 221 }