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.io; 017 018import org.opengion.hayabusa.db.DBTableModel; 019import org.opengion.hayabusa.resource.ResourceManager; 020 021import java.io.BufferedReader; 022 023/** 024 * DBTableModel インターフェース のオブジェクトをReader を用いて入力する為の,共通インターフェースです。 025 * 026 * @og.group ファイル入力 027 * 028 * @version 4.0 029 * @author Kazuhiko Hasegawa 030 * @since JDK5.0, 031 */ 032public interface TableReader { 033 034 /** 035 * ヘッダー情報の入力時の区切り文字 036 */ 037 String TAB_SEPARATOR = "\t"; // 項目区切り文字 038 039 /** 040 * DBTableModel から 各形式のデータを作成して,Reader より読み取ります。 041 * このメソッドは、EXCEL 読み込み時に使用します。 042 * 043 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 044 * 045 * @see #isExcel() 046 */ 047 void readDBTable() ; 048 049 /** 050 * DBTableModel から 各形式のデータを作成して,Reader より読み取ります。 051 * 052 * @og.rev 3.5.4.3 (2004/01/05) 引数に、BufferedReader を受け取ル要に変更します。 053 * 054 * @param reader BufferedReaderオブジェクト 055 */ 056 void readDBTable( final BufferedReader reader ) ; 057 058 /** 059 * リソースマネージャーをセットします。 060 * これは、言語(ロケール)に応じた DBColumn をあらかじめ設定しておく為に 061 * 必要です。 062 * リソースマネージャーが設定されていない、または、所定のキーの DBColumn が 063 * リソースに存在しない場合は、内部で DBColumn オブジェクトを作成します。 064 * 065 * @og.rev 4.0.0.0 (2005/01/31) lang ⇒ ResourceManager へ変更 066 * 067 * @param resource リソースマネージャー 068 */ 069 void setResourceManager( final ResourceManager resource ) ; 070 071 /** 072 * 内部の DBTableModel を返します。 073 * 074 * @return DBTableModelオブジェクト 075 */ 076 DBTableModel getDBTableModel() ; 077 078 /** 079 * データを読み込む場合の,区切り文字をセットします。 080 * 081 * なお,このメソッドは,サブクラスによっては,使用しない場合があります。 082 * もし,使用しないサブクラスを作成する場合は, UnsupportedOperationException 083 * を throw するように,サブクラスで実装して下さい。 084 * 085 * @param separator 区切り文字 086 */ 087 void setSeparator( final String separator ) ; 088 089 /** 090 * DBTableModelのデータとして登録する最大件数をこの値に設定します。 091 * サーバーのメモリ資源と応答時間の確保の為です。 092 * 093 * @return 最大検索件数 094 */ 095 int getMaxRowCount() ; 096 097 /** 098 * DBTableModelのデータとして登録する最大件数をこの値に設定します。 099 * サーバーのメモリ資源と応答時間の確保の為です。 100 * 101 * @param maxRowCount 最大検索件数 102 */ 103 void setMaxRowCount( final int maxRowCount ) ; 104 105 /** 106 * DBTableModelのデータとしてEXCELファイルを読み込むときのシート名を設定します。 107 * これにより、複数の形式の異なるデータを順次読み込むことや、シートを指定して 108 * 読み取ることが可能になります。 109 * sheetNos と sheetName が同時に指定された場合は、sheetNos が優先されます。エラーにはならないのでご注意ください。 110 * のでご注意ください。 111 * このメソッドは、isExcel() == true の場合のみ利用されます。 112 * 113 * @og.rev 3.5.4.2 (2003/12/15) 新規追加 114 * 115 * @param sheetName シート名 116 * @see #setSheetNos( String ) 117 */ 118 void setSheetName( final String sheetName ) ; 119 120 /** 121 * EXCELファイルを読み込むときのシート番号を指定します(初期値:0)。 122 * 123 * EXCEL読み込み時に複数シートをマージして取り込みます。 124 * シート番号は、0 から始まる数字で表します。 125 * ヘッダーは、最初のシートのカラム位置に合わせます。(ヘッダータイトルの自動認識はありません。) 126 * よって、指定するシートは、すべて同一レイアウトでないと取り込み時にカラムのずれが発生します。 127 * 128 * シート番号の指定は、カンマ区切りで、複数指定できます。また、N-M の様にハイフンで繋げることで、 129 * N 番から、M 番のシート範囲を一括指定可能です。また、"*" による、全シート指定が可能です。 130 * これらの組み合わせも可能です。( 0,1,3,5-8,10-* ) 131 * ただし、"*" に関しては例外的に、一文字だけで、すべてのシートを表すか、N-* を最後に指定するかの 132 * どちらかです。途中には、"*" は、現れません。 133 * シート番号は、重複(1,1,2,2)、逆転(3,2,1) での指定が可能です。これは、その指定順で、読み込まれます。 134 * sheetNos と sheetName が同時に指定された場合は、sheetNos が優先されます。エラーにはならないのでご注意ください。 135 * このメソッドは、isExcel() == true の場合のみ利用されます。 136 * 137 * 初期値は、0(第一シート) です。 138 * 139 * @og.rev 5.5.7.2 (2012/10/09) 新規追加 140 * 141 * @param sheetNos EXCELファイルのシート番号(0から始まる) 142 * @see #setSheetName( String ) 143 */ 144 void setSheetNos( final String sheetNos ) ; 145 146 /** 147 * EXCELファイルを読み込むときのシート単位の固定値を設定するためのカラム名とアドレスを指定します。 148 * カラム名は、カンマ区切りで指定します。 149 * 対応するアドレスを、EXCEL上の行-列を0から始まる整数でカンマ区切りで指定します。 150 * これにより、シートの一か所に書かれている情報を、DBTableModel のカラムに固定値として 151 * 設定することができます。 152 * 例として、DB定義書で、テーブル名をシートの全レコードに設定したい場合などに使います。 153 * このメソッドは、isExcel() == true の場合のみ利用されます。 154 * 155 * @og.rev 5.5.8.2 (2012/11/09) 新規追加 156 * 157 * @param constKeys 固定値となるカラム名(CSV形式) 158 * @param constAdrs 固定値となるアドレス(行-列,行-列,・・・) 159 */ 160 void setSheetConstData( final String constKeys,final String constAdrs ) ; 161 162 /** 163 * ここに指定されたカラム列に NULL が現れた時点で読み取りを中止します。 164 * 165 * これは、指定のカラムは必須という事を条件に、そのレコードだけを読み取る処理を行います。 166 * 複数Sheetの場合は、次のSheetを読みます。 167 * 現時点では、Excel の場合のみ有効です。 168 * 169 * @og.rev 5.5.8.2 (2012/11/09) 新規追加 170 * 171 * @param clm カラム列 172 */ 173 void setNullBreakClm( final String clm ) ; 174 175 /** 176 * このクラスが、EXCEL対応機能を持っているかどうかを返します。 177 * 178 * EXCEL対応機能とは、シート名のセット、読み込み元ファイルの 179 * Fileオブジェクト取得などの、特殊機能です。 180 * 本来は、インターフェースを分けるべきと考えますが、taglib クラス等の 181 * 関係があり、問い合わせによる条件分岐で対応します。 182 * 183 * @og.rev 3.5.4.3 (2004/01/05) 新規追加 184 * 185 * @return EXCEL対応機能を持っているかどうか 186 */ 187 boolean isExcel() ; 188 189 /** 190 * 読み取り元ファイル名をセットします。(DIR + Filename) 191 * これは、EXCEL追加機能として実装されています。 192 * 193 * @og.rev 3.5.4.3 (2004/01/05) 新規作成 194 * 195 * @param filename 読み取り元ファイル名 196 */ 197 void setFilename( final String filename ) ; 198 199 /** 200 * 読み取り元ファイルのカラム列を、外部(タグ)より指定します。 201 * ファイルに記述された #NAME より優先して使用されます。 202 * 203 * @og.rev 3.5.4.5 (2004/01/23) 新規作成 204 * 205 * @param clms 読み取り元ファイルのカラム列(カンマ区切り文字) 206 */ 207 void setColumns( final String clms ) ; 208 209 /** 210 * 読み取り元ファイルのエンコード文字列を指定します。 211 * ファイルは、BufferedReader で受け取る為、本来は、エンコードは不要ですが、 212 * 固定長ファイルの読み取り時のバイトコード分割時に、指定のエンコードで 213 * 分割する必要があります。(例えば、半角文字は、Shift_JIS では、1バイト) 214 * 215 * @og.rev 3.5.4.5 (2004/01/23) 新規作成 216 * 217 * @param enc ファイルのエンコード文字列 218 */ 219 void setEncode( final String enc ) ; 220 221 /** 222 * 行番号情報を、使用している(true)/していない(false)を指定します。 223 * 224 * 通常のフォーマットでは、各行の先頭に行番号が出力されています。 225 * 読み取り時に、#NAME 属性を使用する場合は、この行番号を無視しています。 226 * #NAME 属性を使用せず、columns 属性でカラム名を指定する場合(他システムの 227 * 出力ファイルを読み取るケース等)では、行番号も存在しないケースがあり、 228 * その様な場合に、useNumber="false" を指定すれば、データの最初から読み取り始めます。 229 * この場合、出力データのカラムの並び順が変更された場合、columns 属性も 230 * 指定しなおす必要がありますので、できるだけ、#NAME 属性を使用するように 231 * してください。 232 * なお、EXCEL 入力には、この設定は適用されません。(暫定対応) 233 * 初期値は、true(使用する) です。 234 * 235 * @og.rev 3.7.0.5 (2005/04/11) 新規追加 236 * 237 * @param useNumber 行番号情報 [true:使用している/false:していない] 238 */ 239 void setUseNumber( final boolean useNumber ) ; 240 241 /** 242 * データの読み飛ばし件数を設定します。 243 * 244 * TAB区切りテキストやEXCEL等のデータの読み始めの初期値を指定します。 245 * ファイルの先頭行が、0行としてカウントしますので、設定値は、読み飛ばす 246 * 件数になります。(1と指定すると、1件読み飛ばし、2行目から読み込みます。) 247 * 読み飛ばしは、コメント行などは、無視しますので、実際の行数分読み飛ばします。 248 * #NAME属性や、columns 属性は、有効です。 249 * 250 * @og.rev 5.1.6.0 (2010/05/01) 新規作成 251 * 252 * @param count 読み始めの初期値 253 */ 254 void setSkipRowCount( final int count ) ; 255 256 /** 257 * 読取処理でラベルをコードリソースに逆変換を行うかどうかを指定します。 258 * 259 * TableWriter_Renderer 系のクラスで出力した場合は、コードリソースがラベルで出力されます。 260 * そのファイルを読み取ると、当然、エラーになります。 261 * ここでは、コードリソースのカラムに対して、ラベルからコードを求める逆変換を行うことで、 262 * Renderer 系で出力したファイルを取り込むことができるようにします。 263 * 264 * ここでは、TableWriter 系と同様に、TableReader_Renderer 系のクラスを作るのではなく、 265 * 属性値のフラグで、制御します。 266 * 将来的には、TableWriter 系も廃止して、同様のフラグで制御するように変更する予定です。 267 * 268 * @og.rev 5.2.1.0 (2010/10/01) 新規作成 269 * 270 * @param useRenderer コードリソースのラベル逆変換を行うかどうかを指定 271 */ 272 void setUseRenderer( final boolean useRenderer ) ; 273 274 /** 275 * デバッグ情報を出力するかどうかを指定します。 276 * 277 * EXCELなどを読み取る場合、シートマージで読み取ると、エラー時の行番号が、連番になるため、 278 * どのシートなのか、判らなくなります。 279 * そこで、どうしてもわからなくなった場合に備えて、デバッグ情報を出力できるようにします。 280 * 通常は使用しませんので、設定を無視します。 281 * 初期値は、false:デバッグ情報を出力しない です。 282 * 283 * @og.rev 5.5.7.2 (2012/10/09) 新規作成 284 * 285 * @param useDebug デバッグ情報を出力するかどうかを指定 286 */ 287 void setDebug( final boolean useDebug ) ; 288}