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