package org.seasar.mayaa.impl.engine.processor;

import org.seasar.mayaa.engine.processor.ProcessorProperty;
import org.seasar.mayaa.impl.util.ObjectUtil;

/**
 * プロセッサ用ユーティリティクラス
 * @author Koji Suga (Gluegent Inc.)
 */
public class ProcessorUtil {

    /**
     * プロパティがリテラルのとき、booleanと見なせるかを判定する。
     * @param property 判定するプロパティ。
     * @throws IllegalArgumentException プロパティがbooleanと見なせない場合発生する。
     * @see ObjectUtil#canBooleanConvert(Object)
     */
    public static void checkBoolableProperty(ProcessorProperty property) {
        if (property == null || property.getValue() == null) {
            throw new IllegalArgumentException("needs expression.");
        }
        if (property.getValue().isLiteral()) {
            if (ObjectUtil.canBooleanConvert(property.getValue().getScriptText()) == false) {
                throw new IllegalArgumentException("needs expression.");
            }
        }
    }

    /**
     * プロパティを{@code boolean}にして返す。{@code null}や{@code boolean}と
     * 見なせない場合は{@code false}を返す。
     * @param property 判定するプロパティ。
     * @return プロパティを{@code boolean}として解釈した値。
     * @see ObjectUtil#booleanValue(Object, boolean)
     */
    public static boolean toBoolean(ProcessorProperty property) {
        return property != null && ObjectUtil.booleanValue(
                property.getValue().execute(null), false);
    }

}
