-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathConferenceView.java
More file actions
87 lines (71 loc) · 3.23 KB
/
ConferenceView.java
File metadata and controls
87 lines (71 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package io.bcn.springConference.view;
import com.vaadin.flow.component.avatar.Avatar;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.combobox.ComboBox;
import com.vaadin.flow.component.datepicker.DatePicker;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.data.binder.Binder;
import com.vaadin.flow.router.Route;
import io.bcn.springConference.model.Book;
import io.bcn.springConference.model.Conference;
import io.bcn.springConference.model.Speaker;
import io.bcn.springConference.repository.BookRepository;
import io.bcn.springConference.repository.ConferenceRepository;
import io.bcn.springConference.repository.SpeakerRepository;
import org.springframework.beans.factory.annotation.Autowired;
@Route(value = "conferences", layout = MainLayout.class)
public class ConferenceView extends VerticalLayout {
private final ConferenceRepository conferenceRepository;
private final BookRepository bookRepository;
private final SpeakerRepository speakerRepository;
private Grid<Conference> grid = new Grid<>(Conference.class);
private Binder<Conference> binder = new Binder<>(Conference.class);
private ComboBox<Book> bookComboBox;
private ComboBox<Speaker> speakerComboBox;
private DatePicker datePicker;
private Button saveButton;
@Autowired
public ConferenceView(ConferenceRepository conferenceRepository, BookRepository bookRepository, SpeakerRepository speakerRepository) {
this.conferenceRepository = conferenceRepository;
this.bookRepository = bookRepository;
this.speakerRepository = speakerRepository;
setupForm();
setupGrid();
add(grid, bookComboBox, speakerComboBox, datePicker, saveButton);
updateGrid();
}
private void setupForm() {
bookComboBox = new ComboBox<>("Select Book");
bookComboBox.setItems(bookRepository.findAll());
bookComboBox.setItemLabelGenerator(Book::getTitle);
speakerComboBox = new ComboBox<>("Select Speaker");
speakerComboBox.setItems(speakerRepository.findAll());
speakerComboBox.setItemLabelGenerator(Speaker::getName);
datePicker = new DatePicker("Date");
saveButton = new Button("Save", e -> saveConference());
binder.bind(bookComboBox, Conference::getBook, Conference::setBook);
binder.bind(speakerComboBox, Conference::getSpeaker, Conference::setSpeaker);
binder.bind(datePicker, Conference::getDate, Conference::setDate);
}
private void setupGrid() {
grid.setColumns("name", "date");
grid.addComponentColumn(conference -> {
Speaker speaker = conference.getSpeaker();
Avatar avatar = new Avatar(speaker.getName());
avatar.setWidth("50px");
avatar.setHeight("50px");
return avatar;
}).setHeader("Speaker Avatar");
}
private void saveConference() {
Conference conference = new Conference();
binder.writeBeanIfValid(conference);
conferenceRepository.save(conference);
updateGrid();
binder.readBean(null);
}
private void updateGrid() {
grid.setItems(conferenceRepository.findAll());
}
}