I'm trying to iterate over a HashMap to display the content in Vaadin14 Grid to look like this:
that's the java class:
public class MyClass extends VerticalLayout {
// Dummy Data
LocalDate date1 = LocalDate.now();
LocalDate date2 = LocalDate.now();
LocalDate date3 = LocalDate.now();
Boolean[] isPresent1 = {true, false, false, true, true, false, false, true, true};
Boolean[] isPresent2 = {true, false, false, true, true, false, false, true, true};
Boolean[] isPresent3 = {true, false, false, true, true, false, false, true, true};
Map<LocalDate, Boolean[]> trainingsMap = new HashMap<>();
Grid<Map.Entry<LocalDate, Boolean[]>> grid = new Grid<>();
Icon icon;
public MyClass() {
// in reality data come from Spring Data - Repository - Service
trainingsMap.put(date1, isPresent1);
trainingsMap.put(date2, isPresent2);
trainingsMap.put(date3, isPresent3);
for (Map.Entry<LocalDate, Boolean[]> map : trainingsMap.entrySet()) {
grid.addColumn(new ComponentRenderer<Component, Map<LocalDate, Boolean[]>>(createIsPresent(map.getValue())));
// .setHeaderRenderer(new LocalDateTimeRenderer<>(map.getKey(), "dd/MM HH:mm:ss"))); //
}
grid.setItems(trainingsMap.entrySet());
add(grid);
}
private Component createIsPresent(Boolean[] isPresent) {
for (Boolean b : isPresent) {
if (b) {
icon = UIUtils.createPrimaryIcon(VaadinIcon.CHECK);
}
}
return icon;
}
}
Error: Cannot resolve constructor com.vaadin.flow.data.renderer.ComponentRenderer<>
Is this possible at all or am I doing something fundamentally wrong?