Hello, how I can make column generator generate value with onBeforeShow event? Here is what I have done but it doesn’t work when I add new “ElementVariable” to the table:
@Install(to = "elementVariablesTable.value", subject = "columnGenerator")
private Component elementVariablesTableValueColumnGenerator(DataGrid.ColumnGeneratorEvent<ElementVariable> columnGeneratorEvent) {
addBeforeShowListener(this::onBeforeShow);
return generateVariableValueColumn(columnGeneratorEvent.getItem());
}
private Component generateVariableValueColumn(ElementVariable elementVariable) {
switch (elementVariable.getDecriminatorValue()) {
case "DATE":
DateField<LocalDateTime> date = uiComponents.create(DateField.NAME);
EntityManager entityManager = entityManagerFactory.createEntityManager();
TypedQuery<VariableDate> query = entityManager.createQuery(
"select d from VariableDate d where d.id =:id", VariableDate.class)
.setParameter("id", elementVariable.getId());
VariableDate variableDate = query.getSingleResult();
date.setValue(variableDate.getLocalDateTime());
return date;
case "BOOLEAN":
CheckBox checkBox = uiComponents.create(CheckBox.NAME);
EntityManager entityManager2 = entityManagerFactory.createEntityManager();
TypedQuery<VariableBoolean> query2 = entityManager2.createQuery(
"select b from VariableBoolean b where b.id =:id", VariableBoolean.class)
.setParameter("id", elementVariable.getId());
VariableBoolean variableBoolean = query2.getSingleResult();
checkBox.setValue(variableBoolean.getVariableBoolean());
return checkBox;
case "STRING":
Label<String> textField = uiComponents.create(Label.NAME);
EntityManager entityManager3 = entityManagerFactory.createEntityManager();
TypedQuery<VariableString> query3 = entityManager3.createQuery(
"select s from VariableString s where s.id =:id", VariableString.class)
.setParameter("id", elementVariable.getId());
VariableString variableString = query3.getSingleResult();
textField.setValue(variableString.getValue());
return textField;
}
return null;
}