DBNumBase.java

package com.github.mygreen.cellformatter.callback;

import java.util.HashSet;
import java.util.Locale;
import java.util.Set;

import com.github.mygreen.cellformatter.lang.ArgUtils;
import com.github.mygreen.cellformatter.term.DateTerm;
import com.github.mygreen.cellformatter.term.Term;

/**
 * 数値変換の基底クラス。
 *
 * @since 2.0
 * @author T.TSUCHIE
 *
 */
public abstract class DBNumBase implements Callback<Object> {

    /**
     * 許可する言語。
     */
    private Set<String> allowedLanguages = new HashSet<>();

    /**
     * コンストラクタ
     * @param allowedLanguages 許可する言語の指定。
     * @throws IllegalArgumentException {@literal allowedLanguages is null or empty.}
     */
    protected DBNumBase(final String... allowedLanguages) {

        ArgUtils.notEmpty(allowedLanguages, "allowedLanguages");

        for(String lang : allowedLanguages) {
            this.allowedLanguages.add(lang.toLowerCase());
        }

    }

    /**
     * {@inheritDoc}
     * <p>コンストラクタで指定したロケール(言語)で許可するかどうか判定する。
     */
    @Override
    public boolean isApplicable(final Locale locale) {
        if(locale == null) {
            return false;
        }

        final String language = locale.getLanguage().toLowerCase();
        return allowedLanguages.contains(language);
    }

    /**
     * 項が日付の4桁の年かどうか
     * @param term
     * @return
     */
    protected boolean is4YearTerm(Term<?> term) {

        if(!(term instanceof DateTerm.YearTerm)) {
            return false;
        }

        DateTerm.YearTerm yearTerm = (DateTerm.YearTerm)term;
        if(yearTerm.getFormat().length() == 4) {
            return true;
        }

        return false;

    }


}