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.db.DBColumn;
020 import org.opengion.hayabusa.db.DBTableModel;
021 import org.opengion.fukurou.util.Attributes;
022 import org.opengion.fukurou.util.ErrorMessage;
023 import org.opengion.fukurou.model.ArrayDataModel;
024 import org.opengion.fukurou.model.Formatter;
025
026 import static org.opengion.fukurou.util.StringUtil.nval ;
027
028 import java.util.List;
029 import java.util.ArrayList;
030 import java.util.Enumeration;
031 import java.util.Locale ;
032
033 import java.io.ObjectOutputStream;
034 import java.io.ObjectInputStream;
035 import java.io.IOException;
036
037 /**
038 * 検索結果の DBTableModelオブジェクトに値を設定するタグですã?
039 *
040 * columnSet と共に使用する場合ã?、entryタグ の command属æ?と、columnSetタグ の command属æ?ã�?
041 * ä¸??した場合ã?み、å?ç�?�•れますã?
042 * entryタグは、そのコマンドにより、DBTableModelオブジェクトã?値を設定しますã?
043 * たとえã?、command="INSERT" ならã?ã€?¼‘行å?のãƒ??タを選択された行番号の次に挿入しますã?
044 * またã?追åŠ??変更、削除されたã?DBTableModelオブジェクãƒ?でもã?å†?ƒ¨にはå…??ãƒ??タã‚?
045 * 持ってã�?‚‹ため、command="RESET" でå…??状態に戻すことが可能ですã?
046 *
047 * @og.formSample
048 * ●形式ï¼?
049 * ・<og:entry command="…">
050 * <og:columnSet command="…" />
051 * </og:entry>
052 * ・<og:entry command="…" />
053 * ?¥?¥?¥columnSetを使わなã�??合でもresult.jspから次画面(insert,modify,copy.jspç?に
054 * にDBTableModelをもってã�?��場合には、å¿?�š?’を書ã�?�¦くださいã€?
055 * (取消ã?ときã?エンジンå†?�§DBTableModelを操作するã?に使用する為)
056 * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
057 *
058 * ●Tag定義??
059 * <og:entry
060 * command ○ã?TAG】コマンãƒ?INSERT/COPY/MODIFY/DELETE/ENTRY/CHANGE/RESET/ALLRESET/ALLACTION/RESETDATA/INSERTONE/REALDELETE/REQENTRY)を設定しまã�?å¿??)
061 * scope 【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
062 * repeatCount 【TAG】指定ã?回数åˆ?� けã?繰り返し処ç�?‚’行う回数を指定しまã�?初期値:1)
063 * tableId 【TAGã€?通常使ã�?�¾せん)sessionからæ‰?¾—すã‚?DBTableModelオブジェクトã? ID
064 * useConsistency 【TAG】Consistency キー による整合æ?チェãƒ?‚¯を行うかどã�?�‹を指定しまã�?初期値:true)
065 * selectedAll 【TAG】データをå?件選択済みとして処ç�?�™るかどã�?�‹[true/false]を指定しまã�?初期値:false)
066 * strictCheck 【TAG】カラãƒ?¼©?¤の存在チェãƒ?‚¯を行うかどã�?�‹[true/false]を指定しまã�?初期値:true)
067 * noTransition 【TAGã€?通常は使ã�?�¾せん)画面遷移を行わなã�?½¢式ã?登録方法を使用するかをæŒ?®šしまã�?
068 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
069 * > ... Body ...
070 * </og:entry>
071 *
072 * ●使用ä¾?
073 * <og:entry command="{@command}" >
074 * <og:columnSet command="{@command}" columnId="ECNO" action="CLEAR" />
075 * <og:columnSet command="{@command}" columnId="JYOKYO" action="SET" value="1" />
076 * </og:entry>
077 *
078 * <og:entry command="MODIFY" rows="1" >
079 * <og:columnSet command="MODIFY" columnId="key" action="TBLSET" value="[key][lang]"/>
080 * </og:entry>
081 *
082 * action="ADD" は、DBTypeに依存した方法で、既存ã?値をã??‹ï¼?しますã?
083 * <og:entry command="{@command}" repeatCount="5" >
084 * <og:columnSet command="{@command}" columnId="YKNO" action="ADD" />
085 * </og:entry>
086 *
087 * action="ADD" は、DBTypeに依存した方法で、既存ã?値に、value の値を加算しますã?
088 * <og:entry command="{@command}" repeatCount="5" >
089 * <og:columnSet command="{@command}" columnId="YKNO" action="ADD" value="5" />
090 * </og:entry>
091 *
092 * command属æ? は、columnSetタグのcommand属æ?と同ä¸??場合ã?み、å?ç�?�—ますã?
093 * [command属æ?]
094 * INSERT 新è¦?
095 * COPY �?
096 * MODIFY 変更
097 * DELETE 削除
098 * ENTRY エントリー
099 * CHANGE チェンジ
100 * RESET リセãƒ?ƒˆ
101 * ALLRESET 全件リセãƒ?ƒˆ
102 * ALLACTION オールアクション
103 * RESETDATA リセãƒ?ƒˆãƒ??タ
104 * INSERTONE 新è¦?1行ã?み)
105 * REALDELETE 物ç�?‰Š除
106 * REQENTRY リクエスト変数設å®?
107 *
108 * command属æ? は、columnSetタグでæŒ?®šしますã?
109 * [action属æ?]
110 * DEFAULT カラãƒ?ƒªソースで定義した初期値をセãƒ?ƒˆしますã?
111 * CLEAR 値をクリア(ゼロストリング "" )しますã?
112 * ADD 現在の値ã‚??‹ï¼?しますã? 0 â‡?1 , A â‡?B , 9 â‡?10。value属æ?と併用すれば、指定ã?値を加算できますã?
113 * SET value で設定したå?ã‚?新しい値として登録しますã?
114 * NULLSET å…??値ã�?NULL の場合だけã?value で設定した新しい値を登録しますã?
115 * LOWER 小文字に変換しますã?
116 * UPPER 大æ–?—に変換しますã?
117 * COPY value にコピã?å…??カラãƒ?Dをセãƒ?ƒˆすれば、その値を代入しますã?
118 * TBLSET DBTableModel のå†?®¹を取り込んでæŒ?®šã? columnId カラãƒ?�«設定しますã?[カラãƒ?��] でæŒ?®šできますã?
119 * またã?これはæ–?—å?を解析してã€?value を作æ?しますã?で,æ–?—å?連結等に使用できますã?
120 * WRTCTRL writableControl を使用したカラãƒ?ƒ‡ータの先é?アンãƒ??バã?を削除しますã?
121 * DBMENU DBMENUでパラメータ設å®?コロン連結文å?を使用したカラãƒ?ƒ‡ータの先é?ãƒ??タのみにしますã?
122 * REQSET valueでæŒ?®šしたカラãƒ??値をキーに、リクエスト変数から値を取出しã?セãƒ?ƒˆしますã?
123 * SEQSET valueの初期値を利用してã€?¼‘レコードごとにã€?¼‹1したå?をセãƒ?ƒˆしますã?
124 * PREFIX valueの値を後ろから検索しã?æŒ?®šã?カラãƒ??の前半部åˆ?‚’取得しまã�?記号は含みません)ã€?
125 * SUFIX valueの値を後ろから検索しã?æŒ?®šã?カラãƒ??の後半部åˆ?‚’取得しまã�?記号は含みません)ã€?
126 * そã?ä»? カラãƒ??DBType の valueAction メソãƒ?ƒ‰を呼び出しますã?自由に設定可能ですã?
127 *
128 * [strictCheck属æ?]は、カラãƒ?¼©?¤の存在チェãƒ?‚¯を行うかどã�?�‹を指定しまã�?初期値:true)
129 * true カラãƒ?¼©?¤がDBTableModel に存在しなã�??合ã?、エラーになるã?
130 * false カラãƒ?¼©?¤がDBTableModel に存在しなã�??合ã?、無視するã?
131 *
132 * @og.group 画面登録
133 *
134 * @version 4.0
135 * @author Kazuhiko Hasegawa
136 * @since JDK5.0,
137 */
138 public class EntryTag extends CommonTagSupport {
139 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
140 private static final String VERSION = "5.6.6.1 (2013/07/12)" ;
141
142 private static final long serialVersionUID = 566120130712L ;
143
144 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 新è¦?{@value} */
145 public static final String CMD_INSERT = "INSERT" ;
146 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? è¤?? {@value} */
147 public static final String CMD_COPY = "COPY" ;
148 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 変更 {@value} */
149 public static final String CMD_MODIFY = "MODIFY" ;
150 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 削除 {@value} */
151 public static final String CMD_DELETE = "DELETE" ;
152 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? エントリー {@value} */
153 public static final String CMD_ENTRY = "ENTRY" ;
154 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? チェンジ {@value} */
155 public static final String CMD_CHANGE = "CHANGE" ;
156 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? リセãƒ?ƒˆ {@value} */
157 public static final String CMD_RESET = "RESET" ;
158 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 全件リセãƒ?ƒˆ {@value} */
159 public static final String CMD_ALLRESET = "ALLRESET" ; // 3.5.6.3 (2004/07/12)
160 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? オールアクション{@value} */
161 public static final String CMD_ALLACTION = "ALLACTION" ;
162 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? リセãƒ?ƒˆ(ãƒ??タのみ){@value} */
163 public static final String CMD_RESETDATA = "RESETDATA" ; // 4.3.3.0 (2008/10/01)
164 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 追åŠ?1行ã?み){@value} */
165 public static final String CMD_INSERTONE = "INSERTONE" ; // 5.1.5.0 (2010/04/01)
166 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 物ç�?‰Š除 {@value} */
167 public static final String CMD_REALDELETE = "REALDELETE" ; // 5.1.6.0 (2010/05/01)
168 /** command 引数に渡す事ã?出来ã‚?コマンãƒ? リクエスト変数設å®?{@value} */
169 public static final String CMD_REQENTRY = "REQENTRY" ; // 5.6.1.2 (2013/02/22)
170
171 // 3.5.6.3 (2004/07/12) CMD_ALLRESET 追åŠ?
172 // 4.3.3.0 (2008/10/01) CMD_RESETDATA 追åŠ?
173 // 5.1.5.0 (2010/04/01) CMD_INESRTONE 追åŠ?
174 // 5.1.6.0 (2010/05/01) CMD_REALDELETE 追åŠ?
175 private static final String[] COMMAND_LIST = new String[] {
176 CMD_INSERT,CMD_COPY,CMD_MODIFY,CMD_DELETE,CMD_ENTRY,CMD_CHANGE,CMD_ALLACTION,CMD_RESET,CMD_ALLRESET,CMD_RESETDATA,CMD_INSERTONE,CMD_REALDELETE,CMD_REQENTRY };
177
178 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? 初期値:{@value} */
179 public static final String ACT_DEFAULT = "DEFAULT" ;
180 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? クリア {@value} */
181 public static final String ACT_CLEAR = "CLEAR" ;
182 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? ?‹ï¼?{@value} */
183 public static final String ACT_ADD = "ADD" ;
184 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? 小文字化{@value} */
185 public static final String ACT_LOWER = "LOWER" ;
186 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? 大æ–?—化{@value} */
187 public static final String ACT_UPPER = "UPPER" ;
188 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? コピã? {@value} */
189 public static final String ACT_COPY = "COPY" ;
190 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? セãƒ?ƒˆ {@value} */
191 public static final String ACT_SET = "SET" ;
192 // 3.4.0.3 (2003/09/10) NULLSET Action を追åŠ?�—ますã?
193 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? NULLセãƒ?ƒˆ {@value} */
194 public static final String ACT_NULLSET = "NULLSET" ;
195 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? ãƒ??ブルセãƒ?ƒˆ {@value} */
196 public static final String ACT_TBLSET = "TBLSET" ;
197 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? ライトコントロール {@value} */
198 public static final String ACT_WRTCTRL = "WRTCTRL" ; // 3.8.1.5 (2006/03/30)
199 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? DBメニュー {@value} */
200 public static final String ACT_DBMENU = "DBMENU" ; // 3.8.5.3 (2006/08/07)
201 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? リクエストå?セãƒ?ƒˆ {@value} */
202 public static final String ACT_REQSET = "REQSET" ; // 5.4.2.1 (2011/12/09)
203 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? 連番値セãƒ?ƒˆ {@value} */
204 public static final String ACT_SEQSET = "SEQSET" ; // 5.6.5.2 (2013/06/21)
205 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? PREFIX値セãƒ?ƒˆ {@value} */
206 public static final String ACT_PREFIX = "PREFIX" ; // 5.6.6.1 (2013/07/12)
207 /** action 引数に渡す事ã?出来ã‚?アクションコマンãƒ? SUFIX値セãƒ?ƒˆ {@value} */
208 public static final String ACT_SUFIX = "SUFIX" ; // 5.6.6.1 (2013/07/12)
209
210 // 3.5.6.0 (2004/06/18) すべてã‚?protected から private に変更しますã?
211 private String tableId = HybsSystem.TBL_MDL_KEY;
212 private transient DBTableModel table = null;
213 private String command = null;
214 private int[] rowNo = null;
215 private List<Attributes> values = null;
216 // private transient Formatter format = null;
217
218 // 3.5.4.2 (2003/12/15) æŒ?®šã?回数繰り返す機è?を追åŠ?�—ますã?
219 private int repeatCount = 1;
220
221 // 3.5.5.7 (2004/05/10) Consistency キー による整合æ?チェãƒ?‚¯を行うかどã�?�‹を指定しますã?
222 private boolean useConsistency = HybsSystem.sysBool( "USE_CONSISTENCY" );
223
224 // 3.8.1.1 (2005/11/21) 全件選択されたこととして、å?ç�?�—ますã?
225 private boolean selectedAll = false;
226
227 // 3.5.6.4 (2004/07/16) RESET コマンドã?ãƒ?ƒ•ォルトå?ç�?に、ALLRESET ã‚?
228 // 使用するかどã�?�‹を指定しまã�?初期値:false(使用しなã�?)ã€?
229 private final boolean RESET_ACTION_ALL_USE = HybsSystem.sysBool( "RESET_ACTION_ALL_USE" );
230
231 // 4.0.0 (2006/09/31) カラãƒ?¼©?¤の存在チェãƒ?‚¯を行うかどã�?�‹を指定しますã?
232 private boolean strictCheck = true;
233
234 private boolean noTransition= false; // 4.3.3.0 (2008/10/01) 追åŠ?
235
236 // 5.6.5.2 (2013/06/21) SEQSET アクションのカウンター
237 private int seqsetCnt = 0;
238
239 /**
240 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
241 *
242 * @og.rev 5.1.9.0 (2010/08/01) 戻りå?をã?EVAL_BODY_INCLUDE â†?EVAL_BODY_BUFFERED に変更
243 *
244 * @return 後続å?ç�??æŒ?¤º
245 */
246 @Override
247 public int doStartTag() {
248 // int rtn = EVAL_BODY_INCLUDE;
249 int rtn = EVAL_BODY_BUFFERED; // 5.1.9.0 (2010/08/01) 変更
250
251 if( ! check( command, COMMAND_LIST ) ) {
252 rtn = SKIP_BODY;
253 }
254
255 return rtn;
256 }
257
258 /**
259 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
260 *
261 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
262 * @og.rev 3.5.5.5 (2004/04/23) 登録時ã? 整合æ?パラメータチェãƒ?‚¯を行いますã?
263 * @og.rev 3.5.5.6 (2004/04/27) JSP画面の作æ?不å?合ã?ENTRY系で、command を投げた場合ã?、無視しますã?
264 * @og.rev 3.5.5.7 (2004/05/10) Consistency キー による整合æ?チェãƒ?‚¯を行うかどã�?�‹を指定しますã?
265 * @og.rev 3.5.5.8 (2004/05/20) Consistency キー による整合æ?チェãƒ?‚¯ã‚?checkConsistency() にé›?´?�—ますã?
266 * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェãƒ?‚¯を行いますã?
267 * @og.rev 4.3.3.0 (2008/10/01) noTransition 属æ?を追åŠ?�—ますã?
268 * @og.rev 4.3.8.0 (2009/08/01) noTransition値取得ã?メソãƒ?ƒ‰名変更
269 * @og.rev 5.1.3.0 (2010/02/01) noTransitionのコントロールは、requestで行うã€?
270 *
271 * @return 後続å?ç�??æŒ?¤º
272 */
273 @Override
274 public int doEndTag() {
275 debugPrint(); // 4.0.0 (2005/02/28)
276 // noTransition = isNoTransitionRequest() || noTransition; // 4.3.3.0 (2008/10/01) 追åŠ?
277 // noTransition = isNoTransitionSession() || noTransition; // 4.3.8.0 (2009/08/01) メソãƒ?ƒ‰名変更
278 noTransition = isNoTransitionRequest(); // 5.1.3.0 (2010/02/01)
279 startQueryTransaction( tableId ); // 3.6.0.8 (2004/11/19)
280 table = (DBTableModel)getObject( tableId );
281
282 if( table != null && check( command, COMMAND_LIST ) ) {
283 if( ! checkConsistency() ) { return(SKIP_PAGE); }
284 if( rowNo == null ) { rowNo = getParameterRows(); } // 4.0.0 (2005/01/31)
285
286 commandExec( command );
287
288 // 3.6.0.8 (2004/11/19) トランザクションチェãƒ?‚¯を行いますã?
289 if( ! commitTableObject( tableId, table ) ) {
290 jspPrint( "EntryTag Query処ç�?�Œ割り込まれましたã€?BTableModel は登録しませんã€? );
291 return (SKIP_PAGE);
292 }
293 }
294
295 return(EVAL_PAGE);
296 }
297
298 /**
299 * タグリブオブジェクトをリリースしますã?
300 *
301 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
302 *
303 * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
304 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
305 * @og.rev 3.5.4.2 (2003/12/15) æŒ?®šã?回数繰り返す機è?を追åŠ?�—ますã?
306 * @og.rev 3.5.5.7 (2004/05/10) Consistency キー による整合æ?チェãƒ?‚¯を行うかどã�?�‹を指定しますã?
307 * @og.rev 3.8.1.1 (2005/11/21) selectedAll 追åŠ??全件選択されたこととして、å?ç�?�—ますã?
308 * @og.rev 4.0.0.0 (2006/09/31) strictCheck 追åŠ??
309 * @og.rev 4.3.3.0 (2008/10/01) noTransition 属æ?を追åŠ?�—ますã?
310 * @og.rev 5.6.5.2 (2013/06/21) seqsetCnt 属æ?を追åŠ?�—ますã?
311 *
312 */
313 @Override
314 protected void release2() {
315 super.release2();
316 tableId = HybsSystem.TBL_MDL_KEY;
317 table = null;
318 command = null;
319 rowNo = null;
320 values = null;
321 // format = null;
322 repeatCount = 1; // 3.5.4.2 (2003/12/15)
323 useConsistency = HybsSystem.sysBool( "USE_CONSISTENCY" ); // 3.5.5.7 (2004/05/10)
324 selectedAll = false; // 3.8.1.1 (2005/11/21)
325 strictCheck = true; // 4.0.0 (2006/09/31)
326 noTransition= false; // 4.3.3.0 (2008/10/01) 追åŠ?
327 seqsetCnt = 0; // 5.6.5.2 (2013/06/21) SEQSET アクションのカウンター
328 }
329
330 /**
331 * å†?ƒ¨タグの ColumnSetTag より、å?ã€??カラãƒ??値を書き換える為の属æ?を指定しますã?
332 *
333 * è¤?•°の値を受け取って、後ほど、すべてのカラãƒ?�«対して処ç�?‚’行いますã?
334 *
335 * @og.rev 3.1.0.0 (2003/03/20) Vector を使用してã�?‚‹ç®?‰€でã€?�ž同期でも構わなã�?®?‰€をã?ArrayList に置換えã€?
336 * @og.rev 3.1.2.0 (2003/04/07) taglib パッケージå†?ƒ¨で使用してã�?‚‹ç®?‰€ã‚?protected 化するã?
337 *
338 * @param attri 属æ?リスãƒ?
339 */
340 protected void setAttributes( final Attributes attri ) {
341 if( values == null ) { values = new ArrayList<Attributes>(); }
342 if( command.equalsIgnoreCase( attri.get( "command" ) ) ) {
343 values.add( attri );
344 }
345 }
346
347 /**
348 * 【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しまã�?
349 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
350 *
351 * @og.tag
352 * 検索結果より、DBTableModelオブジェクトを作æ?しますã?これをã?下流ã?viewタグ等に
353 * 渡すå?合にã€??常は、session を利用しますã?そã?場合ã?登録キーですã?
354 * query タグを同時に実行して、結果を求めるå?合ã?同ä¸?ƒ¡モリに配置される為ã€?
355 * こã? tableId 属æ?を利用して、メモリ空間をåˆ?�‘ますã?
356 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
357 *
358 * @param id sessionに登録する時ã? ID
359 */
360 public void setTableId( final String id ) {
361 tableId = nval( getRequestParameter( id ),tableId ); // 3.8.0.9 (2005/10/17)
362 }
363
364 /**
365 * 【TAG】コマンãƒ?INSERT,COPY,MODIFY,DELETE,ENTRY,CHANGE,ALLACTION,RESET)をセãƒ?ƒˆしますã?
366 *
367 * @og.tag
368 * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
369 * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
370 *
371 * @param cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?—å?)
372 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.EntryTag.CMD_INSERT">コマンド定数</a>
373 */
374 public void setCommand( final String cmd ) {
375 String cmd2 = getRequestParameter( cmd );
376 if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
377 }
378
379 /**
380 * コマンドを実行しますã?
381 *
382 * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,setCommand()メソãƒ?ƒ‰で
383 * 登録しますã?
384 * コマンドを登録すると同時に,実行も行なã�?�¾すã?
385 *
386 * @og.rev 3.5.6.3 (2004/07/12) ALLRESET コマンドを追åŠ?�™るã?
387 * @og.rev 4.3.3.0 (2008/10/01) RESETDATA コマンドを追åŠ?�™るã?
388 * @og.rev 5.1.5.0 (2010/04/01) INSERTONE コマンドを追åŠ?�™るã?
389 * @og.rev 5.1.6.0 (2010/05/01) REALDELETE コマンドを追åŠ?�™るã?
390 * @og.rev 5.6.1.2 (2013/02/22) REQENTRY コマンドを追åŠ?�™るã?
391 *
392 * @param command コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?—å?)
393 */
394 private void commandExec( final String command ) {
395
396 table.setDefaultRowWritable( false );
397 table.setDefaultRowChecked( false );
398
399 if( CMD_INSERT.equals( command ) ) { insert() ; }
400 else if( CMD_COPY.equals( command ) ) { copy() ; }
401 else if( CMD_MODIFY.equals( command ) ) { modify() ; }
402 else if( CMD_CHANGE.equals( command ) ) { change() ; }
403 else if( CMD_DELETE.equals( command ) ) { delete() ; }
404 else if( CMD_ENTRY.equals( command ) ) { entry() ; }
405 else if( CMD_RESET.equals( command ) ) {
406 if( RESET_ACTION_ALL_USE ) { allReset() ; } // 3.5.6.4 (2004/07/16)
407 else { reset() ; }
408 }
409 else if( CMD_ALLRESET.equals( command ) ) { allReset() ; } // 3.5.6.3 (2004/07/12)
410 else if( CMD_ALLACTION.equals( command ) ) { allAction() ; }
411 else if( CMD_RESETDATA.equals( command ) ) { resetData() ; } // 4.3.3.0 (2008/10/01)
412 else if( CMD_INSERTONE.equals( command ) ) { insertOne() ; } // 5.1.5.0 (2010/04/01)
413 else if( CMD_REALDELETE.equals( command ) ) { realDelete() ; } // 5.1.6.0 (2010/05/01)
414 else if( CMD_REQENTRY.equals( command ) ) { reqEntry() ; } // 5.6.1.2 (2013/02/22)
415 }
416
417 /**
418 * DBTableModelに行を追åŠ?�—ますã?
419 *
420 * 注意:writableカラãƒ??暫定対応が入ってã�?�¾すã?単純な空白ãƒ??タã‚?
421 * インサートすると、カラãƒ?ƒ‡ータã�?null になる為?¤ 制御がおかしã�?
422 * なりますã?
423 *
424 * @og.rev 3.5.4.2 (2003/12/15) repeatCount による繰り返し処ç�?‚’追åŠ?
425 * @og.rev 4.3.3.0 (2008/10/01) noTransition 属æ?対å¿?
426 *
427 */
428 private void insert() {
429 if( rowNo.length == 0 ) { rowNo = new int[] { -1 }; }
430
431 boolean rowWritableFlag = "WRITABLE".equalsIgnoreCase( table.getColumnName( 0 ) ); // writable 対ç?
432 // src の作æ?は、各チェãƒ?‚¯毎に行うå¿?¦�ã?なã�??æœ??のä¸?º¦ã�?�‘でよいã€?
433 String[] src = new String[ table.getColumnCount() ];
434 for( int j=0; j<src.length; j++ ) {
435 DBColumn dbColumn = table.getDBColumn( j );
436 src[j] = dbColumn.getDefault();
437 }
438 if( rowWritableFlag ) { src[0] = "true"; } // writable 対ç?
439
440 int rowCount = table.getRowCount();
441
442 // é€??にINSERTしなã�?�¨、行番号がずれてしまã�??
443 for( int i=rowNo.length-1; i>=0; i-- ) {
444 int row = rowNo[i];
445 for( int cnt=0; cnt<repeatCount; cnt++ ) {
446 if( cnt >= 1 ) { // ?’回目以é™?
447 src = table.getValues( row );
448 }
449
450 String[] dst = new String[ table.getColumnCount() ];
451 System.arraycopy( src,0,dst,0,dst.length );
452 dst = setColumnValues( dst );
453
454 // 4.3.3.0 (2008/10/01) noTransition属æ?対å¿?
455 if( noTransition ) { row = rowCount; }
456 else { row ++; } // æŒ?®š行ã?下に追åŠ?�™るã?
457 table.addValues( dst,row );
458 table.setRowWritable( row,true );
459 table.setRowChecked( row,true );
460 }
461 }
462 }
463
464 /**
465 * DBTableModelに行を追åŠ?�—、チェãƒ?‚¯された行ã?値をセãƒ?ƒˆしますã?
466 *
467 * @og.rev 3.5.4.2 (2003/12/15) repeatCount による繰り返し処ç�?‚’追åŠ?
468 * @og.rev 4.3.3.0 (2008/10/01) noTransition 属æ?対å¿?
469 *
470 */
471 private void copy() {
472 if( rowNo.length == 0 ) { insert() ; return ;}
473
474 int rowCount = table.getRowCount();
475
476 // é€??にCOPYしなã�?�¨、行番号がずれてしまã�??
477 for( int i=rowNo.length-1; i>=0; i-- ) {
478 for( int cnt=0; cnt<repeatCount; cnt++ ) {
479 String[] src = table.getValues( rowNo[i]+cnt );
480 String[] dst = new String[ table.getColumnCount() ];
481 System.arraycopy( src,0,dst,0,dst.length );
482 dst = setColumnValues( dst );
483
484 // 4.3.3.0 (2008/10/01) noTransition属æ?対å¿?
485 int row = -1;
486 if( noTransition ) { row = rowCount; }
487 else { row = rowNo[i] + cnt + 1; } // æŒ?®š行ã?下に追åŠ?�™るã?
488
489 table.addValues( dst,row );
490 table.setRowWritable( row,true );
491 table.setRowChecked( row,true );
492 }
493 }
494 }
495
496 /**
497 * DBTableModelの行を書込み可とますã?
498 *
499 * @og.rev 4.3.4.6 (2009/01/15) 画面遷移なし登録で既に改廃Cがセãƒ?ƒˆされてã�?‚‹場合ã?、columnSetタグの処ç�?‚’行わなã�??
500 *
501 */
502 private void modify() {
503 for( int i=0; i<rowNo.length; i++ ) {
504 String[] src = table.getValues( rowNo[i] );
505 String[] dst = new String[ table.getColumnCount() ];
506 System.arraycopy( src,0,dst,0,dst.length );
507
508 // 4.3.4.6 (2009/01/15)
509 // 画面遷移なし登録の場合ã?既に改廃Cが付いてã�?‚‹(編é›?�•れてã�?‚‹)場合ã?ã€?
510 // columnSetによる値のセãƒ?ƒˆを行わなã�??
511 // (同じコマンドでè¤?•°のボタンを割り当ててã�?‚‹場合ã?è¤?•°回ã?変更・削除によって、å?に登録されã�?
512 // 値が削除されてしまã�?�Ÿめã?
513 if( !( noTransition && table.getModifyType( rowNo[i] ) != null && table.getModifyType( rowNo[i] ).length() > 0 ) ){
514 dst = setColumnValues( dst );
515 }
516
517 table.setValues( dst,rowNo[i] );
518 table.setRowWritable( rowNo[i],true );
519 table.setRowChecked( rowNo[i],true );
520 }
521 }
522
523 /**
524 * DBTableModelの行を変更しますã?
525
526 * @og.rev 4.3.4.6 (2009/01/15) 画面遷移なし登録で既に改廃Cがセãƒ?ƒˆされてã�?‚‹場合ã?、columnSetタグの処ç�?‚’行わなã�??
527 *
528 */
529 private void change() {
530 for( int i=0; i<rowNo.length; i++ ) {
531 String[] src = table.getValues( rowNo[i] );
532 String[] dst = new String[ table.getColumnCount() ];
533 System.arraycopy( src,0,dst,0,dst.length );
534
535 // 4.3.4.6 (2009/01/15)
536 if( !( noTransition && table.getModifyType( rowNo[i] ) != null && table.getModifyType( rowNo[i] ).length() > 0 ) ){
537 dst = setColumnValues( dst );
538 }
539
540 table.setValues( dst,rowNo[i] );
541 }
542 }
543
544 /**
545 * DBTableModelの行を削除しますã?
546 *
547 * @og.rev 3.5.4.2 (2003/12/15) DELETE時にもå?の書き換えができるようにしますã?
548 * @og.rev 4.3.4.6 (2009/01/15) 画面遷移なし登録で既に改廃Cがセãƒ?ƒˆされてã�?‚‹場合ã?、columnSetタグの処ç�?‚’行わなã�??
549 *
550 */
551 private void delete() {
552 for( int i=0; i<rowNo.length; i++ ) {
553 // 3.5.4.2 (2003/12/15) 書き換えå?ç�?‚’追åŠ?
554 String[] src = table.getValues( rowNo[i] );
555 String[] dst = new String[ table.getColumnCount() ];
556 System.arraycopy( src,0,dst,0,dst.length );
557
558 // 4.3.4.6 (2009/01/15)
559 if( !( noTransition && table.getModifyType( rowNo[i] ) != null && table.getModifyType( rowNo[i] ).length() > 0 ) ){
560 dst = setColumnValues( dst );
561 }
562
563 table.rowDelete( dst,rowNo[i] );
564 table.setRowWritable( rowNo[i],true );
565 table.setRowChecked( rowNo[i],true );
566 }
567 }
568
569 /**
570 * リクエスト情報から、セãƒ?ƒˆされたカラãƒ?��と値を取りå?しã?設定しますã?
571 *
572 * 設定å?は、å?ã€??キー??__" ??行番号 ですã?
573 * よって、å?は,ä¸?�¤ã�?�‘設定されてã�?�¾すã?
574 *
575 * @og.rev 3.5.3.1 (2003/10/31) チェãƒ?‚¯ボックスカラãƒ?‚’æŒ?®šしますã?
576 * @og.rev 3.6.0.6 (2004/10/22) chboxNames 属æ?はå»?¢しますã?
577 * @og.rev 5.6.1.2 (2013/02/22) setRequestValuesメソãƒ?ƒ‰の互換性の対応ã?
578 */
579 private void entry() {
580 if( rowNo.length > 0 ) {
581 // setRequestValues();
582 setRequestValues( false ); // 5.6.1.2 (2013/02/22) 互換性
583 for( int i=0; i<rowNo.length; i++ ) {
584 String[] src = table.getValues( rowNo[i] );
585 String[] dst = new String[ table.getColumnCount() ];
586 System.arraycopy( src,0,dst,0,dst.length );
587 dst = setColumnValues( dst );
588
589 table.setValues( dst,rowNo[i] );
590 table.setRowWritable( rowNo[i],true );
591 table.setRowChecked( rowNo[i],true );
592 }
593 }
594 }
595
596 /**
597 * リクエスト情報のãƒ??ブルモãƒ?ƒ«ãƒ??タをã?リセãƒ?ƒˆしますã?
598 *
599 * @og.rev 5.6.5.2 (2013/06/21) 行ループを 0?ž最終行ã? 降é?で廻しますã?
600 */
601 private void reset() {
602 for( int i=rowNo.length-1; i>=0; i-- ) {
603 // for( int i=0; i<rowNo.length; i++ ) {
604 table.resetRow( rowNo[i] );
605 }
606 }
607
608 /**
609 * ãƒ??ブルモãƒ?ƒ«ãƒ??タをã?全件リセãƒ?ƒˆしますã?
610 *
611 * @og.rev 3.5.6.3 (2004/07/12) 新規作æ?
612 * @og.rev 5.6.5.2 (2013/06/21) 行ループを 0?ž最終行ã? 降é?で廻しますã?
613 */
614 private void allReset() {
615 int rowCount = table.getRowCount();
616 for( int row=0; row<rowCount; row++ ) {
617 table.resetRow( row );
618 }
619
620 // int rowMax = table.getRowCount()-1 ;
621 // for( int i=rowMax; i>=0; i-- ) {
622 // table.resetRow( i );
623 // }
624 }
625
626 /**
627 * DBTableModelの全ての行に対して,値をセãƒ?ƒˆしますã?
628 *
629 * @og.rev 5.6.5.2 (2013/06/21) 行ループを 0?ž最終行ã? 降é?で廻しますã?
630 */
631 private void allAction() {
632 int rowCount = table.getRowCount();
633 for( int row=0; row<rowCount; row++ ) {
634 String[] src = table.getValues( row );
635 String[] dst = new String[ table.getColumnCount() ];
636 System.arraycopy( src,0,dst,0,dst.length );
637 dst = setColumnValues( dst );
638
639 table.setValues( dst,row );
640 table.setRowWritable( row,true );
641 table.setRowChecked( row,true );
642 }
643
644 // int rowMax = table.getRowCount()-1 ; // 3.5.6.3 (2004/07/12)
645 // for( int i=rowMax; i>=0; i-- ) {
646 // String[] src = table.getValues( i );
647 // String[] dst = new String[ table.getColumnCount() ];
648 // System.arraycopy( src,0,dst,0,dst.length );
649 // dst = setColumnValues( dst );
650 //
651 // table.setValues( dst,i );
652 // table.setRowWritable( i,true );
653 // table.setRowChecked( i,true );
654 // }
655 }
656
657 /**
658 * リクエスト情報のãƒ??ブルモãƒ?ƒ«ãƒ??タをã?リセãƒ?ƒˆしますã?
659 * (ä½?�—、リセãƒ?ƒˆされた行ã?、チェãƒ?‚¯された状態ã?ままになりまã�?
660 *
661 * @og.rev 4.3.3.0 (2008/10/01) 新規作æ?
662 * @og.rev 5.6.5.2 (2013/06/21) 行ループを 0?ž最終行ã? 降é?で廻しますã?
663 */
664 private void resetData() {
665 // for( int i=rowNo.length-1; i>=0; i-- ) {
666 for( int i=0; i<rowNo.length; i++ ) {
667 String cdkh = table.getModifyType( rowNo[i] );
668 table.resetRow( rowNo[i] );
669 // 更新又ã?、削除の時ã?み書き込み可能になるã?
670 if( DBTableModel.UPDATE_TYPE.equals( cdkh ) || DBTableModel.DELETE_TYPE.equals( cdkh ) ) {
671 table.setRowWritable( rowNo[i],true );
672 table.setRowChecked( rowNo[i],true );
673 }
674 }
675 }
676
677 /**
678 * DBTableModelに行を追åŠ?�—ますã?(1行ã?み)
679 *
680 * 行が選択されてã�?‚‹かどã�?�‹に関わらずã?1行ã?みを追åŠ?�—ますã?
681 * (動きとしては、行が選択されてã�?�ªã�?ж態でINSERTコマンドを発行したå?合と同じでã�?
682 *
683 * @og.rev 5.1.5.0 (2010/04/01) 新規作æ?
684 *
685 */
686 private void insertOne() {
687 rowNo = new int[0];
688 insert();
689 }
690
691 /**
692 * DBTableModelの行を物ç�?‰Š除しますã?
693 *
694 * 通常のãƒ??タベã?ス等で削除する場合ã?、DELETE行も残しておかなã�?�¨、どの行を削除するã�?
695 * 判らなくなりますã?またã?アプリケーションによっては、削除ではなくã?フラグã�?�‘を立てã‚?
696 * ケースもあるためã?現在の commend="DELETE" では、論理削除?‹å?の書き換えも可能になってã�?�¾すã?
697 * ここでの物ç�?‰Š除は、WriteTable など、ファイル出力時には、その行そのもã?をなくしておくほã�?�Œ
698 * 良ã�?‚±ースがあるためですã?
699 *
700 * @og.rev 5.1.6.0 (2010/05/01) REALDELETE コマンドを追åŠ?�™るã?
701 */
702 private void realDelete() {
703 // é€??にしなã�?�¨、行番号がずれてしまã�??
704 for( int i=rowNo.length-1; i>=0; i-- ) {
705 table.removeValue( rowNo[i] );
706 }
707 }
708
709 /**
710 * リクエスト情報から、セãƒ?ƒˆされたカラãƒ?��と値を取りå?しã?設定しますã?
711 *
712 * 設定å?は、å?ã€??キー??__" ??行番号 ですã?
713 * ENTRYコマンドとの違いは、h_rowSel と無関係に、リクエストされた変数すべてã‚?
714 * 処ç�?�—ますã?
715 *
716 * @og.rev 5.6.1.2 (2013/02/22) 新規追åŠ?
717 */
718 private void reqEntry() {
719 setRequestValues( true ); // リクエストされた変数すべてをå?ç�?
720 int rowCount = table.getRowCount();
721 for( int row=0; row<rowCount; row++ ) {
722 String[] src = table.getValues( row );
723 String[] dst = new String[ table.getColumnCount() ];
724 System.arraycopy( src,0,dst,0,dst.length );
725 dst = setColumnValues( dst );
726
727 table.setValues( dst,row );
728 table.setRowWritable( row,true );
729 table.setRowChecked( row,true );
730 }
731 }
732
733 /**
734 * リクエスト情報から、セãƒ?ƒˆされたカラãƒ?��と値を取りå?しã?設定しますã?
735 *
736 * 設定å?は、å?ã€??キー??__" ??行番号 ですã?
737 * よって、å?は,ä¸?�¤ã�?�‘設定されてã�?�¾すã?
738 *
739 * @og.rev 3.1.0.0 (2003/03/20) 名前と行番号の区åˆ?‚Š記号ã‚?"^" から "__" に変更ã€?
740 * @og.rev 3.5.5.0 (2004/03/12) 名前と行番号の区åˆ?‚Š記号("__")をã?HybsSystem.JOINT_STRING に変更ã€?
741 * @og.rev 3.6.0.6 (2004/10/22) chboxNames 属æ?はå»?¢しますã?
742 * @og.rev 3.8.0.1 (2005/06/17) チェãƒ?‚¯ボックス対応で、エラーチェãƒ?‚¯をPL/SQLで行う場合ã?処ç�?©Ÿè?の追åŠ?
743 * @og.rev 3.8.0.2 (2005/07/11) チェãƒ?‚¯ボックス対応で、判定を DBColumnのgetEditor()を使用しまã�?
744 * @og.rev 4.0.0.0 (2006/09/31) strictCheck 追åŠ??
745 * @og.rev 4.3.7.3 (2009/06/22) HSQLDB対応でリクエストが空æ–?—ã?場合ã?nullæ–?—に変換する
746 * @og.rev 5.0.0.2 (2009/09/15) XSS対å¿?ALLはチェãƒ?‚¯しなã�?
747 * @og.rev 5.6.1.2 (2013/02/22) isAllRow 引数追åŠ?
748 *
749 * @param isAllRows 選択行番号に関係なくã?処ç�?�™るかどã�?�‹
750 */
751 // private void setRequestValues() {
752 private void setRequestValues( final boolean isAllRows ) {
753 Enumeration<?> enume = getParameterNames(); // 4.3.3.6 (2008/11/15) Generics警告対å¿?
754
755 while( enume.hasMoreElements() ) {
756 String key = (String)(enume.nextElement());
757 int idx = key.lastIndexOf(HybsSystem.JOINT_STRING);
758
759 if( idx > 0 ) {
760 String column = key.substring(0,idx);
761 int clmNo = table.getColumnNo( column,strictCheck );
762 if( clmNo < 0 ) { continue; } // strictCheck 対å¿?
763 DBColumn dbColumn = table.getDBColumn( clmNo );
764 int row = Integer.parseInt( key.substring(idx + 2) );
765 // 5.0.0.2 (2009/09/15) æ–?—種別ALLはXSSチェãƒ?‚¯しなã�?
766 // String val = dbColumn.valueSet( getRequestValue( key ) );
767 String val = null;
768 if( "ALL".equals( dbColumn.getDbType() ) ){
769 val = dbColumn.valueSet( getRequestValue( key, false ) );
770 }
771 else{
772 val = dbColumn.valueSet( getRequestValue( key ) );
773 }
774
775 // 3.6.0.6 (2004/10/22) チェãƒ?‚¯ボックスはマルチでãƒ??タが来ますã?
776 // 3.8.0.2 (2005/07/11) 判定を DBColumnのgetEditor()を使用
777 if( "0".equals(val) && "CHBOX".equals( dbColumn.getEditor() ) ) {
778 String[] vals = getRequestValues( key );
779 if( vals != null ) {
780 for( int i=0; i<vals.length; i++ ) {
781 if( "1".equals( vals[i] ) ) { val = "1"; break; }
782 }
783 }
784 }
785
786 // 5.6.1.2 (2013/02/22) リクエスト変数すべてのãƒ??タを設å®?
787 if( isAllRows ) {
788 // 4.3.7.3 (2009/06/22) HSQLDB対å¿?
789 if( val != null && val.length() == 0 ){
790 val = null;
791 }
792 table.setValue(row, column, val );
793 }
794 // 従来のロジãƒ?‚¯(チェãƒ?‚¯を外してSUBMITするケースを想定してã�?‚‹ã€?
795 else {
796 // rowNo は、getParameterRows メソãƒ?ƒ‰でソートされてã�?‚‹のでã€?
797 // java.util.Arrays#binarySearch(int[] a, int key) が使えるはずã?
798 // 十å?にãƒ?‚¹トしてã�?�ªã�?�Ÿめã?今ã?変更しなã�??
799 for( int i=0; i<rowNo.length; i++ ) {
800 if( rowNo[i] == row ) {
801 // 4.3.7.3 (2009/06/22) HSQLDB対å¿?
802 if( val != null && val.length() == 0 ){
803 val = null;
804 }
805 table.setValue(row, column, val );
806 }
807 }
808 }
809 }
810 }
811 }
812
813 /**
814 * ColumnSetTag でæŒ?®šされた条件をå?に、その行ã?値を書き換えますã?
815 *
816 * @og.rev 3.6.0.6 (2004/10/22) conditionKey とã€?conditionList 属æ?を追åŠ?
817 * @og.rev 3.8.1.5 (2006/03/30) writableControl を使用したカラãƒ?ƒ‡ータの先é?アンãƒ??バã?を削除しますã?
818 * @og.rev 4.0.0.0 (2006/09/31) strictCheck 追åŠ??
819 * @og.rev 4.3.7.3 (2009/06/22) HSQLDB対応で空æ–?—â?NULL
820 * @og.rev 5.6.5.2 (2013/06/21) valueの初期値を利用してã€?¼‘レコードごとにã€?¼‹1したå?をセãƒ?ƒˆしますã?
821 *
822 * @param val æŒ?®š行データ配å?
823 *
824 * @return 変更後ã?æŒ?®š行データ配å?
825 */
826 private String[] setColumnValues( final String[] val ) {
827 if( values != null ) {
828 int size = values.size();
829 for( int i=0; i<size; i++ ) {
830 Attributes attri = values.get( i );
831 String columnId = attri.get( "columnId" );
832 int clmNo = table.getColumnNo( columnId,strictCheck );
833 if( clmNo < 0 ) { continue; } // strictCheck 対å¿?
834 String action = attri.get( "action" );
835 String newVal = attri.get( "value" );
836 String oldVal = val[clmNo];
837
838 // 3.6.0.6 (2004/10/22) 条件による処ç�??実行可否判å®?
839 String conditionList = attri.get( "conditionList" );
840 if( conditionList != null ) { // null の場合ã?、無条件実è¡?
841 String conditionKey = attri.get( "conditionKey" );
842 int condClmNo = table.getColumnNo( conditionKey );
843 String condValue = "|" + val[condClmNo] + "|";
844 if( conditionList.indexOf( condValue ) < 0 ) {
845 continue;
846 }
847 }
848
849 if( ACT_COPY.equals( action ) ) {
850 int copyClmNo = table.getColumnNo( newVal ); // newVal はコピã?å…?‚«ラãƒ?��
851 val[clmNo] = val[copyClmNo];
852 }
853 else if( ACT_TBLSET.equals( action ) ) {
854 // if( format == null ) {
855 // format = new Formatter( model );
856 // }
857 ArrayDataModel model = new ArrayDataModel( table.getNames() );
858 model.setValues( val,0 );
859 Formatter format = new Formatter( model );
860 format.setFormat( newVal ); // newValue はフォーマットされたæ–?—å?
861 val[clmNo] = format.getFormatString( 0 );
862 }
863 // 3.8.1.5 (2006/03/30) writableControl を使用したカラãƒ?ƒ‡ータの先é?アンãƒ??バã?を削除しますã?
864 else if( ACT_WRTCTRL.equals( action ) ) {
865 if( oldVal != null && oldVal.length() > 0 && oldVal.charAt(0) == '_' ) {
866 val[clmNo] = oldVal.substring( 1 );
867 }
868 }
869 // 3.8.5.3 (2006/08/07) DBMENUでパラメータ設å®?コロン連結文å?を使用したカラãƒ?ƒ‡ータの先é?ãƒ??タのみにしますã?
870 else if( ACT_DBMENU.equals( action ) ) {
871 if( oldVal != null && oldVal.length() > 0 ) {
872 int adrs = oldVal.indexOf( ':' );
873 if( adrs >= 0 ) {
874 val[clmNo] = oldVal.substring( 0,adrs );
875 }
876 }
877 }
878 // 5.4.2.1 (2011/12/09) valueでæŒ?®šしたカラãƒ??値をキーに、リクエスト変数から値を取出しã?セãƒ?ƒˆしますã?
879 else if( ACT_REQSET.equals( action ) ) {
880 if( newVal != null && newVal.length() > 0 ) {
881 int reqClmNo = table.getColumnNo( newVal ); // newVal はリクエスト取得å?カラãƒ?��
882 String reqClm = val[reqClmNo]; // こã?時点では、コロン引数が付いてã�?‚‹可能性があるã?
883
884 int adrs = reqClm.indexOf( ':' ); // 先é?がカラãƒ?��
885 if( adrs >= 0 ) {
886 reqClm = reqClm.substring( 0,adrs ); // コロンより前方のåˆ?� け取りå?すã?
887 }
888 val[clmNo] = getRequestValue( reqClm );
889 }
890 }
891 // 5.6.5.2 (2013/06/21) valueの初期値を利用してã€?¼‘レコードごとにã€?¼‹1したå?をセãƒ?ƒˆしますã?
892 else if( ACT_SEQSET.equals( action ) ) {
893 int intVal = seqsetCnt ;
894 if( newVal != null && newVal.length() > 0 ) {
895 intVal += Integer.parseInt( newVal ); // value の設定å?
896 }
897 val[clmNo] = String.valueOf( intVal );
898 }
899 else {
900 val[clmNo] = actionExec( action,columnId,oldVal,newVal );
901 }
902
903 // 4.3.7.3 (2009/06/22) HSQLDB対å¿?
904 if( val[clmNo] != null && val[clmNo].length() == 0){
905 val[clmNo] = null;
906 }
907 }
908 }
909 seqsetCnt ++ ; // // 5.6.5.2 (2013/06/21) SEQSET のカウンターã€?
910
911 return val;
912 }
913
914 /**
915 * アクションを実行しますã?
916 *
917 * アクションは,æŒ?®šã?アクションコマンドに対応するå?ç�?‚’入力データに
918 * 対して行いますã?
919 *
920 * @og.rev 3.4.0.3 (2003/09/10) NULLSET Action を追åŠ?�—ますã?
921 * @og.rev 5.6.0.3 (2012/01/24) ADD Action に、value引数の値を加算する機è?を追åŠ?�—ますã?
922 * @og.rev 5.6.6.1 (2013/07/12) action に、PREFIX,SUFIX を追åŠ?�—ますã?
923 *
924 * @param action アクションコマンãƒ?
925 * @param clmId カラãƒ?¼©?¤
926 * @param oldValue 入力データ(旧ãƒ??タ)
927 * @param newValue 入力データ(新ãƒ??タ)
928 *
929 * @return 実行後ã?ãƒ??タ
930 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.EntryTag.ACT_DEFAULT">アクション定数</a>
931 */
932 private String actionExec( final String action,final String clmId,
933 final String oldValue,final String newValue ) {
934 String rtnVal = oldValue;
935
936 DBColumn dbColumn = getDBColumn( clmId );
937 if( ACT_DEFAULT.equals( action ) ) { rtnVal = dbColumn.getDefault(); }
938 else if( ACT_CLEAR.equals( action ) ) { rtnVal = ""; }
939 else if( ACT_SET.equals( action ) ) { rtnVal = dbColumn.valueSet( newValue ); }
940 // else if( ACT_ADD.equals( action ) ) { rtnVal = dbColumn.valueAdd( oldValue ); }
941 else if( ACT_ADD.equals( action ) ) { rtnVal = dbColumn.valueAdd( oldValue,newValue ); } // 5.6.0.3 (2012/01/24)
942 else if( ACT_LOWER.equals( action ) ) {
943 if( oldValue == null ) { rtnVal = dbColumn.getDefault(); }
944 else { rtnVal = oldValue.toLowerCase(Locale.JAPAN); }
945 }
946 else if( ACT_UPPER.equals( action ) ) {
947 if( oldValue == null ) { rtnVal = dbColumn.getDefault(); }
948 else { rtnVal = oldValue.toUpperCase(Locale.JAPAN); }
949 }
950 // 3.4.0.3 (2003/09/10) NULLSET Action を追åŠ?�—ますã?
951 else if( ACT_NULLSET.equals( action ) ) {
952 if( oldValue == null || oldValue.length() == 0 ) {
953 rtnVal = dbColumn.valueSet( newValue );
954 }
955 }
956 // 5.6.6.1 (2013/07/12) PREFIX Action を追åŠ?�—ますã?
957 else if( ACT_PREFIX.equals( action ) ) {
958 if( oldValue != null && oldValue.length() > 0 && newValue != null && newValue.length() > 0 ) {
959 int indx = oldValue.lastIndexOf( newValue );
960 if( indx >= 0 ) {
961 rtnVal = oldValue.substring( 0,indx );
962 }
963 }
964 }
965 // 5.6.6.1 (2013/07/12) SUFIX Action を追åŠ?�—ますã?
966 else if( ACT_SUFIX.equals( action ) ) {
967 if( oldValue != null && oldValue.length() > 0 && newValue != null && newValue.length() > 0 ) {
968 int indx = oldValue.lastIndexOf( newValue );
969 if( indx >= 0 ) {
970 rtnVal = oldValue.substring( indx+1 ); // åˆ?‰²記号は含まなã�??で?‹1するã?
971 }
972 }
973 }
974 else {
975 rtnVal = dbColumn.valueAction( action,oldValue,newValue );
976 }
977
978 if( rtnVal == null ) { rtnVal = dbColumn.getDefault(); }
979
980 return rtnVal;
981 }
982
983 /**
984 * 【TAG】指定ã?回数åˆ?� けã?繰り返し処ç�?‚’行う回数を指定しまã�?初期値:1)ã€?
985 *
986 * @og.tag
987 * 追åŠ?‚„è¤??時に、指定ã?回数åˆ?� けã?処ç�?‚’繰り返して、新規に行を
988 * 作æ?しますã?
989 * 繰り返しは、指定ã?行に対して行われã?繰り返し毎に、直前に作æ?されã�?
990 * 行をå…?�«処ç�?�—ますã?これは、例えば、columnSet で、action="ADD"の場合にã€?
991 * 繰り返す毎に、ADD処ç�?�Œ実行されることを意味しますã?
992 * 行がæŒ?®šされてã�?�ªã�??合ã?、å?頭空行に追åŠ?�—ますã?
993 * 初期値はã€?¼‘回ですã?
994 *
995 * @og.rev 3.5.4.2 (2003/12/15) 新規追åŠ?
996 *
997 * @param rc 繰り返し処ç�?‚’行う回数を指å®?初期値:1)
998 */
999 public void setRepeatCount( final String rc ) {
1000 repeatCount = nval( getRequestParameter( rc ),repeatCount );
1001 }
1002
1003 /**
1004 * 【TAG】Consistency キー による整合æ?チェãƒ?‚¯を行うかどã�?�‹を指定しまã�?初期値:true)ã€?
1005 *
1006 * @og.tag
1007 * 検索結果ã‚?DBTableModel にセãƒ?ƒˆする時に、整合æ?キーの Consistency キーã‚?
1008 * 作æ?しますã?これをã?Viewタグでhidden出力しておき、Entryタグでãƒ??タ書き換え時に
1009 * 整合æ?チェãƒ?‚¯を行いますã?これは、IEの戻るã?タンで戻ったå?合に、画面の
1010 * キーと検索結果の DBTableModel のå†?®¹がä¸??しなã�??合ã?エラーチェãƒ?‚¯に
1011 * なりますã?
1012 * こã?属æ?は、何らかã?ケースで、このエラーチェãƒ?‚¯を行いたくなã�??合にã€?
1013 * false に設定することで、整合æ?チェãƒ?‚¯を行いませんã€?
1014 * 初期値は、true(整合æ?チェãƒ?‚¯を行う)ですã?
1015 *
1016 * @og.rev 3.5.5.7 (2004/05/10) 新規登録
1017 *
1018 * @param ck Consistency Key の使用するかどã�?�‹(初期値:true)
1019 */
1020 public void setUseConsistency( final String ck ) {
1021 useConsistency = nval( getRequestParameter( ck ),useConsistency );
1022 }
1023
1024 /**
1025 * DBTableModel の 整合æ?パラメータとリクエスト情報を比è¼?ƒ�ェãƒ?‚¯しますã?
1026 * リクエスト情報は、その DBTableModel がå?力された view で hidden 属æ?で
1027 * 設定されますã?
1028 * 設定されるキーは、tableId が変更されてã�?�ªければ、HybsSystem.CONSISTENCY_KEY ですã?
1029 * 変更されてã�?‚Œば、HybsSystem.CONSISTENCY_KEY + tableId ですã?
1030 *
1031 * @og.rev 3.5.5.8 (2004/05/20) Consistency キー による整合æ?チェãƒ?‚¯ã‚?checkConsistency() にé›?´?�—ますã?
1032 *
1033 * @return チェãƒ?‚¯結果 true:正常/false:異常
1034 * @see org.opengion.hayabusa.common.HybsSystem#CONSISTENCY_KEY
1035 */
1036 private boolean checkConsistency() {
1037 boolean rtn = true;
1038 String key = HybsSystem.CONSISTENCY_KEY ;
1039
1040 String consisKey = getRequestValue( key );
1041 if( consisKey != null && consisKey.length() > 0 ) {
1042 if( useConsistency && ! consisKey.equals( table.getConsistencyKey() ) ) {
1043
1044 ErrorMessage errMsgObj = new ErrorMessage( "Consistency Key Check Error!" );
1045 errMsgObj.addMessage( 0,ErrorMessage.NG,"ERR0033.1" );
1046 errMsgObj.addMessage( 0,ErrorMessage.NG,"ERR0033.2" );
1047 errMsgObj.addMessage( 0,ErrorMessage.NG,"ERR0033.3" );
1048 jspPrint( TaglibUtil.makeHTMLErrorTable( errMsgObj,getResource() ) );
1049 rtn = false;
1050 }
1051 }
1052 else {
1053 System.out.println( "EntryTag:Consistency Key is null" );
1054 }
1055 return rtn ;
1056 }
1057
1058 /**
1059 * 表示ãƒ??タの HybsSystem.ROW_SEL_KEY をå?にã€?�¸ばれた 行を処ç�??対象としますã?
1060 *
1061 * @og.rev 3.8.1.1 (2005/11/21) selectedAll 追åŠ??全件選択されたこととして、å?ç�?�—ますã?
1062 * @og.rev 4.0.0.0 (2005/01/31) getParameterRows() を使用するように変更
1063 *
1064 * @return 選択行ã?配å?
1065 */
1066 @Override
1067 protected int[] getParameterRows() {
1068 final int[] rowNo ;
1069 if( selectedAll ) {
1070 int rowCnt = table.getRowCount(); // 3.5.5.7 (2004/05/10)
1071 rowNo = new int[ rowCnt ];
1072 for( int i=0; i<rowCnt; i++ ) {
1073 rowNo[i] = i;
1074 }
1075 } else {
1076 rowNo = super.getParameterRows(); // 4.0.0 (2005/01/31)
1077 }
1078 return rowNo ;
1079 }
1080
1081 /**
1082 * 【TAG】データをå?件選択済みとして処ç�?�™るかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
1083 *
1084 * @og.tag
1085 * 全てのãƒ??タを選択済みãƒ??タとして扱って処ç�?�—ますã?
1086 * 全件処ç�?�™るå?合にã€?true/false)を指定しますã?
1087 * 初期値は false ですã?
1088 *
1089 * @param all ãƒ??タをå?件選択済み [true:全件選択済み/false:通常]
1090 */
1091 public void setSelectedAll( final String all ) {
1092 selectedAll = nval( getRequestParameter( all ),selectedAll );
1093 }
1094
1095 /**
1096 * 【TAG】カラãƒ?¼©?¤の存在チェãƒ?‚¯を行うかどã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
1097 *
1098 * @og.tag
1099 * true の場合ã?カラãƒ?¼©?¤がDBTableModel に存在しなã�??合ã?、エラーになりますã?
1100 * false の場合ã?カラãƒ?¼©?¤がDBTableModel に存在しなã�??合ã?、無視しますã?
1101 * これは、検索条件によって、設定されるカラãƒ?�Œ異なるå?合でもã?entryタグã‚?
1102 * 正常に動作させたã�??合に、使用しますã?
1103 * 初期値は true (チェãƒ?‚¯を行う) ですã?
1104 *
1105 * @param check 存在チェãƒ?‚¯を行うかどã�?�‹ [true:行う/false:行わない]
1106 */
1107 public void setStrictCheck( final String check ) {
1108 strictCheck = nval( getRequestParameter( check ),strictCheck );
1109 }
1110
1111 /**
1112 * 【TAGã€?通常は使ã�?�¾せん)画面遷移を行わなã�?½¢式ã?登録方法を使用するかをæŒ?®šしますã?
1113 *
1114 * @og.tag
1115 * 画面遷移なしã?登録を行うかどã�?�‹を指定しますã?
1116 * trueが指定された場合ã?entryタグでは、行ã?追åŠ??è¤??時にDBTableModel上ã?æœ?µ‚行にãƒ??タã‚?
1117 * 追åŠ?�—ますã?
1118 * 画面遷移なしモードã?場合ã?途中行に挿入されたå?合ã?既にクライアントに出力されてã�?‚‹
1119 * チェãƒ?‚¯ボックスの行番号ã‚?�„入力フィールドã?変数名との整合æ?を合わせるためにはã€?
1120 * 編é›?¡Œ以降ã?å�?¤‰数値をå?て再計算するå¿?¦�がありますã?
1121 * こã?処ç�??、レスポンス悪化に繋がるためã?DBTableModel上ã?、中間に行ã?挿入を行いませんã€?
1122 * ä½?�—画面表示上ã?ã€??常通り選択行ã?直下に行が挿入されるためã?DBTableModelのé ?•ªと標準é?ã�?
1123 * 異なりますã?(エンジン側では、各チェãƒ?‚¯ボックスの値で行を識別してã�?‚‹ため、問題ã?発生しません)
1124 *
1125 * こã?値は、og:headタグで設定å?、またã?前画面からの値を継承するためã€??常、この属æ?ではセãƒ?ƒˆしませんã€?
1126 *
1127 * @og.rev 4.3.3.0 (2008/10/01) 新規追åŠ?
1128 * @og.rev 5.1.3.0 (2010/02/01) noTransition、ajaxSubmitのコントロールは、requestで行うã€?
1129 *
1130 * @param noTrnstn 画面遷移を行わなã�?½¢式ã?登録方法を使用するã�?
1131 */
1132 public void setNoTransition( final String noTrnstn ) {
1133 setNoTransitionRequest( nval( getRequestParameter( noTrnstn ), isNoTransitionRequest() ) );
1134 // noTransition = nval( getRequestParameter( noTrnstn ), noTransition );
1135 }
1136
1137 /**
1138 * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
1139 *
1140 * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
1141 * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
1142 *
1143 * @param strm ObjectOutputStreamオブジェクãƒ?
1144 * @throws IOException シリアライズに関する入出力エラーが発生したå?å�?
1145 */
1146 private void writeObject( final ObjectOutputStream strm ) throws IOException {
1147 strm.defaultWriteObject();
1148 }
1149
1150 /**
1151 * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
1152 *
1153 * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
1154 *
1155 * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
1156 * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
1157 *
1158 * @param strm ObjectInputStreamオブジェクãƒ?
1159 * @see #release2()
1160 * @throws IOException シリアライズに関する入出力エラーが発生したå?å�?
1161 * @throws ClassNotFoundException クラスを見つけることができなかったå?å�?
1162 */
1163 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
1164 strm.defaultReadObject();
1165 }
1166
1167 /**
1168 * こã?オブジェクトã?æ–?—å?表現を返しますã?
1169 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
1170 *
1171 * @return こã?クラスのæ–?—å?表現
1172 */
1173 @Override
1174 public String toString() {
1175 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
1176 .println( "VERSION" ,VERSION )
1177 .println( "tableId" ,tableId )
1178 .println( "command" ,command )
1179 .println( "rowNo" ,rowNo )
1180 .println( "repeatCount" ,repeatCount )
1181 .println( "useConsistency" ,useConsistency )
1182 .println( "selectedAll" ,selectedAll )
1183 .println( "strictCheck" ,strictCheck )
1184 .println( "noTransition" ,noTransition )
1185 .println( "RESET_ACTION_ALL_USE" ,RESET_ACTION_ALL_USE )
1186 .println( "Other..." ,getAttributes().getAttribute() )
1187 .fixForm().toString() ;
1188 }
1189 }