/*
 * Copyright (c) 2007 NTT DATA Corporation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jp.terasoluna.fw.file.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


/**
 * 出力設定用のアノテーション。
 */
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.FIELD)
public @interface OutputFileColumn {
    /**
     * カラムIndex。<br>
     * <br>
     * カラムのIndex（順番）を示す。<b>入力必須項目</b>。<br>
     * カラムIndexは同じクラスの中で重複しないように実装すること。
     * 
     */
    int columnIndex();

    /**
     * カラムのフォーマット。<br>
     * <br>
     * DATE型、BigDecimal型の入力値のフォーマットを示す。<br>
     * (例)"yyyy/MM/dd","###,###,###"<br>
     * 
     */
    String columnFormat() default "";

    /**
     * カラムのバイト数。
     * <p>
     * 固定長入出力の各カラムのバイト数を示す。また、その他のファイルでパディング処理を行う場合に入力を行う。
     * </p>
     * <b>固定長ファイルの場合、入力必須項目。</b><br>
     * <b>パディング処理を行う場合、入力必須項目。</b><br>
     * 
     */
    int bytes() default -1;

    /**
     * パディング種別。<br>
     * <br>
     * パディングの種別(右詰/左詰/パディングなし[LEFT/RIGHT/NONE])を示す。
     * 
     */
    PaddingType paddingType() default PaddingType.NONE;

    /**
     * パディング文字。<br>
     * <br>
     * パディングする文字を示す。<b>(半角文字1文字のみ設定可能。)</b><br>
     * パディング文字は、ジョブBean定義ファイルに設定された文字列の1文字目の半角文字のみ有効となる。<br>
     * 全角文字が入力された場合はエラーとなり処理を終了する。<br>
     * 2文字以上入力しても1文字目のみ処理に利用される。<br>
     * 区切り文字、囲み文字、行区切り文字と同じ文字を利用することはできない。
     * 
     */
    char paddingChar() default ' ';

    /**
     * 文字変換種別。<br>
     * <br>
     * String型の項目について、大文字変換・小文字変換・無変換を示す。<br>
     * 大文字変換:StringConverterToUpperCase.class<br>
     * 小文字変換:StringConverterToLowerCase.class<br>
     * 無変換:NullStringConverter.class<br>
     * 
     */
    Class<? extends StringConverter> stringConverter()
            default NullStringConverter.class;

    /**
     * トリム種別。<br>
     * <br>
     * トリムの種別(右詰/左詰/トリムなし[LEFT/RIGHT/NONE])を示す。
     * 
     */
    TrimType trimType() default TrimType.NONE;

    /**
     * トリム文字。<br>
     * <br>
     * トリムする文字を示す。<b>(半角文字のみ設定可能)</b><br>
     * トリム文字は、ジョブBean定義ファイルに設定された文字列の1文字目の半角文字のみ有効となる。<br>
     * 全角文字が入力された場合はエラーとなり処理を終了する。<br>
     * 2文字以上入力しても1文字目のみ処理に利用される。<br>
     * 区切り文字、囲み文字、行区切り文字と同じ文字を利用することはできない。
     * 
     */
    char trimChar() default ' ';
}
