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.ColumnActionListener;           // 6.2.2.0 (2015/03/27)
019
020import java.io.File;                                                                            // 6.2.0.0 (2015/02/27)
021
022/**
023 * DBTableModel インターフェース のオブジェクトをReader を用いて入力する為の共通インターフェースです。
024 *
025 * @og.group ファイル入力
026 *
027 * @version  4.0
028 * @author   Kazuhiko Hasegawa
029 * @since    JDK5.0,
030 */
031public interface TableReader {
032
033        /**
034         * ヘッダー情報の入力時の区切り文字
035         */
036        String TAB_SEPARATOR = "\t";            // 項目区切り文字
037
038        /**
039         * DBTableModel から 各形式のデータを作成して Reader より読み取ります。
040         *
041         * @og.rev 3.5.4.3 (2004/01/05) 引数に、BufferedReader を受け取ル要に変更します。
042         * @og.rev 6.2.0.0 (2015/02/27) TableReader クラスの呼び出し元メソッドの共通化(EXCEL,TEXT)。新規
043         *
044         * @param   filename 読み取り元ファイル名
045         * @param   enc ファイルのエンコード文字列
046         */
047        void readDBTable( final File filename , final String enc );
048
049        /**
050         * データを読み込む場合の区切り文字をセットします。
051         *
052         * なお、このメソッドは、サブクラスによっては使用しない場合があります。
053         * もし、使用しないサブクラスを作成する場合は UnsupportedOperationException
054         * を throw するようにサブクラスで実装して下さい。
055         *
056         * @param   separator 区切り文字
057         */
058        void setSeparator( final String separator ) ;
059
060        /**
061         * DBTableModelのデータとしてEXCELファイルを読み込むときのシート名を設定します。
062         * これにより、複数の形式の異なるデータを順次読み込むことや、シートを指定して
063         * 読み取ることが可能になります。
064         * sheetNos と sheetName が同時に指定された場合は、sheetNos が優先されます。エラーにはならないのでご注意ください。
065         * のでご注意ください。
066         * このメソッドは、isExcel() == true の場合のみ利用されます。
067         *
068         * @og.rev 3.5.4.2 (2003/12/15) 新規追加
069         *
070         * @param   sheetName シート名
071         * @see         #setSheetNos( String ) 
072         */
073        void setSheetName( final String sheetName ) ;
074
075        /**
076         * EXCELファイルを読み込むときのシート番号を指定します(初期値:0)。
077         *
078         * EXCEL読み込み時に複数シートをマージして取り込みます。
079         * シート番号は、0 から始まる数字で表します。
080         * ヘッダーは、最初のシートのカラム位置に合わせます。(ヘッダータイトルの自動認識はありません。)
081         * よって、指定するシートは、すべて同一レイアウトでないと取り込み時にカラムのずれが発生します。
082         * 
083         * シート番号の指定は、CSV形式で、複数指定できます。また、N-M の様にハイフンで繋げることで、
084         * N 番から、M 番のシート範囲を一括指定可能です。また、"*" による、全シート指定が可能です。
085         * これらの組み合わせも可能です。( 0,1,3,5-8,10-* )
086         * ただし、"*" に関しては例外的に、一文字だけで、すべてのシートを表すか、N-* を最後に指定するかの
087         * どちらかです。途中には、"*" は、現れません。
088         * シート番号は、重複(1,1,2,2)、逆転(3,2,1) での指定が可能です。これは、その指定順で、読み込まれます。
089         * sheetNos と sheetName が同時に指定された場合は、sheetNos が優先されます。エラーにはならないのでご注意ください。
090         * このメソッドは、isExcel() == true の場合のみ利用されます。
091         * 
092         * 初期値は、0(第一シート) です。
093         *
094         * @og.rev 5.5.7.2 (2012/10/09) 新規追加
095         *
096         * @param   sheetNos EXCELファイルのシート番号(0から始まる)
097         * @see         #setSheetName( String ) 
098         */
099        void setSheetNos( final String sheetNos ) ;
100
101        /**
102         * EXCELファイルを読み込むときのシート単位の固定値を設定するためのカラム名とアドレスを指定します。
103         * カラム名は、CSV形式で指定します。
104         * 対応するアドレスを、EXCEL上の行-列を0から始まる整数でCSV形式で指定します。
105         * これにより、シートの一か所に書かれている情報を、DBTableModel のカラムに固定値として
106         * 設定することができます。
107         * 例として、DB定義書で、テーブル名をシートの全レコードに設定したい場合などに使います。
108         * このメソッドは、isExcel() == true の場合のみ利用されます。
109         *
110         * @og.rev 5.5.8.2 (2012/11/09) 新規追加
111         *
112         * @param   constKeys 固定値となるカラム名(CSV形式)
113         * @param   constAdrs 固定値となるアドレス(行-列,行-列,・・・)
114         */
115        void setSheetConstData( final String constKeys,final String constAdrs ) ;
116
117        /**
118         * ここに指定されたカラム列に NULL が現れた時点で読み取りを中止します。
119         *
120         * これは、指定のカラムは必須という事を条件に、そのレコードだけを読み取る処理を行います。
121         * 複数Sheetの場合は、次のSheetを読みます。
122         * 現時点では、Excel の場合のみ有効です。
123         *
124         * @og.rev 5.5.8.2 (2012/11/09) 新規追加
125         *
126         * @param   clm カラム列
127         */
128        void setNullBreakClm( final String clm ) ;
129
130        /**
131         * ここに指定されたカラム列に NULL が現れたレコードは読み飛ばします。
132         *
133         * 例えば、更新対象カラムで、null の場合は、何もしない、などのケースで使用できます。
134         * 複数カラムの場合は、AND条件やOR条件などが、考えられるため、
135         * カラムを一つにまとめて、指定してください。
136         *
137         * @og.rev 6.2.3.0 (2015/05/01) 行読み飛ばし nullSkipClm追加
138         *
139         * @param   clm カラム列
140         */
141        void setNullSkipClm( final String clm ) ;
142
143        /**
144         * 読み取り元ファイルのカラム列を、外部(タグ)より指定します。
145         * ファイルに記述された #NAME より優先して使用されます。
146         *
147         * @og.rev 3.5.4.5 (2004/01/23) 新規作成
148         *
149         * @param   clms 読み取り元ファイルのカラム列(CSV形式)
150         */
151        void setColumns( final String clms ) ;
152
153        /**
154         * 行番号情報を、使用している(true)/していない(false)を指定します。
155         *
156         * 通常のフォーマットでは、各行の先頭に行番号が出力されています。
157         * 読み取り時に、#NAME 属性を使用する場合は、この行番号を無視しています。
158         * #NAME 属性を使用せず、columns 属性でカラム名を指定する場合(他システムの
159         * 出力ファイルを読み取るケース等)では、行番号も存在しないケースがあり、
160         * その様な場合に、useNumber="false" を指定すれば、データの最初から読み取り始めます。
161         * この場合、出力データのカラムの並び順が変更された場合、columns 属性も
162         * 指定しなおす必要がありますので、できるだけ、#NAME 属性を使用するように
163         * してください。
164         * なお、EXCEL 入力には、この設定は適用されません。(暫定対応)
165         * 初期値は、true(使用する) です。
166         *
167         * @og.rev 3.7.0.5 (2005/04/11) 新規追加
168         *
169         * @param       useNumber       行番号情報 [true:使用している/false:していない]
170         */
171        void setUseNumber( final boolean useNumber ) ;
172
173        /**
174         * データの読み飛ばし件数を設定します。
175         *
176         * TAB区切りテキストやEXCEL等のデータの読み始めの初期値を指定します。
177         * ファイルの先頭行が、0行としてカウントしますので、設定値は、読み飛ばす
178         * 件数になります。(1と指定すると、1件読み飛ばし、2行目から読み込みます。)
179         * 読み飛ばしは、コメント行などは、無視しますので、実際の行数分読み飛ばします。
180         * #NAME属性や、columns 属性は、有効です。
181         *
182         * @og.rev 5.1.6.0 (2010/05/01) 新規作成
183         *
184         * @param       count 読み始めの初期値
185         */
186        void setSkipRowCount( final int count ) ;
187
188        /**
189         * ColumnActionListenerオブジェクトを設定します。
190         *
191         * ColumnActionListenerオブジェクトは、カラム名配列設定時と、それに対応する値配列設定時に
192         * 呼ばれるイベントリスナーです。
193         * 具体的なテーブル処理は、このイベントを使用して書き込みを行います。
194         *
195         * @og.rev 6.2.2.0 (2015/03/27) 新規作成
196         *
197         * @param       listener        ColumnActionListenerオブジェクト
198         */
199        void setColumnActionListener( final ColumnActionListener listener ) ;
200
201        /**
202         * デバッグ情報を出力するかどうかを指定します。
203         *
204         * EXCELなどを読み取る場合、シートマージで読み取ると、エラー時の行番号が、連番になるため、
205         * どのシートなのか、判らなくなります。
206         * そこで、どうしてもわからなくなった場合に備えて、デバッグ情報を出力できるようにします。
207         * 通常は使用しませんので、設定を無視します。
208         * 初期値は、false:デバッグ情報を出力しない です。
209         *
210         * @og.rev 5.5.7.2 (2012/10/09) 新規作成
211         *
212         * @param       useDebug        デバッグ情報を出力するかどうかを指定
213         */
214        void setDebug( final boolean useDebug ) ;
215}