Option Selection
To select options in a fast convenient way (without clicking on a row, changing the option in panel and saving it) we need a new concept.
<h:form id="fTable">
<p:dataTable styleClass="jeesl-datatable"
var="e" value="#{tableSelectionOptionBean.engines}" draggableRows="false">
<f:facet name="header">
<j:dtHeader entity="IoFileStorageEngine" code="listOf"/>
</f:facet>
<p:column>
<f:facet name="header"><jtp:label entity="IoFileStorageEngine" code="name"/></f:facet>
<jtp:symbolizer value="#{e}" marginRight="5"/>
<h:outputText value="#{e.name[localeCode].lang}"/>
</p:column>
<p:column>
<f:facet name="header"><jtp:label entity="IoFileReplicationType"/></f:facet>
<jtp:symbolizer value="#{tableSelectionOptionBean.map[e]}"/>
</p:column>
<p:column>
<f:facet name="header">Selection</f:facet>
<ui:repeat var="t" value="#{tableSelectionOptionBean.types}">
<jp:icon value="#{t}" listener="#{tableSelectionOptionBean.saveType(e,t)}" update="@form"
marginRight="5" height="16"
styleClass="#{tableSelectionOptionBean.map[e].id eq t.id ? '' : 'jeesl-greyscale'}"/>
</ui:repeat>
</p:column>
</p:dataTable>
</h:form>
@Named @ViewScoped
public class TableSelectionOptionBean extends AbstractJeeBean implements Serializable
{
final static Logger logger = LoggerFactory.getLogger(TableSelectionOptionBean.class);
private static final long serialVersionUID = 1L;
private final Random rnd;
private final Map<IoFileStorageEngine,IoFileReplicationType> map; public Map<IoFileStorageEngine, IoFileReplicationType> getMap() {return map;}
private final List<IoFileStorageEngine> engines; public List<IoFileStorageEngine> getEngines() {return engines;}
private final List<IoFileReplicationType> types; public List<IoFileReplicationType> getTypes() {return types;}
public TableSelectionOptionBean()
{
rnd = new Random();
map = new HashMap<>();
engines = new ArrayList<>();
types = new ArrayList<>();
}
@PostConstruct public void init()
{
super.initSecurity();
engines.addAll(fUtils.all(IoFileStorageEngine.class));
types.addAll(fUtils.all(IoFileReplicationType.class));
for(IoFileStorageEngine e : engines)
{
map.put(e, types.get(rnd.nextInt(types.size())));
}
}
public void saveType(IoFileStorageEngine e, IoFileReplicationType t)
{
map.put(e,t);
}
}