XlsVerticalRecordsForIterateTables.java

package com.gh.mygreen.xlsmapper.annotation;

import java.lang.annotation.Annotation;

import com.gh.mygreen.xlsmapper.fieldprocessor.ProcessCase;
import com.gh.mygreen.xlsmapper.fieldprocessor.impl.IterateTablesProcessor;
import com.gh.mygreen.xlsmapper.fieldprocessor.impl.VerticalRecordsProcessor;

/**
 * {@link IterateTablesProcessor}から、{@link VerticalRecordsProcessor}へ{@link XlsVerticalRecords}の情報を渡す際のインタフェース用クラス。
 * <p>アノテーションとしては直接には使用しない。</p>
 * <p>{@link XlsIterateTables}により決定した表の開始位置を渡すために用いる。</p>
 * <p>表の開始位置の指定は、{@link XlsIterateTables}で指定済みなので、{@link #headerColumn()}、{@link #headerRow()}以外での開始位置の指定は無効にする。</p>
 *
 * @since 2.0
 * @author T.TSUCHIE
 *
 */
public class XlsVerticalRecordsForIterateTables implements XlsVerticalRecords {

    private final Class<? extends Annotation> _annotationType;

    private int _headerColumn = -1;
    private int _headerRow = -1;
    private String _headerAddress = "";

    private String _tableLabel = "";
    private boolean _tableLabelAvobe;

    private boolean _optional = false;
    private int _range = -1;
    private Class<?> _recordClass = null;

    private RecordTerminal _terminal = null;
    private String _terminateLabel = null;

    private int _bottom = 1;
    private int _right = 1;

    private int _headerLimit = 0;
    private int _headerRight = 1;

    private ProcessCase[] _cases = {};

    /**
     * アノテーションを元に、インスタンスを作成する。
     * @param anno 元のアノテーション情報
     * @param headerColumn 表の見出しの位置 - 列番号
     * @param headerRow 表の見出しの位置 - 行番号
     */
    public XlsVerticalRecordsForIterateTables(final XlsVerticalRecords anno, int headerColumn, int headerRow) {
        this._annotationType = anno.annotationType();

        this._headerColumn = headerColumn;
        this._headerRow = headerRow;

        // headerColumn、headerRowを指定しているため、headerAddressは空で固定する。
        this._headerAddress = "";

        // 表の開始位置は、headerColumn, headerRowで指定するため、タイトルによる位置指定は無効にする。
        this._tableLabel = "";
        this._tableLabelAvobe = true;
        this._bottom = 1;

        this._optional = anno.optional();
        this._range = anno.range();
        this._recordClass = anno.recordClass();

        this._terminal = anno.terminal();
        this._terminateLabel = anno.terminateLabel();

        this._right = anno.right();

        this._headerLimit = anno.headerLimit();
        this._headerRight = anno.headerRight();

        this._cases = anno.cases();

    }

    @Override
    public Class<? extends Annotation> annotationType() {
        return _annotationType;
    }

    @Override
    public boolean optional() {
        return _optional;
    }

    @Override
    public String tableLabel() {
        return _tableLabel;
    }

    @Override
    public boolean tableLabelAbove() {
        return _tableLabelAvobe;
    }

    @Override
    public String terminateLabel() {
        return _terminateLabel;
    }

    @Override
    public int headerColumn() {
        return _headerColumn;
    }

    @Override
    public int headerRow() {
        return _headerRow;
    }

    @Override
    public String headerAddress() {
        return _headerAddress;
    }

    @Override
    public Class<?> recordClass() {
        return _recordClass;
    }

    @Override
    public RecordTerminal terminal() {
        return _terminal;
    }

    @Override
    public int range() {
        return _range;
    }

    @Override
    public int right() {
        return _right;
    }

    @Override
    public int bottom() {
        return _bottom;
    }

    @Override
    public int headerLimit() {
        return _headerLimit;
    }

    @Override
    public int headerRight() {
        return _headerRight;
    }

    @Override
    public ProcessCase[] cases() {
        return _cases;
    }

}