package org.jboss.seam.databinding; import java.util.Map; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.datamodel.DataModel; import org.jboss.seam.faces.DataModels; /** * Exposes a List, array, Map or Set to the UI as a JSF DataModel * * @author Gavin King */ public class DataModelBinder implements DataBinder<DataModel, Object, javax.faces.model.DataModel> { public String getVariableName(DataModel out) { return out.value(); } public ScopeType getVariableScope(DataModel out) { return out.scope(); } public javax.faces.model.DataModel wrap(DataModel out, Object value) { return DataModels.instance().getDataModel(value); } public Object getWrappedData(DataModel out, javax.faces.model.DataModel wrapper) { return wrapper.getWrappedData(); } public Object getSelection(DataModel out, javax.faces.model.DataModel wrapper) { if ( wrapper.getRowCount()==0 || wrapper.getRowIndex()<0 || wrapper.getRowIndex()>=wrapper.getRowCount()) { return null; } else { Object rowData = wrapper.getRowData(); if (rowData instanceof Map.Entry) { return ( (Map.Entry) rowData ).getValue(); } else { return rowData; } } } public boolean isDirty(DataModel out, javax.faces.model.DataModel wrapper, Object value) { return !getWrappedData(out, wrapper).equals(value); } }