package org.itscool.weber.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

import org.itscool.commons.bean.BeanUtil;
import org.itscool.commons.util.JspTagUtil;

/**
 * 要求された変数が指定された値と等しい場合、このタグの内容を評価します
 * @author KANO
 * @since jdk1.4.1
 * @version 1.00A 2005/10/26
*/
public class EqualTag extends BodyTagSupport {
	/** name属性 */
    protected String name;
    /** property属性 */
    protected String property;
    /** subproperty属性 */
    protected String subproperty;
    /** value属性 */
    protected String value;
    /** scope属性 */
    protected String scope;
    
    public int doStartTag() throws JspException {
        try {
            Object result = JspTagUtil.findProperty(pageContext, name, property, scope);
            if( ( result != null && result.toString().length() > 0 )
              && ( subproperty != null && subproperty.length() > 0) ){
                //subproperty属性（propertyに該当するオブジェクトのプロパティ
                //を取得する場合）
                result = BeanUtil.getProperty(result, subproperty);
            }
            
            if(result == null || value == null){
            	return SKIP_BODY;
            }
            
            try{
            	//EL式対応バージョン
            	value = JspTagUtil.findValue(pageContext, value, scope).toString();
            	
            	double num1 = Double.parseDouble(result.toString());
            	double num2 = Double.parseDouble(value.toString());
            	
            	return doParamCheck(num1, num2);
            	
            }catch(NumberFormatException nfe){
            	return SKIP_BODY;
            }
        } catch (Exception e) {
            String err =
                "["
                    + property
                    + "]"
                    + "doStartTag() failed ("
                    + EqualTag.class.getName()
                    + ") ("
                    + e.getMessage()
                    + ")";
            throw new JspException(err);
        }
    }
    
    public int doParamCheck(double num1, double num2){
    	if( num1 == num2 ){
    		return EVAL_BODY_INCLUDE;
    	}else{
    		return SKIP_BODY;
    	}
    }
    
    
    public int doEndTag() {
        return EVAL_PAGE;
    }

    /**
     * 名前を取得します
     * @return name 名前
     */
    public String getName() {
        return name;
    }
    /**
     * 名前をセットします
     * @param name 名前
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * プロパティを取得します
     * @return property プロパティ
     */
    public String getProperty() {
        return property;
    }
    /**
     * プロパティをセットします
     * @param property プロパティ
     */
    public void setProperty(String property) {
        this.property = property;
    }
    /**
     * スコープを取得します
     * @return scope スコープ
     */
    public String getScope() {
        return scope;
    }
    /**
     * スコープをセットします
     * @param scope スコープ
     */
    public void setScope(String scope) {
        this.scope = scope;
    }
    /**
     * サブプロパティを取得します
     * @return サブプロパティ
     */
    public String getSubproperty() {
        return subproperty;
    }

    /**
     * サブプロパティをセットします
     * @param string サブプロパティ
     */
    public void setSubproperty(String string) {
        subproperty = string;
    }

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
    
}
