package frostillicus.xsp.converter; import javax.faces.component.StateHolder; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; /** * @since 1.0 */ public class IterableConverter implements Converter, StateHolder { private boolean transient_; private String delimiter_; @Override public Object getAsObject(final FacesContext facesContext, final UIComponent component, final String value) { return value; } @Override public String getAsString(final FacesContext facesContext, final UIComponent component, final Object value) { if (value instanceof Iterable) { StringBuilder result = new StringBuilder(); boolean appended = false; for (Object node : (Iterable<?>) value) { if (appended) result.append(delimiter_); else appended = true; result.append(String.valueOf(node)); } return result.toString(); } return String.valueOf(value); } public void setDelimiter(String delimiter) { delimiter_ = delimiter; } public String getDelimiter() { return delimiter_; } @Override public void setTransient(boolean newTransient) { transient_ = newTransient; } @Override public boolean isTransient() { return transient_; } @Override public void restoreState(FacesContext facesContext, Object state) { Object[] stateArray = (Object[])state; delimiter_ = (String)stateArray[0]; } @Override public Object saveState(FacesContext facesContext) { return new Object[] { delimiter_ }; } }