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.db;
017
018 import java.util.HashMap;
019 import java.util.Locale;
020 import java.util.Map;
021 import java.util.LinkedHashMap ;
022 import java.util.Map.Entry;
023
024 import org.opengion.fukurou.util.ErrorMessage;
025 import org.opengion.fukurou.db.Transaction;
026 import org.opengion.hayabusa.resource.ResourceManager;
027 import org.opengion.hayabusa.common.HybsSystemException;
028
029 /**
030 * AbstractTableFilter は、TableUpda インターフェースを継承した、DBTableModel 処ç�?”¨の
031 * Abstract実è£?‚¯ラスですã?
032 *
033 * @og.rev 5.5.2.6 (2012/05/25) protected変数をprivateに変更。インターフェースにメソãƒ?ƒ‰追åŠ?
034 *
035 * @version 0.9.0 2000/10/17
036 * @author Kazuhiko Hasegawa
037 * @since JDK1.1,
038 */
039 abstract public class AbstractTableFilter implements TableFilter {
040
041 /** CR 定義 */
042 // 5.5.2.6 (2012/05/25) I/F 側に移å‹?
043 // protected static final String CR = HybsSystem.CR ; // 5.1.1.0 (2009/12/01) CR 定義をここで行うã€?
044
045 // protected DBTableModel table = null;
046 // protected String modifyType = null;
047 // protected int[] rowNo = null;
048 // protected boolean isDebug = false;
049 // protected ApplicationInfo appInfo = null; // 5.1.9.0 (2010/08/01) å»?¢
050 // protected Transaction tran = null; // 5.1.9.0 (2010/08/01) 追åŠ?
051 // protected String sql = null; // 4.2.4.0 (2008/06/23)
052 // protected String dbid = null; // 4.2.4.0 (2008/06/23)
053 // protected ResourceManager resource = null; // 4.3.7.4 (2009/07/01)
054
055 // 5.5.2.6 (2012/05/25) protected変数をprivateに変更。インターフェースにメソãƒ?ƒ‰追åŠ?
056 private DBTableModel table = null;
057 private String modifyType = null;
058 private int[] rowNo = null;
059 private boolean isDebug = false;
060 private Transaction tran = null; // 5.1.9.0 (2010/08/01) 追åŠ?
061 private String sql = null; // 4.2.4.0 (2008/06/23)
062 private String dbid = null; // 4.2.4.0 (2008/06/23)
063 private ResourceManager resource = null; // 4.3.7.4 (2009/07/01)
064
065 private int errCode = ErrorMessage.OK;
066 private ErrorMessage errMessage = null;
067
068 private final Map<String,String> keysVals = new HashMap<String,String>();
069
070 // 5.6.6.0 (2013/07/05) keys の整合æ?チェãƒ?‚¯を行いますã?
071 protected final Map<String,String> keysMap = new LinkedHashMap<String,String>();
072
073 /**
074 * ãƒ?ƒ•ォルトコンストラクター
075 * ここでは、keys の整合æ?チェãƒ?‚¯を行うための初期設定を行う、init( Map<String,String> )
076 * メソãƒ?ƒ‰を呼び出しますã?
077 * init( Map<String,String> ) メソãƒ?ƒ‰は、各サブクラスで実è£?�Œå¿?¦�ですã?
078 *
079 * @og.rev 5.6.6.1 (2013/07/12) keys の整合æ?チェãƒ?‚¯対å¿?
080 */
081 public AbstractTableFilter() {
082 init( keysMap );
083 }
084
085 /**
086 * keys の整合æ?チェãƒ?‚¯を行うための初期設定を行いますã?
087 * ここでは何もしません。å¿?¦�であれば、各サブクラスに実è£?�—ておきますã?
088 *
089 * @og.rev 5.6.6.1 (2013/07/12) keys の整合æ?チェãƒ?‚¯対å¿?
090 *
091 * @param keysMap keys の整合æ?チェãƒ?‚¯を行うための Map
092 */
093 protected void init( final Map<String,String> keysMap ) {}
094
095 /**
096 * DBTableModel をセãƒ?ƒˆしますã?
097 *
098 * @param table DBTableModelオブジェクãƒ?
099 */
100 public void setDBTableModel( final DBTableModel table ) {
101 this.table = table;
102 }
103
104 /**
105 * DBTableModel を取得しますã?
106 *
107 * @og.rev 5.5.2.6 (2012/05/25) インターフェースにgetterメソãƒ?ƒ‰追åŠ?
108 *
109 * @return å†?ƒ¨のDBTableModel
110 */
111 public DBTableModel getDBTableModel() {
112 return table;
113 }
114
115 /**
116 * ãƒ??タ処ç�??方æ³?A:追åŠ?C:更新 D:削除)を指定しますã?
117 *
118 * 通常は、DBTableModel に自動設定されてã�?‚‹ modifyType をå?に、データ処ç�?–¹法を
119 * 選別しますã?(A:追åŠ?C:更新 D:削除)
120 * こã?場合ã?行単位で modifyType の値を取得して判別するå¿?¦�がありますが、ä¸?ˆ¬には
121 * 処ç�?¯¾象は、å?件おなã�?modifyType である可能性が高いですã?
122 * またã?selectedAll などで強制çš?�«全件処ç�?¯¾象とする場合ã?、modifyType に値ã�?
123 * 設定さてã�?�¾せん。その様な場合に外部より modifyType を指定しますã?
124 * 初期値は、è?動判å®?ですã?
125 *
126 * @og.rev 5.5.2.6 (2012/05/25) å»?¢
127 *
128 * @param type ãƒ??タ処ç�??方æ³?A:追åŠ?C:更新 D:削除)
129 */
130 public void setModifyType( final String type ) {
131 modifyType = type;
132 }
133
134 /**
135 * ãƒ??タ処ç�??方æ³?A:追åŠ?C:更新 D:削除)を取得しますã?
136 *
137 * 初期値は、è?動判å®?ですã?
138 *
139 * @og.rev 5.5.2.6 (2012/05/25) インターフェースにgetterメソãƒ?ƒ‰追åŠ?
140 *
141 * @return ãƒ??タ処ç�??方æ³?A:追åŠ?C:更新 D:削除)
142 */
143 public String getModifyType() {
144 return modifyType ;
145 }
146
147 /**
148 * キーと値のペアの変数配å?を受け取りますã?
149 *
150 * ここでは、この方式以外に、パラメーターMapを受け取る方法もありますã?
151 * こã?受け取る時に、キーを大æ–?—化しますã?TableFilter の keys はã€?
152 * 大æ–?—ã?みで定義しておくことで、HTMLやWindows世代の曖昧な表記方法に
153 * 対応してã�?�¾すã?(unixやxmlのような厳格な方が好きですけど)
154 *
155 * keys,vals とパラメーターMapを同時にæŒ?®šしたå?合ã?、両方とも有効ですã?
156 * ただしã?キーが重è¤?�—たå?合ã?、不定とè€?�ˆてくださいã€?
157 *
158 * @og.rev 5.6.6.0 (2013/07/05) keys の整合æ?チェãƒ?‚¯を行いますã?
159 *
160 * @param keys キー配å?
161 * @param vals 値配å?
162 * @see #setParamMap( Map )
163 */
164 public void setKeysVals( final String[] keys,final String[] vals ) {
165 if( keys != null && vals != null ) {
166 for( int i=0; i<keys.length; i++ ) {
167 // 5.6.6.0 (2013/07/05) 共通ã?セãƒ?‚¿ーメソãƒ?ƒ‰経由で登録しますã?
168 // keysVals.put( keys[i].toUpperCase(Locale.JAPAN),vals[i] );
169 setKeyVal( keys[i],vals[i] );
170 }
171 }
172 }
173
174 /**
175 * キーと値のペアを受け取りã?å†?ƒ¨の keysVals マップに追åŠ?�—ますã?
176 *
177 * キーかå?のどちらかã�?null の場合ã?、何もしません。つまりã?val に
178 * null をセãƒ?ƒˆすることはできませんã€?
179 *
180 * こã?メソãƒ?ƒ‰は、setKeysVals( String[] ,String[] ) メソãƒ?ƒ‰とã€?
181 * setParamMap( Map<String,String> ) メソãƒ?ƒ‰の両方から、使用しますã?
182 * 処ç�?‚’行うに当たりã?下記ã?処ç�?‚’行いますã?
183 * ?‘.キーを大æ–?—化しますã?
184 * ?’.各クラスの keys と整合æ?チェãƒ?‚¯を行いますã?
185 *
186 * ただしã?setKeysVals と setParamMap の登録é ??、不定とè€?�ˆてくださいã€?
187 * 両方に同じキーを指定すると、どちらã?値がセãƒ?ƒˆされたかは、不定ですã?
188 *
189 * @og.rev 5.6.6.0 (2013/07/05) keys の整合æ?チェãƒ?‚¯を行いますã?
190 *
191 * @param key キーæ–?—å?(null の場合ã?、å?ç�?�—なã�?
192 * @param val 値æ–?—å?(null の場合ã?、å?ç�?�—なã�?
193 * @see #setKeysVals( String[] ,String[] )
194 * @see #setParamMap( Map )
195 */
196 private void setKeyVal( final String key,final String val ) {
197 // key ã�?val かどちらかã�?null の場合ã?、å?ç�?‚’行わなã�??
198 if( key == null || val == null ) { return; }
199
200 String upKey = key.toUpperCase(Locale.JAPAN);
201
202 if( keysMap.containsKey( upKey ) ) { // keysMap は、各サブクラスで定義
203 keysVals.put( upKey,val );
204 }
205 else {
206 String BR = "<br />" + CR ;
207 StringBuilder errMsg = new StringBuilder();
208 errMsg.append( BR )
209 .append( "æŒ?®šã?キーは、この tableFilter では、使用できませんã€? ).append( BR )
210 .append( " class=[" ).append( getClass().getName() ).append( "]" ).append( BR )
211 .append( " key =[" ).append( key ).append( "]" ).append( BR )
212 .append( " ======== usage keys ======== " ).append( BR ) ;
213 for( Map.Entry<String, String> entry : keysMap.entrySet() ) {
214 errMsg.append( " " ).append( entry.getKey() ).append( " : " )
215 .append( entry.getValue() ).append( BR ) ;
216 }
217 errMsg.append( " ============================ " ).append( BR );
218
219 throw new HybsSystemException( errMsg.toString() );
220 }
221 }
222
223 /**
224 * 選択された行番号の配å?をセãƒ?ƒˆしますã?
225 *
226 * 表示ãƒ??タの HybsSystem.ROW_SELECTED_KEY をå?にã€?�¸ばれた 行を
227 * 処ç�??対象としますã?
228 *
229 * @param rowNoTmp 行番号配å?
230 */
231 public void setParameterRows( final int[] rowNoTmp ) {
232 if( rowNoTmp != null ) {
233 int size = rowNoTmp.length ;
234 rowNo = new int[size];
235 System.arraycopy( rowNoTmp,0,rowNo,0,size );
236 }
237 }
238
239 /**
240 * 選択された行番号の配å?を取得しますã?
241 *
242 * 表示ãƒ??タの HybsSystem.ROW_SEL_KEY をå?にã€?�¸ばれた 行を
243 * 処ç�??対象としますã?
244 *
245 * @og.rev 5.5.2.6 (2012/05/25) インターフェースにgetterメソãƒ?ƒ‰追åŠ?
246 *
247 * @return 行番号の配å?
248 */
249 public int[] getParameterRows() {
250 return (rowNo != null ) ? rowNo.clone() : null ;
251 }
252
253 /**
254 * アクセスログ取得ã?為,ApplicationInfoオブジェクトを設定しますã?
255 *
256 * @og.rev 3.8.7.0 (2006/12/15) 新規追åŠ?
257 * @og.rev 5.1.9.0 (2010/08/01) Transaction 対å¿?のため、å»?¢
258 *
259 * @param appInfo ApplicationInfo
260 */
261 // public void setApplicationInfo( final ApplicationInfo appInfo ) {
262 // this.appInfo = appInfo;
263 // }
264
265 /**
266 * アクセスログ取得ã?為,Transactionオブジェクトを設定しますã?
267 *
268 * @og.rev 5.1.9.0 (2010/08/01) Transaction 対å¿?新規追åŠ?
269 *
270 * @param tran Transactionオブジェクãƒ?
271 */
272 public void setTransaction( final Transaction tran ) {
273 this.tran = tran;
274 }
275
276 /**
277 * アクセスログ取得ã?為,Transactionオブジェクトを取得しますã?
278 *
279 * @og.rev 5.1.9.0 (2010/08/01) Transaction 対å¿?新規追åŠ?
280 * @og.rev 5.5.2.6 (2012/05/25) インターフェースにgetterメソãƒ?ƒ‰追åŠ?
281 *
282 * @return Transactionオブジェクãƒ?
283 */
284 public Transaction getTransaction() {
285 return tran;
286 }
287
288 /**
289 * DBIDを指定しますã?
290 *
291 * @og.rev 4.2.4.0 (2008/06/23) 新規追åŠ?
292 *
293 * @param dbid 接続å?ID
294 */
295 public void setDbid( final String dbid ) {
296 this.dbid = dbid;
297 }
298
299 /**
300 * DBIDを取得しますã?
301 *
302 * @og.rev 4.2.4.0 (2008/06/23) 新規追åŠ?
303 * @og.rev 5.5.2.6 (2012/05/25) インターフェースにgetterメソãƒ?ƒ‰追åŠ?
304 *
305 * @return DBID(接続å?æƒ??)
306 */
307 public String getDbid() {
308 return dbid;
309 }
310
311 /**
312 * ボディー部åˆ??SQLを指定しますã?
313 *
314 * @og.rev 4.2.4.0 (2008/06/23) 新規追åŠ?
315 *
316 * @param sql ボディー部åˆ??SQL
317 */
318 public void setSql( final String sql ) {
319 this.sql = sql;
320 }
321
322 /**
323 * ボディー部åˆ??SQLを取得しますã?
324 *
325 * @og.rev 4.2.4.0 (2008/06/23) 新規追åŠ?
326 * @og.rev 5.5.2.6 (2012/05/25) インターフェースにgetterメソãƒ?ƒ‰追åŠ?
327 *
328 * @return ボディー部åˆ??SQL
329 */
330 public String getSql() {
331 return sql;
332 }
333
334 /**
335 * パラメーターMapを指定しますã?
336 *
337 * keys,vals と パラメーターMapを同時にæŒ?®šしたå?合ã?、両方とも有効ですã?
338 * ただしã?キーが重è¤?�—たå?合ã?、不定とè€?�ˆてくださいã€?
339 *
340 * こã?受け取る時に、キーを大æ–?—化しますã?TableFilter の keys はã€?
341 * 大æ–?—ã?みで定義しておくことで、HTMLやWindows世代の曖昧な表記方法に
342 * 対応してã�?�¾すã?(unixやxmlのような厳格な方が好きですけど)
343 *
344 * @og.rev 5.6.5.2 (2013/06/21) 新規追åŠ?
345 * @og.rev 5.6.6.0 (2013/07/05) keys の整合æ?チェãƒ?‚¯を行いますã?
346 *
347 * @param paramMap パラメーターMap
348 * @see #setKeysVals( String[] ,String[] )
349 */
350 public void setParamMap( final Map<String,String> paramMap ) {
351 if( paramMap != null ) {
352 // keysVals.putAll( paramMap );
353 // 5.6.6.0 (2013/07/05) Map をä¸?�¤づつ回して登録しますã?
354 for( Map.Entry<String, String> entry : paramMap.entrySet() ) {
355 setKeyVal( entry.getKey(),entry.getValue() );
356 }
357 }
358 }
359
360 /**
361 * リソースオブジェクトをæŒ?®šしますã?
362 *
363 * @og.rev 4.3.7.4 (2009/07/01) 新規追åŠ?
364 *
365 * @param resource リソースオブジェクãƒ?
366 */
367 public void setResource( final ResourceManager resource ) {
368 this.resource = resource;
369 }
370
371 /**
372 * リソースオブジェクトを取得しますã?
373 *
374 * @og.rev 4.3.7.4 (2009/07/01) 新規追åŠ?
375 * @og.rev 5.5.2.6 (2012/05/25) インターフェースにgetterメソãƒ?ƒ‰追åŠ?
376 *
377 * @return リソースオブジェクãƒ?
378 */
379 public ResourceManager getResource() {
380 return resource;
381 }
382
383 /**
384 * ãƒ?ƒ�ãƒ?‚°æƒ??を表示するかどã�?�‹[true/false]を指定しますã?
385 * true でãƒ?ƒ�ãƒ?‚°æƒ??を表示しますã?
386 *
387 * @param flag [true:出力すã‚?それ以å¤?しない]
388 */
389 public void setDebug( final boolean flag ) {
390 isDebug = flag;
391 }
392
393 /**
394 * ãƒ?ƒ�ãƒ?‚°æƒ??を表示するかどã�?�‹を取得しますã?
395 * true でãƒ?ƒ�ãƒ?‚°æƒ??を表示しますã?
396 *
397 * @og.rev 5.5.2.6 (2012/05/25) インターフェースにgetterメソãƒ?ƒ‰追åŠ?
398 *
399 * @return ãƒ?ƒ�ãƒ?‚°æƒ??(true:ãƒ?ƒ�ãƒ?‚°æƒ??をå?力すã‚?
400 */
401 public boolean isDebug() {
402 return isDebug ;
403 }
404
405 /**
406 * エラーコーãƒ?を取得しますã?
407 * エラーコーãƒ?は、ErrorMessage クラスで規定されてã�?‚‹コードですã?
408 *
409 * @return エラーコーãƒ?
410 */
411 public int getErrorCode() {
412 return errCode;
413 }
414
415 /**
416 * エラーメãƒ?‚»ージオブジェクãƒ?を取得しますã?
417 *
418 * @return エラーメãƒ?‚»ージオブジェクãƒ?
419 */
420 public ErrorMessage getErrorMessage() {
421 return errMessage;
422 }
423
424 /**
425 * タイトルとエラーコードをæŒ?®šして、エラーメãƒ?‚»ージオブジェクãƒ?を作æ?しますã?
426 * すでに、作æ?済みの場合ã?、作æ?済みのオブジェクトを、まã�??未作æ?の場合ã?ã€?
427 * 新規に作æ?しますã?
428 *
429 * @param title タイトル
430 * @param code エラーコーãƒ?
431 *
432 * @return エラーメãƒ?‚»ージオブジェクãƒ?
433 */
434 protected ErrorMessage makeErrorMessage( final String title,final int code ) {
435 if( errMessage == null ) {
436 errMessage = new ErrorMessage( title );
437 }
438 if( errCode < code ) { errCode = code; }
439 return errMessage;
440 }
441
442 /**
443 * カラãƒ?��配å?(String[])より、対応するカラãƒ?o配å?(int[])を作æ?しますã?
444 *
445 * @param nameArray カラãƒ?��配å?
446 *
447 * @return カラãƒ?o配å?
448 */
449 protected int[] getTableColumnNo( final String[] nameArray ) {
450 int[] clmNo = new int[ nameArray.length ];
451 for( int i=0; i<clmNo.length; i++ ) {
452 clmNo[i] = table.getColumnNo( nameArray[i] );
453 }
454 return clmNo;
455 }
456
457 /**
458 * 設定されたパラメータキーに対する値を取得しますã?
459 * 引数、およã?、パラメータã�?null の場合ã?ã€?null を返しますã?
460 *
461 * @param key パラメータキー
462 *
463 * @return パラメータ値
464 */
465 protected String getValue( final String key ) {
466 return keysVals.get( key );
467 }
468 }