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