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 の1行分の特性を管理するクラスです。
022 * このクラスに1行分の特性をセットして、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        /* default */ 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         * このデータは、最初に1度しか設定できません。つまり、同一行を何度も
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}