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}