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.HybsSystemException;
019 import org.opengion.fukurou.util.Attributes;
020 import org.opengion.fukurou.util.StringUtil;
021
022 import static org.opengion.fukurou.util.StringUtil.nval ;
023
024 /**
025 * 検索結果の DBTableModelオブジェクトã?カラãƒ??を操ä½?設定ã?変換、ADDなど)するタグですã?
026 *
027 * entry タグの子タグとして使用しますã?entryタグと、このcolumnSetタグの command
028 * が同じå?合ã?み、実行されますã?
029 * 処ç�?–¹法ã?、action でæŒ?®šしますã?
030 *
031 * @og.formSample
032 * ●形式ï¼?lt;og:entry command="…">
033 * <og:setColumn
034 * command ="…" : entryタグのcommandとä¸??する場合に実è¡?
035 * columnId ="…" : 処ç�?‚’行うカラãƒ?¼©?¤を指å®?å¿??,è¤?•°æŒ?®š可)
036 * action ="…" : 処ç�?–¹法をæŒ?®?
037 * value ="…" : 設定するå?を指å®?action="TBLSET"のみ[カラãƒ?��]使用可能)
038 * conditionKey ="…" : 条件判定するカラãƒ?¼©?¤を指å®?初期値は columnId )
039 * conditionList ="…" : 条件判定するå?のリストをã€?|"で区åˆ?�£て登録(初期値は、無条件)
040 * />
041 * </og:entry>
042 * ●body?šなã�?
043 *
044 * ●Tag定義??
045 * <og:columnSet
046 * command 【TAG】コマンãƒ?INSERT/COPY/MODIFY/DELETE/ENTRY/CHANGE/RESET/ALLRESET/ALLACTION/RESETDATA/INSERTONE/REALDELETE/REQENTRY)を設定しまã�?
047 * columnId ○ã?TAG】カラãƒ?¼©?¤をセãƒ?ƒˆしまã�?è¤?•°æŒ?®š時は、カンマ区åˆ?‚Šæ–?—で設定すã‚?(å¿??)ã€?
048 * value 【TAG】å?をセãƒ?ƒˆしまã�?
049 * action 【TAG】アクション(DEFAULT/CLEAR/ADD/SET/NULLSET/LOWER/UPPER/COPY/TBLSET//WRTCTRL/DBMENU/REQSET/SEQSET)をセãƒ?ƒˆしまã�?
050 * conditionKey 【TAG】条件判定するカラãƒ?¼©?¤を指定しまã�?初期値は columnId )
051 * conditionList 【TAG】条件判定するå?のリストをã€?|"で区åˆ?�£て登録しまã�?初期値:無条件)
052 * caseKey 【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null) 5.7.7.2 (2014/06/20)
053 * caseVal 【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null) 5.7.7.2 (2014/06/20)
054 * caseNN 【TAG】指定ã?値がã?null/ゼロæ–?—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true) 5.7.7.2 (2014/06/20)
055 * caseNull 【TAG】指定ã?値がã?null/ゼロæ–?—å? の場合ã?、このタグは使用されまã�?初期値:true) 5.7.7.2 (2014/06/20)
056 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
057 * />
058 *
059 * ●使用ä¾?
060 * <og:entry command="{@command}" >
061 * <og:columnSet command="{@command}" columnId="ECNO" action="CLEAR" />
062 * <og:columnSet command="{@command}" columnId="JYOKYO" action="SET" value="1" />
063 * </og:entry>
064 *
065 * <og:entry command="MODIFY" rows="1" >
066 * <og:columnSet command="MODIFY" columnId="key" action="TBLSET" value ="[key][lang]"/>
067 * </og:entry>
068 *
069 * command属æ? は、entryタグのcommand属æ?と同ä¸??場合ã?み、å?ç�?�—ますã?
070 * [command属æ?]
071 * INSERT 新è¦?
072 * COPY �?
073 * MODIFY 変更
074 * DELETE 削除
075 * ENTRY エントリー
076 * CHANGE チェンジ
077 * RESET リセãƒ?ƒˆ
078 * ALLRESET 全件リセãƒ?ƒˆ
079 * ALLACTION オールアクション
080 * RESETDATA リセãƒ?ƒˆãƒ??タ
081 * INSERTONE 新è¦?1行ã?み)
082 * REALDELETE 物ç�?‰Š除
083 * REQENTRY リクエスト変数設å®?
084 *
085 * [action属æ?]
086 * DEFAULT カラãƒ?ƒªソースで定義した初期値をセãƒ?ƒˆしますã?
087 * CLEAR 値をクリア(ゼロストリング "" )しますã?
088 * ADD 現在の値ã‚??‹ï¼?しますã? 0 â‡?1 , A â‡?B , 9 â‡?10。value属æ?と併用すれば、指定ã?値を加算できますã?
089 * SET value で設定したå?ã‚?新しい値として登録しますã?
090 * NULLSET å…??値ã�?NULL の場合だけã?value で設定した新しい値を登録しますã?
091 * LOWER 小文字に変換しますã?
092 * UPPER 大æ–?—に変換しますã?
093 * COPY value にコピã?å…??カラãƒ?Dをセãƒ?ƒˆすれば、その値を代入しますã?
094 * TBLSET DBTableModel のå†?®¹を取り込んでæŒ?®šã? columnId カラãƒ?�«設定しますã?
095 * [カラãƒ?��] でæŒ?®šできますã?
096 * またã?これはæ–?—å?を解析してã€?value を作æ?しますã?で,æ–?—å?連結等に使用できますã?
097 * WRTCTRL writableControl を使用したカラãƒ?ƒ‡ータの先é?アンãƒ??バã?を削除しますã?
098 * DBMENU DBMENUでパラメータ設å®?コロン連結文å?を使用したカラãƒ?ƒ‡ータの先é?ãƒ??タのみにしますã?
099 * REQSET valueでæŒ?®šしたカラãƒ??値をキーに、リクエスト変数から値を取出しã?セãƒ?ƒˆしますã?
100 * SEQSET valueの初期値を利用してã€?¼‘レコードごとにã€?¼‹1したå?をセãƒ?ƒˆしますã?
101 * PREFIX valueの値を後ろから検索しã?æŒ?®šã?カラãƒ??の前半部åˆ?‚’取得しまã�?記号は含みません)ã€?
102 * SUFIX valueの値を後ろから検索しã?æŒ?®šã?カラãƒ??の後半部åˆ?‚’取得しまã�?記号は含みません)ã€?
103 * そã?ä»? カラãƒ??DBType の valueAction メソãƒ?ƒ‰を呼び出しますã?自由に設定可能ですã?
104 *
105 * @og.group 画面登録
106 *
107 * @version 4.0
108 * @author Kazuhiko Hasegawa
109 * @since JDK5.0,
110 */
111 public class ColumnSetTag extends CommonTagSupport {
112 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
113 private static final String VERSION = "5.7.7.2 (2014/06/20)" ;
114
115 private static final long serialVersionUID = 577220140620L ;
116
117 private String columnId = null;
118 private String conditionKey = null;
119
120 /**
121 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
122 *
123 * @og.rev 3.6.0.6 (2004/10/22) columnNo に伴なã�?‰Š除
124 * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属æ?を追åŠ?
125 *
126 * @return 後続å?ç�??æŒ?¤º(SKIP_BODY)
127 */
128 @Override
129 public int doStartTag() {
130 // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属æ?を追åŠ?
131 if( useTag() ) {
132 EntryTag entry = (EntryTag)findAncestorWithClass( this,EntryTag.class );
133 if( entry == null ) {
134 String errMsg = "<b>" + getTagName() + "タグは、EntryTag のBODY部に記述されるå¿?¦�がありますã?</b>";
135 throw new HybsSystemException( errMsg );
136 }
137
138 Attributes standardAttri = getAttributes();
139 String[] clms = StringUtil.csv2Array( columnId );
140 for( int i=0; i<clms.length; i++ ) {
141 Attributes attri = new Attributes( standardAttri );
142 attri.set( "columnId", clms[i] );
143 // conditionKey ã�?null の場合ã?、columnId が設定されるã€?
144 attri.set( "conditionKey", nval( conditionKey,clms[i] ) );
145 entry.setAttributes( attri );
146 }
147 }
148
149 return SKIP_BODY ;
150 }
151
152 /**
153 * タグリブオブジェクトをリリースしますã?
154 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
155 *
156 * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
157 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
158 * @og.rev 3.6.0.6 (2004/10/22) columnNo に伴なã�?¤‰更
159 *
160 */
161 @Override
162 protected void release2() {
163 super.release2();
164 columnId = null;
165 conditionKey = null;
166 }
167
168 /**
169 * 【TAG】コマンãƒ?INSERT,COPY,MODIFY,DELETE,ENTRY,CHANGE,RESET,ALLACTION)を設定しますã?
170 *
171 * @og.tag
172 * 上位ã? EntryTag のコマンドとä¸??した場合ã?み、å?ç�?�•れますã?
173 * ここでは、コマンド文字å?の整合æ?チェãƒ?‚¯は行ってã�?�¾せんã€?
174 *
175 * @param command コマンãƒ?
176 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.EntryTag.CMD_INSERT">コマンド定数</a>
177 */
178 public void setCommand( final String command ) {
179 set( "command",getRequestParameter( command ) );
180 }
181
182 /**
183 * 【TAG】å?をセãƒ?ƒˆしますã?
184 *
185 * @og.tag
186 * 設定するå?をセãƒ?ƒˆしますã?
187 *
188 * @param value 値
189 */
190 public void setValue( final String value ) {
191 set( "value",getRequestParameter( value ) );
192 }
193
194 /**
195 * 【TAG】アクション(DEFAULT/CREAR/ADD/SET/NULLSET/LOWER/UPPER/COPY/TBLSET/WRTCTRL/DBMENU/REQSET/SEQSET/PREFIX/SUFIX)をセãƒ?ƒˆしますã?
196 *
197 * @og.tag
198 * ここでは、アクションæ–?—å?の整合æ?チェãƒ?‚¯を行っておりませんã€?
199 *
200 * DEFAULT カラãƒ?ƒªソースで定義した初期値をセãƒ?ƒˆしますã?
201 * CREAR 値をクリア(ゼロストリング "" )しますã?
202 * ADD 現在の値ã‚??‹ï¼?しますã? 0 â‡?1 , A â‡?B , 9 â‡?10。value属æ?と併用すれば、指定ã?値を加算できますã?
203 * SET value で設定したå?ã‚?新しい値として登録しますã?
204 * NULLSET å…??値ã�?NULL の場合だけã?value で設定した新しい値を登録しますã?
205 * LOWER 小文字に変換しますã?
206 * UPPER 大æ–?—に変換しますã?
207 * COPY value にコピã?å…??カラãƒ?Dをセãƒ?ƒˆすれば、その値を代入しますã?
208 * TBLSET DBTableModel のå†?®¹を取り込んでæŒ?®šã? columnId カラãƒ?�«設定しますã?[カラãƒ?��] でæŒ?®šできますã?
209 * WRTCTRL writableControl を使用したカラãƒ?ƒ‡ータの先é?アンãƒ??バã?を削除しますã?
210 * DBMENU DBMENUでパラメータ設å®?コロン連結文å?を使用したカラãƒ?ƒ‡ータの先é?ãƒ??タのみにしますã?
211 * REQSET valueでæŒ?®šしたカラãƒ??値をキーに、リクエスト変数から値を取出しã?セãƒ?ƒˆしますã?
212 * SEQSET valueの初期値を利用してã€?¼‘レコードごとにã€?¼‹1したå?をセãƒ?ƒˆしますã?
213 * PREFIX valueの値を後ろから検索しã?æŒ?®šã?カラãƒ??の前半部åˆ?‚’取得しまã�?記号は含みません)ã€?
214 * SUFIX valueの値を後ろから検索しã?æŒ?®šã?カラãƒ??の後半部åˆ?‚’取得しまã�?記号は含みません)ã€?
215 * そã?ä»? カラãƒ??DBType の valueAction メソãƒ?ƒ‰を呼び出しますã?自由に設定可能ですã?
216 *
217 * @param action アクションæ–?—å?
218 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.EntryTag.ACT_DEFAULT">アクション定数</a>
219 */
220 public void setAction( final String action ) {
221 set( "action",getRequestParameter( action ) );
222 }
223
224 /**
225 * 【TAG】カラãƒ?¼©?¤をセãƒ?ƒˆしまã�?è¤?•°æŒ?®š時は、カンマ区åˆ?‚Šæ–?—で設定すã‚?ã€?
226 *
227 * @og.tag
228 * 処ç�?‚’適用するカラãƒ?¼©?¤を指定しますã?
229 * 全く同じå?容を設定するå?合には、カラãƒ?��をC?³?¶形å¼?カンマ区åˆ?‚Š)で
230 * è¤?•°æŒ?®šすることが可能ですã?
231 *
232 * @og.rev 3.6.0.6 (2004/10/22) columnNo に伴なã�?¤‰更
233 *
234 * @param clmid カラãƒ?¼©?¤
235 */
236 public void setColumnId( final String clmid ) {
237 columnId = getRequestParameter( clmid );
238 }
239
240 /**
241 * 【TAG】条件判定するカラãƒ?¼©?¤を指定しまã�?初期値は columnId )ã€?
242 *
243 * @og.tag
244 * æŒ?®šã?カラãƒ?¼©?¤の値と、conditionList の値を比è¼?�—てã€?
245 * 存在する場合ã?、action処ç�?‚’実行しますã?
246 * 例えば、å?期å?設å®?action="DEFAULT")で、å?ã�?"0" の場合だけ適用するような
247 * ケースに使用できますã?
248 * æŒ?®šしなã�??合ã?、columnId と同じキーになりますã?
249 * 注意:columnId はã€?¼£?³?¶形式でè¤?•°同時にæŒ?®šできますã?そã?場合ã?ã€?
250 * conditionKey には、è¤?•°設定する機è?はありませんので、å?カラãƒ?�«
251 * 同ä¸?‚«ラãƒ?‚’使用する場合ã?、conditionKey に値を設定できますã?
252 * 値を設定しなã�??合ã?、è?動的に、columnId と同ä¸?�«なりますã?
253 *
254 * @og.rev 3.6.0.6 (2004/10/22) 新規追åŠ?
255 *
256 * @param key カラãƒ?¼©?¤
257 * @see #setConditionList( String )
258 */
259 public void setConditionKey( final String key ) {
260 conditionKey = nval( getRequestParameter( key ),null ) ;
261 }
262
263 /**
264 * 【TAG】条件判定するå?のリストをã€?|"で区åˆ?�£て登録しまã�?初期値:無条件)ã€?
265 *
266 * @og.tag
267 * conditionKey とペアでæŒ?®šしますã?ここには、カラãƒ??設定å?のリストを
268 * æŒ?®šすることで、è¤?•°条件(?¯?²結合)での比è¼?‚’行い、リストにカラãƒ??ã�?
269 * 存在する場合ã?み、action処ç�?‚’実行しますã?
270 * 設定しなã�??合ã?、無条件に実行しますã?
271 *
272 * @og.rev 3.6.0.6 (2004/10/22) 新規追åŠ?
273 *
274 * @param list 条件判定するå?("|"区åˆ?
275 * @see #setConditionKey( String )
276 */
277 public void setConditionList( final String list ) {
278 set( "conditionList","|" + getRequestParameter( list ) + "|" );
279 }
280
281 /**
282 * 【TAG】カラãƒ?¼©?¤が存在しなã�?�¨きに無視するかどã�?�‹を指定しまã�?初期値:true)ã€?
283 *
284 * @og.tag
285 * カラãƒ?‚»ãƒ?ƒˆする場合ã?、DBTableModel に存在するカラãƒ?�«対してのみã€?
286 * 処ç�?‚’適用するべきでã€??常存在しなã�?‚«ラãƒ?‚’使用した場合ã?、Exception ã�?
287 * throw されますã?(strictCheck="true" 初期値の動作ですã?)
288 * ところがã?動的ãƒ??ブル検索などでカラãƒ?�Œ不特定な場合ã?DBTableModel に
289 * 存在しなã�??合に、無視したい場合がありますã?そã?場合ã?、strictCheck="false"
290 * に設定すると、カラãƒ?�Œ存在しなã�??合ã?、エラーにせず、無視しますã?
291 * 初期値は、true:厳格に処ç�?�™ã‚?ですã?
292 *
293 * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
294 *
295 * @param strict 無視するかどã�?�‹[true/false]
296 */
297 public void setStrictCheck( final String strict ) {
298 set( "strictCheck",getRequestParameter( strict ) );
299 }
300
301 /**
302 * こã?オブジェクトã?æ–?—å?表現を返しますã?
303 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
304 *
305 * @return こã?クラスのæ–?—å?表現
306 */
307 @Override
308 public String toString() {
309 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
310 .println( "VERSION" ,VERSION )
311 .println( "columnId" ,columnId )
312 .println( "conditionKey",conditionKey )
313 .println( "Other..." ,getAttributes().getAttribute() )
314 .fixForm().toString() ;
315 }
316 }