package org.jboss.seam.ui.component;
import javax.faces.component.NamingContainer;
import javax.faces.component.UIComponent;
import javax.faces.component.UIComponentBase;
import javax.faces.context.FacesContext;
import org.jboss.seam.ui.util.Decoration;
public abstract class UIDecorate extends UIComponentBase implements NamingContainer
{
private static final String COMPONENT_TYPE = "org.jboss.seam.ui.Decorate";
public boolean hasMessage()
{
String clientId = getInputClientId();
if (clientId==null)
{
return false;
}
else
{
return getFacesContext().getMessages(clientId).hasNext();
}
}
public String getInputId()
{
String id = getFor();
if (id==null)
{
UIComponent evh = Decoration.getEditableValueHolder(this);
return evh==null ? null : evh.getId();
}
else
{
return id;
}
}
private String getInputClientId()
{
String id = getFor();
if (id==null)
{
UIComponent evh = Decoration.getEditableValueHolder(this);
return evh==null ? null : evh.getClientId( getFacesContext() );
}
else
{
// As UIDecorate implements NamingContainer it alters the search
// algorithm used by JSF
UIComponent component = null;
if (getParent() != null)
{
component = getParent().findComponent(id);
}
return component==null ? null : component.getClientId( getFacesContext() );
}
}
public abstract String getFor();
public abstract void setFor(String forId);
public abstract String getStyleClass();
public abstract void setStyleClass(String styleClass);
public abstract String getStyle();
public abstract void setStyle(String style);
public abstract boolean isEnclose();
public abstract void setEnclose(boolean enclose);
public abstract String getElement();
public abstract void setElement(String element);
public UIComponent getDecoration(String name)
{
return Decoration.getDecoration(name, this);
}
public static UIDecorate newInstance()
{
return (UIDecorate) FacesContext.getCurrentInstance().getApplication().createComponent(COMPONENT_TYPE);
}
}