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 */ 016package org.opengion.hayabusa.db; 017 018import org.opengion.fukurou.model.DataModel; 019 020/** 021 * javax.swing.table.TableModel インターフェースを継承したデータベース情報をTableModel情報にマッピングするのに利用します。 022 * 023 * @og.group テーブル管理 024 * 025 * @version 4.0 026 * @author Kazuhiko Hasegawa 027 * @since JDK5.0, 028 */ 029public interface DBTableModel extends DataModel<String> { 030 031 /** 032 * 行指定の書込み許可を与えます。 033 * 具体的には,チェックボックスの表示/非表示を指定します。 034 * これが true の場合は,書込み許可です。(チェックボックスを表示) 035 * false の場合は,書込み不許可(チェックボックスは表示されません。) 036 * 行毎に書込み許可/不許可を指定する場合は,1カラム目に writable 037 * カラムを用意して true/false を指定します。 038 * この writable カラムとの論理積により最終的にチェックボックスの 039 * 表示の ON/OFF が決まります。 040 * 041 * このデフォルト値は、true に設定されています。 042 * 043 */ 044 boolean DEFAULT_WRITABLE = true; 045 046 /** 047 * 行指定用のチェックボックスに対して初期値を 選択済みにするか、 048 * 非選択済みにするかのデフォルト値を指定します。 049 * 050 * このデフォルト値は、false に設定されています。 051 * 052 */ 053 boolean DEFAULT_CHECKED = false; 054 055 /** 056 * 変更されたタイプ(追加) 057 */ 058 String INSERT_TYPE = "A"; 059 060 /** 061 * 変更されたタイプ(変更) 062 */ 063 String UPDATE_TYPE = "C"; 064 065 /** 066 * 変更されたタイプ(削除) 067 */ 068 String DELETE_TYPE = "D"; 069 070 /** 071 * このオブジェクトを初期化します。 072 * 指定の引数分の内部配列を作成します。 073 * 具体的には,DBColumn の数を指定することになります。 074 * 075 * @param columnCount カラム数 076 */ 077 void init( int columnCount ) ; 078 079 /** 080 * このオブジェクトをヘッダー部分をコピーし、データを初期化します。 081 * これは、カラムなどヘッダー系の情報は、元と同じオブジェクトを共有し、 082 * データ部のみ空にした DBTableModel を作成することを意味します。 083 * この際、consistencyKey も複写しますので、整合性は崩れないように、 084 * データ登録を行う必要があります。 085 * 086 * @og.rev 4.0.0.0 (2007/06/28) 新規作成 087 * 088 * @return DBTableModelオブジェクト 089 */ 090 DBTableModel newModel(); 091 092 /** 093 * カラムのラベル名を返します。 094 * カラムの項目名に対して,見える形の文字列を返します。 095 * 一般には,リソースバンドルと組合せて,各国ロケール毎にラベルを 096 * 切替えます。 097 * セットされた DBColumn#getLabel( int ) の値が返されます。 098 * 099 * @param column カラム番号 100 * 101 * @return カラムのラベル名 102 */ 103 String getColumnLabel( int column ) ; 104 105 /** 106 * row および columnName にあるセルの属性値をStringに変換して返します。 107 * 108 * @param aRow 値が参照される行 109 * @param columnName 値が参照されるカラム名 110 * 111 * @return 指定されたセルの値 String 112 * @see #getValue( int , int ) 113 */ 114 String getValue( final int aRow, final String columnName ); 115 116 /** 117 * カラム(列)にカラムオブジェクトを割り当てます。 118 * カラムオブジェクトは,ラベルやネームなど,そのカラム情報を 119 * 保持したオブジェクトです。 120 * 121 * @param dbColumn カラムオブジェクト 122 * @param clm ヘッダーを適応するカラム(列) 123 */ 124 void setDBColumn( int dbColumn, DBColumn clm ) ; 125 126 /** 127 * カラム(列)のカラムオブジェクトを返します。 128 * カラムオブジェクトは,ラベルやネームなど,そのカラム情報を 129 * 保持したオブジェクトです。 130 * 131 * @param clm ヘッダーを適応するカラム(列) 132 * 133 * @return DBColumnカラムオブジェクト 134 */ 135 DBColumn getDBColumn( int clm ) ; 136 137 /** 138 * カラムオブジェクト配列を返します。 139 * カラムオブジェクトは,ラベルやネームなど,そのカラム情報を 140 * 保持したオブジェクトです。 141 * 142 * @og.rev 4.0.0.0 (2005/12/31) 新規追加 143 * 144 * @return カラムオブジェクト配列 145 */ 146 DBColumn[] getDBColumns() ; 147 148 /** 149 * カラム名をもとに、そのカラム番号を返します。 150 * useThrow が、true の場合は、カラム名が存在しない場合は、 HybsSystemException を 151 * throw します。useThrow が、false の場合は、カラム名が存在しない場合は、 -1 を返します。 152 * 153 * @og.rev 4.0.0.0 (2005/12/31) 新規追加 154 * 155 * @param columnName カラム名 156 * @param useThrow カラム名が存在しない場合に、Exception を throw するかどうか 157 * 158 * @return カラム番号 159 */ 160 int getColumnNo( final String columnName,final boolean useThrow ) ; 161 162 /** 163 * 変更済みフラグを元に戻します。 164 * 165 * 一般には,データベースにテーブルモデルを登録するタイミングで、 166 * 変更済みフラグを元に戻します。 167 * 168 */ 169 void resetModify() ; 170 171 /** 172 * 変更データを初期値(元の取り込んだ状態)に戻します。 173 * 174 * 変更タイプ(追加/変更/削除)に応じて、処理されます。 175 * 追加時は、追加された行を削除します。 176 * 変更時は、変更された行を元に戻します。 177 * 削除時は、削除フラグを解除します。 178 * それ以外の場合(変更されていない場合)は、なにもしません。 179 * 180 * @param row 処理を戻す(取り消す)行 181 */ 182 void resetRow( int row ) ; 183 184 /** 185 * row 単位に変更されたタイプ(追加/変更/削除)を返します。 186 * 187 * @param row 値が参照される行 188 * 189 * @return 変更されたタイプの値 String 190 * 191 */ 192 String getModifyType(int row) ; 193 194 /** 195 * row 単位に変更タイプ(追加/変更/削除)をセットします。 196 * このメソッドでは、データのバックアップは取りません。 197 * タイプは始めに一度登録するとそれ以降に変更はかかりません。 198 * なにも変更されていない場合は, ""(ゼロストリング)の状態です。 199 * 200 * @param row 値が参照される行 201 * @param modType 変更タイプ(追加/変更/削除) 202 * 203 */ 204 void setModifyType( int row,String modType ) ; 205 206 /** 207 * 書込み許可を返します。 208 * 209 * @param aRow 値が参照される行 210 * 211 * @return 書込み可能(true)/不可能(false) 212 */ 213 boolean isRowWritable( int aRow ) ; 214 215 /** 216 * 書き込み可能な行(rowWritable == true)のチェックボックスに対して 217 * 初期値を 選択済みか、非選択済みかを返します。 218 * 219 * @param row 値が参照される行 220 * 221 * @return 初期値チェックON(true)/チェックOFF(false) 222 */ 223 boolean isRowChecked( int row ) ; 224 225 /** 226 * 検索結果が オーバーフローしたかどうかをチェックします。 227 * Query で検索した場合に、DB_MAX_ROW_COUNT または、Query.setMaxRowCount( int maxRowCount ) 228 * で指定された値よりも検索結果が多い場合に、DBTableModel は、先の設定値までの 229 * データを取り込みます。そのときに、オーバーフローフラグを立てておくことで、最大件数を 230 * オーバーしたかどうかを判断します。 231 * 232 * @return オーバーフロー(true)/正常(false) 233 */ 234 boolean isOverflow() ; 235 236 /** 237 * 検索されたDBTableModelが登録時に同一かどうかを判断する為の 整合性キーを取得します。 238 * 239 * ここでの整合性は、同一セッション(ユーザー)毎にユニークかどうかで対応します。 240 * 分散環境(複数のセッション間)での整合性は、確保できません。 241 * 整合性キー は、オブジェクト作成時刻としますが、将来変更される可能性があります。 242 * 243 * @og.rev 3.5.5.5 (2004/04/23) 新規追加 244 * 245 * @return 整合性キー(オブジェクトの作成時刻) 246 */ 247 String getConsistencyKey() ; 248 249 // ======================================================================= 250 // 251 // TableModel Interface と共有していたメソッドを、独自に再定義します。 252 // 253 // ======================================================================= 254 255 /** 256 * データテーブル内の行の数を返します。 257 * 258 * @og.rev 3.5.3.1 (2003/10/31) インターフェースの見直しにより、追加 259 * 260 * @return モデルの行数 261 */ 262 int getRowCount() ; 263 264 /** 265 * データテーブル内の列の数を返します。 266 * 267 * @og.rev 3.5.3.1 (2003/10/31) インターフェースの見直しにより、追加 268 * 269 * @return モデルの列数 270 */ 271 int getColumnCount() ; 272 273 /** 274 * カラム名を取得します。 275 * 276 * @og.rev 3.5.3.1 (2003/10/31) インターフェースの見直しにより、追加 277 * 278 * @param column 最初のカラムは 0、2番目のカラムは 1、などとする。 279 * 280 * @return カラム名 281 */ 282 String getColumnName(int column) ; 283 284 // ======================================================================= 285 // 286 // DBTableModelImpl.java で定義されている public メソッド残り全て 287 // 288 // ======================================================================= 289 290 /** 291 * column に対応した 値を登録します。 292 * column には、番号ではなく、ラベルを指定します。 293 * 294 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 295 * 296 * @param aRow 値が変更される行 297 * @param columnName 値が変更されるカラム名 298 * @param value 新しい値。null も可 299 * 300 */ 301 void setValue( int aRow, String columnName, String value ) ; 302 303 /** 304 * column および row にあるセルのオブジェクト値を設定します。 305 * value は新しい値です。このメソッドは、tableChanged() 通知を生成します。 306 * 307 * @og.rev 3.1.0.0 (2003/03/20) 同期メソッド(synchronized付き)を非同期に変更する。 308 * @og.rev 3.5.3.1 (2003/10/31) インターフェースの見直しにより、private 化する。 309 * @og.rev 4.0.0.0 (2007/05/24) インターフェースの見直しにより、public 化する。 310 * 311 * @param value 新しい値。null も可 312 * @param aRow 値が変更される行 313 * @param aColumn 値が変更される列 314 */ 315 void setValueAt( String value, int aRow, int aColumn ) ; 316 317 /** 318 * 行を削除します。 319 * 物理削除ではなく、論理削除です。 320 * データを取り込むことは可能です。 321 * 322 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 323 * 324 * @param aRow 論理削除される行 325 * 326 */ 327 void rowDelete( int aRow ) ; 328 329 /** 330 * row にあるセルのオブジェクト値を置き換えて、行を削除します。 331 * 物理削除ではなく、論理削除です。 332 * 値を置き換えたデータを取り込むことが可能です。 333 * 334 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 335 * 336 * @param values 新しい配列値。 337 * @param aRow 論理削除される行 338 * 339 */ 340 void rowDelete( String[] values, int aRow ) ; 341 342 /** 343 * 行を物理削除します。 344 * メモリ上で編集する場合に使用しますが,一般アプリケーションからの 345 * 使用は、物理削除の為,お勧めいたしません。 346 * 347 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 348 * 349 * @param aRow 物理削除される行 350 * 351 */ 352 void removeValue( int aRow ) ; 353 354 /** 355 * row の下に属性値配列を追加登録します。 356 * 357 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 358 * 359 * @param values 属性値配列 360 * @param aRow 値が参照される行 361 * 362 */ 363 void addValues( String[] values ,int aRow ) ; 364 365 /** 366 * row の下に属性値配列を追加登録します。 367 * isWritableをfalseにした場合、編集不可能な状態で追加されます。 368 * 369 * @og.rev 4.3.1.0 (2008/09/04) interface に新規登録 370 * 371 * @param values 属性値配列 372 * @param aRow 値が参照される行 373 * @param isWritable 編集不可能な状態で追加するか 374 * 375 */ 376 void addValues( String[] values ,int aRow, boolean isWritable ) ; 377 378 /** 379 * row あるセルの属性値配列を追加登録します。 380 * これは,初期登録時のみに使用します。 381 * 382 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 383 * 384 * @param values 属性値配列 385 * 386 */ 387 void addColumnValues( String[] values ) ; 388 389 /** 390 * row にあるセルのオブジェクト値を置き換えます。 391 * 392 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 393 * 394 * @param values 新しい配列値。 395 * @param aRow 値が変更される行 396 * 397 */ 398 void setValues( String[] values, int aRow ) ; 399 400 /** 401 * 変更済みフラグを元に戻します。 402 * 403 * 一般には,データベースにテーブルモデルを登録するタイミングで、 404 * 変更済みフラグを元に戻します。 405 * 406 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 407 * 408 * @param aRow 値が参照される行 409 */ 410 void resetModify( int aRow ) ; 411 412 /** 413 * 行が書き込み可能かどうかをセットします。 414 * デフォルト/およびなにも設定しない場合は, DEFAULT_WRITABLE が 415 * 与えられています。 416 * これが true の場合は,書込み許可です。(チェックボックスを表示) 417 * false の場合は,書込み不許可(チェックボックスは表示されません。) 418 * 419 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 420 * 421 * @param aRow 値が参照される行 422 * @param rw 書込み可能(true)/不可能(false) 423 */ 424 void setRowWritable( int aRow ,boolean rw ) ; 425 426 /** 427 * 書き込み可能な行(rowWritable == true)のチェックボックスに対して 428 * 初期値を 選択済みにするか、非選択済みにするかを指定します。 429 * 430 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 431 * 432 * @param aRow 値が参照される行 433 * @param rw チェックON(true)/チェックOFF(false) 434 */ 435 void setRowChecked( int aRow ,boolean rw ) ; 436 437 /** 438 * 行指定の書込み許可を与えます。 439 * 具体的には,チェックボックスの表示/非表示を指定します。 440 * これが true の場合は,書込み許可です。(チェックボックスを表示) 441 * false の場合は,書込み不許可(チェックボックスは表示されません。) 442 * 行毎に書込み許可/不許可を指定する場合は,1カラム目に writable 443 * カラムを用意して true/false を指定します。 444 * この writable カラムとの論理積により最終的にチェックボックスの 445 * 表示の ON/OFF が決まります。 446 * なにも設定しない場合は, ViewForm.DEFAULT_WRITABLE が設定されます。 447 * 448 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 449 * 450 * @param rw 書込み可能(true)/不可能(false) 451 */ 452 void setDefaultRowWritable( boolean rw ) ; 453 454 /** 455 * 書き込み可能な行(rowWritable == true)のチェックボックスに対して 456 * 初期値を 選択済みにするか、非選択済みにするかを指定します。 457 * 458 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 459 * 460 * @param rw 選択状態(true)/非選択状態(false) 461 */ 462 void setDefaultRowChecked( boolean rw ) ; 463 464 /** 465 * 検索結果が オーバーフローしたかどうかを設定します。 466 * Query で検索した場合に、DB_MAX_ROW_COUNT または、Query.setMaxRowCount( int maxRowCount ) 467 * で指定された値よりも検索結果が多い場合に、DBTableModel は、先の設定値までの 468 * データを取り込みます。そのときに、オーバーフローフラグを立てておくことで、最大件数を 469 * オーバーしたかどうかを判断します。 470 * 471 * @og.rev 3.5.6.4 (2004/07/16) interface に新規登録 472 * 473 * @param of オーバーフロー(true)/正常(false) 474 */ 475 void setOverflow( boolean of ) ; 476 477 /** 478 * カラム(列)にmustタイプ値を割り当てます。 479 * この値は、columnCheck 時の nullCheck や mustAnyCheck の 480 * チェック対象カラムとして認識されます。 481 * 482 * @og.rev 4.1.2.1 (2008/03/13) interface に新規登録 483 * 484 * @param dbColumn カラムオブジェクト 485 * @param type mustタイプ(must,mustAny) 486 */ 487 void addMustType( int dbColumn, String type ) ; 488 489 /** 490 * mustType="must"時のカラム名を、カンマ区切り文字列として返します。 491 * この値は、columnCheck 時の nullCheck のチェック対象カラムとして 492 * 認識されます。 493 * カラム名配列は、ソート済みです。 494 * 495 * @og.rev 4.1.2.1 (2008/03/13) interface に新規登録 496 * 497 * @return mustType="must"時のカラム名配列(ソート済み) 498 */ 499 String[] getMustArray(); 500 501 /** 502 * mustType="mustAny" 他のカラム名を、カンマ区切り文字列として返します。 503 * この値は、columnCheck 時の mustAnyCheck のチェック対象カラムとして 504 * 認識されます。 505 * カラム名配列は、ソート済みです。 506 * 507 * @og.rev 4.1.2.1 (2008/03/13) interface に新規登録 508 * 509 * @return mustType="mustAny"時のカラム名配列(ソート済み) 510 */ 511 String[] getMustAnyArray(); 512}