diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainUi.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainUi.java index 500d72b..6d1b657 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainUi.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainUi.java @@ -1,15 +1,10 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui; -import java.time.LocalDateTime; -import java.time.Month; -import java.util.Collection; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.springframework.beans.factory.annotation.Autowired; -import org.vaadin.addon.calendar.Calendar; -import org.vaadin.addon.calendar.item.BasicItemProvider; import org.vaadin.addon.calendar.ui.CalendarComponentEvents; import com.vaadin.annotations.Theme; @@ -24,7 +19,7 @@ import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.EventBusiness; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.GroupDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; -import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.EventGrid; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.CalendarComponent; import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.PersonGrid; @Theme("vaadin-clubhelpertheme") @@ -39,70 +34,64 @@ public class MainUi extends UI { @Autowired GroupDao groupDao; - private ClubEventProvider dataProvider; private PersonGrid personGrid; - private EventGrid eventGrid; + + private CalendarComponent calendar; + + private HorizontalLayout contentLayout; @Override protected void init(VaadinRequest request) { - HorizontalLayout layout = new HorizontalLayout(); - List persons = personDao.list(); personGrid = new PersonGrid(groupDao); personGrid.setItems(persons); personGrid.setCaption("Personen"); personGrid.setVisible(false); + personGrid.onClosedFunction(() -> detailClosed()); - eventGrid = new EventGrid(); - eventGrid.setCaption("Termine"); - eventGrid.addItemClickListener(ev -> showDetails(ev.getItem())); - - dataProvider = new ClubEventProvider(); - Calendar calendar = new Calendar<>(dataProvider) - .withMonth(Month.from(LocalDateTime.now())); - calendar.setCaption("Events"); + this.calendar = new CalendarComponent(); calendar.setHandler(this::onItemClick); - layout.addComponents(calendar, personGrid, eventGrid); - setContent(layout); + contentLayout = new HorizontalLayout(); + contentLayout.setSizeFull(); + contentLayout.addComponents(calendar, personGrid); + contentLayout.setExpandRatio(calendar, 1.0f); + + setContent(contentLayout); + setSizeFull(); + ExecutorService exec = Executors.newSingleThreadExecutor(); exec.execute(() -> { EventBusiness business = new EventBusiness(); List events = business.loadEvents(request); - dataProvider.setItems(events); - eventGrid.setItems(events); - eventGrid.getDataProvider().refreshAll(); + calendar.setItems(events); System.out.println("Updated data: " + events); }); exec.shutdown(); } + private void detailClosed() { + personGrid.setVisible(false); + calendar.setSizeFull(); + contentLayout.setExpandRatio(calendar, 1.0f); + } + private void onItemClick(CalendarComponentEvents.ItemClickEvent event) { ClubEvent ev = (ClubEvent) event.getCalendarItem(); showDetails(ev); } private void showDetails(ClubEvent ev) { - eventGrid.setVisible(false); personGrid.setVisible(true); personGrid.setCaption(ev.getCaption()); personGrid.setTitle(ev.getCaption()); - Notification.show("" + ev); - } - - class ClubEventProvider extends BasicItemProvider { - - private static final long serialVersionUID = -5415397258827236704L; - - @Override - public void setItems(Collection items) { - super.setItems(items); - fireItemSetChanged(); - } + contentLayout.setExpandRatio(calendar, .5f); + calendar.setWidth("50%"); + Notification.show("" + ev); } } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarComponent.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarComponent.java new file mode 100644 index 0000000..e0c2329 --- /dev/null +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarComponent.java @@ -0,0 +1,100 @@ +package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components; + +import java.time.LocalDateTime; +import java.time.Month; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Collection; + +import org.vaadin.addon.calendar.Calendar; +import org.vaadin.addon.calendar.item.BasicItemProvider; +import org.vaadin.addon.calendar.ui.CalendarComponentEvents.BackwardEvent; +import org.vaadin.addon.calendar.ui.CalendarComponentEvents.BackwardHandler; +import org.vaadin.addon.calendar.ui.CalendarComponentEvents.DateClickHandler; +import org.vaadin.addon.calendar.ui.CalendarComponentEvents.ForwardEvent; +import org.vaadin.addon.calendar.ui.CalendarComponentEvents.ForwardHandler; +import org.vaadin.addon.calendar.ui.CalendarComponentEvents.ItemClickHandler; + +import com.vaadin.shared.Registration; +import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.Label; +import com.vaadin.ui.VerticalLayout; + +import de.kreth.clubhelperbackend.google.calendar.ClubEvent; + +public class CalendarComponent extends CustomComponent { + + private static final long serialVersionUID = -9152173211931554059L; + + private DateTimeFormatter dfMonth = DateTimeFormatter.ofPattern("MMMM uu"); + + private Label monthName; + + private ClubEventProvider dataProvider; + private Calendar calendar; + + public CalendarComponent() { + + monthName = new Label(); + monthName.setStyleName("title_label"); + + dataProvider = new ClubEventProvider(); + calendar = new Calendar<>(dataProvider) + .withMonth(Month.from(LocalDateTime.now())); + calendar.setCaption("Events"); + calendar.setSizeFull(); + // calendar.setHandler(this::onNextMonth); + // calendar.setHandler(this::onPrevMonth); + + updateMonthText(calendar.getStartDate()); + + VerticalLayout layout = new VerticalLayout(monthName, calendar); + layout.setSizeFull(); + setCompositionRoot(layout); + } + + private void onNextMonth(ForwardEvent h) { + updateMonthText(h.getComponent().getStartDate()); + } + + private void onPrevMonth(BackwardEvent h) { + updateMonthText(h.getComponent().getStartDate()); + } + + private void updateMonthText(ZonedDateTime startDate) { + monthName.setValue(dfMonth.format(startDate)); + } + + public Registration setHandler(ForwardHandler listener) { + return calendar.setHandler(listener); + } + + public Registration setHandler(BackwardHandler listener) { + return calendar.setHandler(listener); + } + + public Registration setHandler(DateClickHandler listener) { + return calendar.setHandler(listener); + } + + public Registration setHandler(ItemClickHandler listener) { + return calendar.setHandler(listener); + } + + public void setItems(Collection items) { + dataProvider.setItems(items); + } + + class ClubEventProvider extends BasicItemProvider { + + private static final long serialVersionUID = -5415397258827236704L; + + @Override + public void setItems(Collection items) { + super.setItems(items); + fireItemSetChanged(); + } + + } + +} diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java index 681dd7a..397358d 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java @@ -9,6 +9,7 @@ import java.util.Set; import com.vaadin.data.HasValue.ValueChangeEvent; import com.vaadin.data.provider.ListDataProvider; import com.vaadin.event.selection.SingleSelectionEvent; +import com.vaadin.ui.Button; import com.vaadin.ui.CheckBox; import com.vaadin.ui.ComboBox; import com.vaadin.ui.CustomComponent; @@ -38,6 +39,7 @@ public class PersonGrid extends CustomComponent { private final TextField textTitle; private final ListDataProvider dataProvider; + private ClosedFunction closedFunction = null; public PersonGrid(GroupDao groupDao) { @@ -67,11 +69,22 @@ public class PersonGrid extends CustomComponent { .setCaption("Geburtstag"); grid.setSelectionMode(SelectionMode.MULTI); + Button close = new Button("Schließen", ev -> { + PersonGrid.this.setVisible(false); + if (closedFunction != null) { + closedFunction.closed(); + } + }); + VerticalLayout panel = new VerticalLayout(); - panel.addComponents(textTitle, filters, grid); + panel.addComponents(textTitle, filters, grid, close); setCompositionRoot(panel); } + public void onClosedFunction(ClosedFunction closedFunction) { + this.closedFunction = closedFunction; + } + private void onSelectedOnly(ValueChangeEvent ev) { dataProvider.clearFilters(); Set selected = grid.getSelectedItems(); @@ -106,4 +119,8 @@ public class PersonGrid extends CustomComponent { public void setItems(Person... items) { grid.setItems(items); } + + public interface ClosedFunction { + void closed(); + } }