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.plugin.io;
017
018import java.io.File;                                                                            // 6.2.0.0 (2015/02/27)
019
020import org.opengion.fukurou.model.POIUtil;                                      // 6.1.0.0 (2014/12/26) イベント方式
021import org.opengion.fukurou.model.TextConverter;                        // 6.3.1.0 (2015/06/28)
022
023import org.opengion.hayabusa.io.AbstractTableReader;            // 6.2.0.0 (2015/02/27)
024
025/**
026 * POI による、Word,PoworPoint,Excel,Textのファイルを読み取る実装クラスです。
027 *
028 * ファイル名、シート名を指定して、データを読み取ることが可能です。
029 * 入力形式は、openXML形式にも対応しています。
030 *
031 * POIUtil#extractor(File)を使用して、行分割しますので、第一カラムが # で始まる行も
032 * 読み取り対象にします。
033 * カラム名は、TEXT 一つだけになります。
034 * 通常のTableReader の各種機能は、使用できませんので、ご注意ください。
035 *
036 * ※ 6.3.1.0 (2015/06/28) カラムに、CMNT属性も追加。これは、位置情報になる為、
037 *    対訳や、差分チェック時に使用する予定です。
038 *
039 * @og.rev 6.2.3.0 (2015/05/01) 新規作成
040 * @og.group ファイル入力
041 *
042 * @version  6.2
043 * @author   Kazuhiko Hasegawa
044 * @since    JDK8.0,
045 */
046public class TableReader_POI extends AbstractTableReader {
047        /** このプログラムのVERSION文字列を設定します。   {@value} */
048        private static final String VERSION = "6.4.2.0 (2016/01/29)" ;
049
050        /**
051         * デフォルトコンストラクター
052         *
053         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
054         */
055        public TableReader_POI() { super(); }           // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
056
057        /**
058         * DBTableModel から 各形式のデータを作成して,BufferedReader より読み取ります。
059         * コメント/空行を除き、最初の行は、必ず項目名が必要です。
060         * それ以降は、コメント/空行を除き、データとして読み込んでいきます。
061         * このメソッドは、EXCEL 読み込み時に使用します。
062         *
063         * @og.rev 6.2.3.0 (2015/05/01) 新規作成
064         * @og.rev 6.2.4.2 (2015/05/29) POIUtil#extractor → textReader に変更
065         * @og.rev 6.3.1.0 (2015/06/28) TextConverterに、引数(cmnt)を追加
066         * @og.rev 6.3.9.1 (2015/11/27) 修飾子を、なし → private に変更。
067         *
068         * @param   file 読み取り元ファイル
069         * @param   enc ファイルのエンコード文字列
070         */
071        @Override
072        public void readDBTable( final File file , final String enc ) {
073        //      final boolean isNullSkip = "TEXT".equalsIgnoreCase( nullSkipClm );              // 6.2.4.2 (2015/05/29)
074        //      final int     skipCnt = getSkipRowCount() ;
075                final TextConverter<String,String> conv = new TextConverter<String,String>() {
076                        private int cnt ;               // 6.3.9.1 (2015/11/27) 修飾子を、なし → private に変更。
077
078                        /**
079                         * 入力文字列を、変換します。
080                         *
081                         * @param       val  入力文字列
082                         * @param       cmnt コメント
083                         * @return      変換文字列(変換されない場合は、null)
084                         */
085                        @Override
086                        public String change( final String val,final String cmnt ) {
087                                if( val != null && !val.isEmpty() ) {
088                                        final String[] vals = new String[] { val , cmnt } ;
089                                        setTableColumnValues( vals,cnt++ );
090                                }
091                                return null;            // いづれにしても変換しない。
092                        }
093                };
094
095                setTableDBColumn( new String[] { "TEXT","CMNT" } ) ;    // 6.3.1.0 (2015/06/28)
096                POIUtil.textReader( file , conv );
097        }
098}