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