/**
*
*/
package org.jboss.seam.ui.util.cdk;
import javax.el.ExpressionFactory;
import javax.el.MethodExpression;
import javax.el.ValueExpression;
import javax.faces.component.UICommand;
import javax.faces.component.UIComponent;
import javax.faces.component.UIGraphic;
import javax.faces.component.UIParameter;
import javax.faces.component.UISelectBoolean;
import javax.faces.component.ValueHolder;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
/**
* @author Maksim Kaszynski
*
*/
public abstract class UIComponentTagBase extends UIComponentELTagBase {
protected ExpressionFactory getExpressionFactory() {
return getFacesContext().getApplication().getExpressionFactory();
}
protected void setProperty(UIComponent component, String propName, ValueExpression valueExpression) {
if (valueExpression != null) {
if (valueExpression.isLiteralText()) {
component.getAttributes().put(propName,valueExpression.getValue(getELContext()));
} else {
component.setValueExpression(propName, valueExpression);
}
}
}
protected void setProperty(UIComponent component, Class<?> type,
String propName, String value) {
if (value != null) {
ValueExpression valueExpression = getExpressionFactory()
.createValueExpression(getELContext(), value, type);
setProperty(component, propName, valueExpression);
}
}
protected void setIntegerProperty(UIComponent component, String propName,
ValueExpression value) {
setProperty(component, propName, value);
}
protected void setLongProperty(UIComponent component, String propName,
ValueExpression value) {
setProperty(component, propName, value);
}
protected void setFloatProperty(UIComponent component, String propName,
ValueExpression value) {
setProperty(component, propName, value);
}
protected void setDoubleProperty(UIComponent component, String propName,
ValueExpression value) {
setProperty(component, propName, value);
}
protected void setStringProperty(UIComponent component, String propName,
ValueExpression value) {
setProperty(component, propName, value);
}
protected void setBooleanProperty(UIComponent component, String propName,
ValueExpression value) {
setProperty(component, propName, value);
}
protected void setIntegerProperty(UIComponent component, String propName,
String value) {
setProperty(component, Integer.class, propName, value);
}
protected void setLongProperty(UIComponent component, String propName,
String value) {
setProperty(component, Long.class, propName, value);
}
protected void setFloatProperty(UIComponent component, String propName,
String value) {
setProperty(component, Float.class, propName, value);
}
protected void setDoubleProperty(UIComponent component, String propName,
String value) {
setProperty(component, Double.class, propName, value);
}
protected void setStringProperty(UIComponent component, String propName,
String value) {
setProperty(component, String.class, propName, value);
}
protected void setBooleanProperty(UIComponent component, String propName,
String value) {
setProperty(component, Boolean.class, propName, value);
}
protected void setValueProperty(UIComponent component, String value) {
if (value != null) {
ValueExpression expression = getExpressionFactory()
.createValueExpression(getELContext(), value, Object.class);
setValueProperty(component, expression);
}
}
protected void setValueProperty(UIComponent component, ValueExpression expression) {
if (expression != null) {
String value = expression.getExpressionString();
if (!expression.isLiteralText()) {
component.setValueExpression("value", expression);
} else if (component instanceof UICommand) {
((UICommand) component).setValue(value);
} else if (component instanceof UIParameter) {
((UIParameter) component).setValue(value);
} else if (component instanceof UISelectBoolean) {
((UISelectBoolean) component).setValue(Boolean.valueOf(value));
} else if (component instanceof UIGraphic) {
((UIGraphic) component).setValue(value);
}
// Since many input components are ValueHolders the special
// components
// must come first, ValueHolder is the last resort.
else if (component instanceof ValueHolder) {
((ValueHolder) component).setValue(value);
} else {
component.getAttributes().put("value", value);
}
}
}
public boolean isValueReference(String s) {
return !getExpressionFactory().createValueExpression(s, Object.class).isLiteralText();
}
protected void setActionProperty(UIComponent component, String action) {
if (action != null) {
MethodExpression expression =
getExpressionFactory().createMethodExpression(getELContext(), action, String.class, new Class[] {});
setActionProperty(component, expression);
}
}
protected void setActionListenerProperty(UIComponent component, String actionListener){
if (actionListener != null) {
MethodExpression expression =
getExpressionFactory().createMethodExpression(getELContext(), actionListener, String.class, new Class[] {ActionEvent.class});
setActionListenerProperty(component, expression);
}
}
protected void setValueChangedListenerProperty(UIComponent component, String valueChangedListener) {
if (valueChangedListener != null) {
MethodExpression expression =
getExpressionFactory().createMethodExpression(getELContext(), valueChangedListener, String.class, new Class[] {ValueChangeEvent.class});
setValueChangeListenerProperty(component, expression);
}
}
}