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}