/* WidgetAttribute.java

	Purpose:
		
	Description:
		
	History:
		Thu Jun 10 11:36:07 TST 2010, Created by tomyeh

Copyright (C) 2010 Potix Corporation. All Rights Reserved.

*/
package org.zkoss.zk.ui.metainfo;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.ConditionImpl;
import org.zkoss.zk.xel.EvaluatorRef;
import org.zkoss.zk.xel.ExValue;

/**
 * Represents a DOM attribute of the peer widget.
 *
 * @author tomyeh
 * @since 5.0.3
 * @see WidgetListener
 */
public class WidgetAttribute extends ConditionValue {
	private static final long serialVersionUID = 20081213L;

	protected final String _name;
	protected final ExValue _value;

	/**
	 * @param name the event name, such as onClick
	 * @param value the value. EL is allowed and it will be coerced to String
	 * @exception IllegalArgumentException if value is null
	 */
	public WidgetAttribute(EvaluatorRef evalr, String name, String value, ConditionImpl cond) {
		super(evalr, cond);

		if (name == null || value == null)
			throw new IllegalArgumentException();
		_name = name;
		_value = value != null ? new ExValue(value, String.class) : null;
	}

	/** Returns the event name, such as, onClick.
	 */
	public String getName() {
		return _name;
	}

	/** Returns the value associated with this event handler.
	 */
	public String getValue(Component comp) {
		return _value != null ? (String) _value.getValue(_evalr, comp) : null;
	}

	/** Returns the value passed to the constructor.
	 * In other words, it might contains EL. 
	 */
	public String getRawValue() {
		return _value != null ? _value.getRawValue() : null;
	}

	public void assign(Component comp) {
		if (isEffective(comp))
			comp.setClientAttribute(_name, getValue(comp));
	}
}
