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.fukurou.util.HybsEntry;
021
022 import org.opengion.fukurou.util.StringUtil ;
023 import static org.opengion.fukurou.util.StringUtil.nval ;
024
025 /**
026 * WriteTableTag にパラメーターを渡す為のタグクラスですã?
027 *
028 * writeTable タグに対して、EXEC_SQL æƒ??ã‚??tableNameæƒ??を付加することができますã?
029 * WriteTable の、writerClass によって、使用できるキーが異なりますã?
030 * writerClass="XML"
031 * ã€??TableName ?šXML 形式ã? ROWSET の table 属æ?になりますã?
032 * ã€??First ?š最初に記載して、å?期å?ç�?ãƒ??タクリアç?を実行させる、EXEC_SQL æƒ??になりますã?
033 * ã€??Last ?š最後に記載してã€??目の設å®?整合æ?登録)を行う、EXEC_SQL æƒ??になりますã?
034 * ã€??MergeSql ?šこのSQLæ–?�§ UPDATEして、結果が0件ならINSERTを行う、MERGE_SQL æƒ??になりますã?
035 * writerClass="JSON"
036 * ã€??JsonName ?šJSON形式でã€??列をオブジェクトとしてまとめる場合に使ã�?�¾すã?
037 * ã€??LowerCase ?šカラãƒ?��(=パラメータå�?を小文字にする場合ã?true をセãƒ?ƒˆしまã�?初期値:false)ã€?
038 * writerClass="CalcDef"
039 * ã€??Size ?šレコードã?ãƒ??タ件数(初期値:25)
040 *
041 * 値は、value 属æ?でæŒ?®šするか、なければ BODY 部に記述しますã?
042 *
043 * tableNameæƒ??は、XMLファイルのROWSET属æ?にセãƒ?ƒˆすることで、XMLファイルの登録ãƒ??ブル名を
044 * æŒ?®šすることができますã?
045 * EXEC_SQL æƒ??とは、タブ区åˆ?‚ŠファイルやXML形式ファイルの先é?(key="First")
046 * またã?、最å¾?key="Last")に、SQLæ–?‚’記述することで、ファイル取り込み時ã?
047 * 前å?ç�??後å?ç�?‚’処ç�?�™る為のæƒ??ですã?
048 * key="MergeSql" で、MERGE_SQL æƒ??をセãƒ?ƒˆできますã?MERGE_SQL を登録するとã€?
049 * そã?SQLæ–?�§、UPDATEして、結果が0件ならINSERTを行いますã?
050 *
051 * こã?æƒ??は、è¤?•°件登録できるためã€??常の writeTable タグに属æ?を追åŠ?�™るとã€?
052 * è¤?›‘になるためã?è¤?•°登録できる用に、å?部にタグを持てる構é?にしますã?
053 *
054 * @og.formSample
055 * ●形式ï¼?
056 * <og:writeTableParam key="[First|Last|TableName]" >
057 * delete from GE12 where SYSTEM_ID='**' and KBSAKU='0'
058 * </og:writeTableParam
059 *
060 * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
061 *
062 * ●Tag定義??
063 * <og:writeTableParam
064 * key ○ã?TAG】パラメータとして渡すキーæƒ??([First|Last|MergeSql|TableName|Size|JsonName|LowerCase])を指定しま(å¿??)ã€?
065 * value 【TAG】パラメータとして渡す設定å?を指定しまã�?初期値:null)
066 * caseKey 【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null)
067 * caseVal 【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null)
068 * caseNN 【TAG】指定ã?値がã?null/ゼロæ–?—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true)
069 * caseNull 【TAG】指定ã?値がã?null/ゼロæ–?—å? の場合ã?、このタグは使用されまã�?初期値:true)
070 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
071 * > ... Body ...
072 * </og:writeTableParam>
073 *
074 * ●使用ä¾?
075 * <og:writeTable ?¥?¥?¥?¥?¥ >
076 * <og:writeTableParam
077 * key = "Tablename" value="GE12"
078 * />
079 * <og:writeTableParam
080 * key = "First" First:æœ??に登録
081 * >
082 * insert into GE12bk
083 * select * from GE12
084 * where SYSTEM_ID='**'
085 * </og:writeTableParam
086 * <og:writeTableParam
087 * key = "First" First:の?’番目に登録
088 * >
089 * delete from GE12 where SYSTEM_ID='**' and KBSAKU='0'
090 * </og:writeTableParam
091 * <og:writeTableParam
092 * key = "Last" Last:æœ?¾Œに登録
093 * >
094 * update GE12 set XXXX='YYYY' where SYSTEM_ID='**' and KBSAKU='0'
095 * </og:writeTableParam
096 * </og:writeTableParam
097 *
098 * @og.rev 4.0.0.0 (2005/01/31) 新規作æ?
099 * @og.rev 5.6.6.1 (2013/07/12) MERGE_SQL 対å¿?
100 * @og.group ファイル出åŠ?
101 *
102 * @version 4.0
103 * @author Kazuhiko Hasegawa
104 * @since JDK5.0,
105 */
106 public class WriteTableParamTag extends CommonTagSupport {
107 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
108 private static final String VERSION = "5.6.6.1 (2013/07/12)" ;
109
110 private static final long serialVersionUID = 566120130712L ;
111
112 // private static final String[] KEY_LIST = new String[] { "First","Last","TableName" };
113 // private static final String[] KEY_LIST = new String[] { "First","Last","TableName","Size" }; // 5.1.6.0 (2010/05/01)
114 // private static final String[] KEY_LIST = new String[] { "First","Last","TableName","Size","JsonName","LowerCase" }; // 5.6.0.3 (2012/01/24)
115 private static final String[] KEY_LIST = new String[] { "First","Last","MergeSql|","TableName","Size","JsonName","LowerCase" }; // 5.6.6.1 (2013/07/12)
116
117 private String key = null; // "First","Last","MergeSql|","TableName","Size","JsonName","LowerCase" のどれか
118 private String value = null ; // 実行するSQLæ–?—å?
119
120 /**
121 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
122 *
123 * @og.rev 5.6.6.1 (2013/07/12) caseKey 、caseVal 属æ?対å¿?
124 *
125 * @return 後続å?ç�??æŒ?¤º
126 */
127 @Override
128 public int doStartTag() {
129 // 5.6.6.1 (2013/07/12) caseKey 、caseVal 属æ?対å¿?
130 if( useTag() ) {
131 if( value == null ) { return( EVAL_BODY_BUFFERED ); } // Body を評価するã€? extends BodyTagSupport æ™?
132 // if( value != null ) {
133 // return(SKIP_BODY); // Body を評価しなã�?
134 // }
135 // else {
136 // return( EVAL_BODY_BUFFERED ); // Body を評価するã€? extends BodyTagSupport æ™?
137 // }
138 }
139 return ( SKIP_BODY ); // Body を評価しなã�?
140 }
141
142 /**
143 * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
144 *
145 * @return 後続å?ç�??æŒ?¤º(SKIP_BODY)
146 */
147 @Override
148 public int doAfterBody() {
149 value = getBodyString().trim();
150 return(SKIP_BODY);
151 }
152
153 /**
154 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
155 *
156 * @og.rev 5.6.6.1 (2013/07/12) caseKey 、caseVal 属æ?対å¿?
157 *
158 * @return 後続å?ç�??æŒ?¤º
159 */
160 @Override
161 public int doEndTag() {
162 debugPrint(); // 4.0.0 (2005/02/28)
163 // 5.6.6.1 (2013/07/12) caseKey 、caseVal 属æ?対å¿?
164 if( useTag() ) {
165 WriteTableTag writeTable = (WriteTableTag)findAncestorWithClass( this,WriteTableTag.class );
166 if( writeTable == null ) {
167 // String errMsg = "<b>こã?タグは、WriteTableTagのå†??(要ç´?に記述してくださいã€?/b>";
168 String errMsg = "<b>" + getTagName() + "タグは、WriteTableTagのå†??(要ç´?に記述してくださいã€?/b>";
169 throw new HybsSystemException( errMsg );
170 }
171
172 writeTable.addParam( new HybsEntry( key,value ) );
173 }
174 return(EVAL_PAGE);
175 }
176
177 /**
178 * タグリブオブジェクトをリリースしますã?
179 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
180 *
181 */
182 @Override
183 protected void release2() {
184 super.release2(); // 3.5.6.0 (2004/06/18) 追åŠ?抜けてã�?�Ÿ)
185 key = null; // KEY_LIST のどれか
186 value = null ; // 実行するSQLæ–?—å?
187 }
188
189 /**
190 * 【TAG】パラメータとして渡すキーæƒ??([First|Last|MergeSql||TableName|Size|JsonName|LowerCase])を指定しまã€?
191 *
192 * @og.tag
193 * WriteTable に渡すパラメータのキーæƒ??ですã?
194 * writerClass によって、使用できるキーが異なりますã?
195 * writerClass="XML"
196 * ã€??TableName ?šXML 形式ã? ROWSET の table 属æ?になりますã?
197 * ã€??First ?š最初に記載して、å?期å?ç�?ãƒ??タクリアç?を実行させる、EXEC_SQL æƒ??になりますã?
198 * ã€??Last ?š最後に記載してã€??目の設å®?整合æ?登録)を行う、EXEC_SQL æƒ??になりますã?
199 * ã€??MergeSql ?šこのSQLæ–?�§ UPDATEして、結果が0件ならINSERTを行う、MERGE_SQL æƒ??になりますã?
200 * writerClass="JSON"
201 * ã€??JsonName ?šJSON形式でã€??列をオブジェクトとしてまとめる場合に使ã�?�¾すã?
202 * ã€??LowerCase ?šカラãƒ?��(=パラメータå�?を小文字にする場合ã?true をセãƒ?ƒˆしまã�?初期値:false)ã€?
203 * writerClass="CalcDef"
204 * ã€??Size ?šレコードã?ãƒ??タ件数(初期値:25)
205 *
206 * 値は、value 属æ?でæŒ?®šするか、なければ BODY 部に記述しますã?
207 *
208 * @param prmKey パラメータとして渡すキーæƒ??([First|Last|MergeSql||TableName|Size|JsonName|LowerCase])
209 */
210 public void setKey( final String prmKey ) {
211 key = nval( getRequestParameter( prmKey ),key );
212 if( ! check( key, KEY_LIST ) ) {
213 String errMsg = "æŒ?®šã?値は、セãƒ?ƒˆできません。key=[" + key + "]" + HybsSystem.CR
214 + "次の中からæŒ?®šしてくださいã€?" + StringUtil.array2csv( KEY_LIST ) + ")" ;
215 throw new HybsSystemException( errMsg );
216 }
217 }
218
219 /**
220 * 【TAG】パラメータとして渡す設定å?を指定しまã�?初期値:null)ã€?
221 *
222 * @og.tag
223 * WriteTable に渡すパラメータの設定å?ですã?
224 * First と Last を指定したå?合ã?、XML 形式で出力すã‚?EXEC_SQL æƒ??になりますã?
225 * TableName の場合ã?、XML 形式ã? ROWSET の table 属æ?になりますã?
226 * 値は、value 属æ?でæŒ?®šするか、なければ BODY 部に記述しますã?
227 * BODY 部に記述されたå?合ã?、文字å?ã‚?trim() しますã?
228 * 設定å?は、value 属æ?が優先ですã?ここの値がã?null の場合ã?ã€?
229 * BODY 要ç´?‚’値として使用しますã?
230 *
231 * @param val パラメータとして渡す設定å?
232 */
233 public void setValue( final String val ) {
234 value = nval( getRequestParameter( val ),value );
235 }
236
237 /**
238 * こã?オブジェクトã?æ–?—å?表現を返しますã?
239 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
240 *
241 * @return こã?クラスのæ–?—å?表現
242 */
243 @Override
244 public String toString() {
245 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
246 .println( "VERSION" ,VERSION )
247 .println( "key" ,key )
248 .println( "value" ,value )
249 .println( "KEY_LIST" ,KEY_LIST )
250 .println( "Other..." ,getAttributes().getAttribute() )
251 .fixForm().toString() ;
252 }
253 }