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