    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&lt;String&gt; インターフェースを継承しています。
    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         * 行毎に書込み許可/不許可を指定する場合は,１カラム目に 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         * 行毎に書込み許可/不許可を指定する場合は,１カラム目に 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}