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 }