    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.hayabusa.common.HybsSystemException;
    019
    020/**
    021 * DBTableModel の１行分の特性を管理するクラスです。
    022 * このクラスに１行分の特性をセットして、DBTableModelImpl#setDBRowHeader( int aRow, DBRowHeader rowHeader )
    023 * を用いて、ヘッダーデータを登録します。
    024 * なお、DBTableModel インターフェース 自体には、ヘッダー情報を登録する手段はありませんので
    025 * DBTableModel 実装クラスの独自メソッドで、ヘッダーデータを与える必要があります。
    026 *
    027 * @og.rev 3.5.6.0 (2004/06/18) クラスのパッケージプライベート化を行います。
    028 * @og.group テーブル管理
    029 *
    030 * @version  4.0
    031 * @author   Kazuhiko Hasegawa
    032 * @since    JDK5.0,
    033 */
    034class DBRowHeader {
    035
    036        private boolean  writable ;
    037        private boolean  checked  ;
    038        private String[] bkupdata ;
    039        private String   type     ;
    040        private String   marker   ;
    041
    042        /**
    043         * パッケージプライベートな、コンストラクター
    044         *
    045         */
    046        DBRowHeader() {
    047                initialise();
    048        }
    049
    050        /**
    051         * データを初期化します。
    052         *
    053         */
    054        void clear() {
    055                initialise();
    056        }
    057
    058        private void initialise() {
    059                writable = DBTableModel.DEFAULT_WRITABLE;
    060                checked  = DBTableModel.DEFAULT_CHECKED ;
    061                bkupdata = null ;
    062                type     = "";
    063                marker   = "";
    064        }
    065
    066        /**
    067         * 書込み許可を返します。
    068         *
    069         * @return  書込み可能(true)／不可能(false)
    070         */
    071        boolean isWritable() {
    072                return writable;
    073        }
    074
    075        /**
    076         * 行が書き込み可能かどうかをセットします。
    077         * デフォルト/およびなにも設定しない場合は, DBTableModel.DEFAULT_WRITABLE が
    078         * 与えられています。
    079         * これが true の場合は,書込み許可です。(チェックボックスを表示)
    080         * false の場合は,書込み不許可(チェックボックスは表示されません。)
    081         *
    082         * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。
    083         *
    084         * @param   rw 書込み可能(true)／不可能(false)
    085         */
    086        void setWritable( final boolean rw ) {
    087                writable = rw;
    088        }
    089
    090        /**
    091         * 書き込み可能な行(rowWritable == true)のチェックボックスに対して
    092         * 初期値を 選択済みか、非選択済みかを返します。
    093         *
    094         * @return 選択済みの場合は、true , そうでないときは、flse を返します。
    095         */
    096        boolean isChecked() {
    097                return checked;
    098        }
    099
    100        /**
    101         * 書き込み可能な行(rowWritable == true)のチェックボックスに対して
    102         * 初期値を 選択済みにするか、非選択済みにするかを指定します。
    103         *
    104         * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。
    105         *
    106         * @param   rw チェックON(true)／チェックOFF(false)
    107         */
    108        void setChecked( final boolean rw ) {
    109                checked = rw;
    110        }
    111
    112        /**
    113         * row 単位に変更タイプ(追加/変更/削除)をセットします。
    114         * タイプは始めに一度登録するとそれ以降に変更はかかりません。
    115         * つまり、始めに 追加で作成したデータは、その後変更があっても追加のままです。
    116         * なにも変更されていない場合は, ""(ゼロストリング)の状態です。
    117         *
    118         * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。
    119         *
    120         * @param   modType  変更タイプ(追加/変更/削除)
    121         */
    122        void setType( final String modType ) {
    123                if( type == null || type.length() == 0 ) {
    124                        type = modType ;
    125                }
    126        }
    127
    128        /**
    129         * row 単位に変更タイプ(追加/変更/削除)を返します。
    130         * なにも変更されていない場合は, ""(ゼロストリング)の状態です。
    131         *
    132         * @return   変更タイプ(追加/変更/削除)
    133         *
    134         */
    135        String getType() {
    136                return type;
    137        }
    138
    139        /**
    140         * row 単位にバックアップデータを保管します。
    141         * このデータは,最初に１度しか設定できません。つまり、同一行を何度も
    142         * 書き換えたとしても、初めの状態にしか戻すことは出来ません。
    143         * このデータを 履歴を管理できるようにすれば, 書き換えた逆順に
    144         * データを取り出すことが可能になりますが,現在は対応していません。
    145         * データ設定時に、配列コピーを取得します。
    146         *
    147         * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。
    148         * @og.rev 3.5.6.0 (2004/06/18) 配列をそのまま受け取らずに、arraycopy してセットする。
    149         *
    150         * @param       bkup    バックアップデータ配列
    151         */
    152        void setBackupData( final String[] bkup ) {
    153                if( bkupdata == null ) {
    154                        int size = bkup.length ;
    155                        bkupdata = new String[size];
    156                        System.arraycopy( bkup,0,bkupdata,0,size );
    157                }
    158        }
    159
    160        /**
    161         * row 単位にバックアップデータを取り出します。
    162         * 最初に登録されたデータを返します。
    163         * まだ、なにも修正(追加/変更/削除)が行われていない場合は、null を返します。
    164         *
    165         * @og.rev 3.5.6.0 (2004/06/18) 配列をそのまま返さずに、clone して返します。
    166         * @og.rev 3.6.0.0 (2004/09/22) バックアップデータが存在しない場合はエラーとする。
    167         *
    168         * @return   バックアップデータ(存在しない場合は、エラー)
    169         */
    170        String[] getBackupData() {
    171                if( bkupdata != null ) {
    172                        return bkupdata.clone();
    173                }
    174
    175                String errMsg = "バックアップデータが存在しません。" +
    176                                        "事前に、getType() で更新状態を取得後、" +
    177                                        "この処理の実行可否を判断して下さい。type=[" + type + "]";
    178                throw new HybsSystemException( errMsg );
    179        }
    180
    181        /**
    182         * row 単位に指定のマーカーを付けます。
    183         * マーカーは、表示等に行に色をつけたりするのに使用できます。
    184         * 初期値は、空文字 "" です。
    185         *
    186         * @param       marker  マーカー文字列
    187         *
    188         */
    189        void setMarker( final String marker ) {
    190                if( marker == null ) { this.marker = ""; }
    191                else {                 this.marker = marker; }
    192        }
    193
    194        /**
    195         * row 単位に指定されたマーカーを返します。
    196         * マーカーは、表示等に行に色をつけたりするのに使用できます。
    197         * 初期値は、空文字 "" です。
    198         *
    199         * @return   マーカー文字列
    200         *
    201         */
    202        String getMarker() {
    203                return marker;
    204        }
    205}