package com.gh.mygreen.xlsmapper.expression;
import java.util.ArrayList;
import java.util.Formatter;
import java.util.List;
import org.hibernate.validator.internal.engine.messageinterpolation.el.RootResolver;
import com.github.mygreen.expression.el.FormatterWrapper;
import com.github.mygreen.expression.el.tld.Taglib;
import com.github.mygreen.expression.el.tld.TldLoader;
/**
* EL式を利用する際のベースとなる抽象クラス。
*
* @since 1.6
* @author T.TSUCHIE
*
*/
public abstract class AbstractExpressionLanguageEL implements ExpressionLanguage {
/** TLDファイルの定義内容 */
protected List<Taglib> taglibList = new ArrayList<>();
/**
* カスタムタグの定義ファイル「TLD(Tag Library Defenitioin)」を登録する。
* <p>{@link TldLoader}クラスで読み込む。
*
* @since 1.5
* @param taglib カスタムタグの定義内容。
*/
public void register(final Taglib taglib) {
this.taglibList.add(taglib);
}
/**
* 登録されているEL式中の変数(Bean)が、{@link Formatter}かどうか判定する。
* <p>{@link Formatter}中のメソッド{@code format(...)}メソッドは、オーバロードで複数のメソッドが定義されいるが、
* EL式はメソッドのオーバーロードはサポートされていない。
* <br>そのため、{@link FormatterWrapper}でラップして、オーバーロードなしのメソッドする。
* </p>
* @param key 判定対象のキー値
* @param value 判定対象の値のインスタンス
* @return キー名が{@link RootResolver#FORMATTER}(formatter)と一致し、かつ、valueのインスタンスが{@link Formatter}の場合、trueを返します。
*/
protected boolean isFormatter(final String key, final Object value) {
if(!RootResolver.FORMATTER.equals(key)) {
return false;
}
if(value instanceof Formatter) {
return true;
}
return false;
}
}