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