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         */
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         * このデータは,最初に1度しか設定できません。つまり、同一行を何度も
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}