Calendar Component extracted

master
Markus Kreth 7 years ago
parent 93a99676c1
commit eaf55dc452
  1. 61
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainUi.java
  2. 100
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarComponent.java
  3. 19
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java

@ -1,15 +1,10 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui; 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.List;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import org.springframework.beans.factory.annotation.Autowired; 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 org.vaadin.addon.calendar.ui.CalendarComponentEvents;
import com.vaadin.annotations.Theme; 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.GroupDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; 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; import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.PersonGrid;
@Theme("vaadin-clubhelpertheme") @Theme("vaadin-clubhelpertheme")
@ -39,70 +34,64 @@ public class MainUi extends UI {
@Autowired @Autowired
GroupDao groupDao; GroupDao groupDao;
private ClubEventProvider dataProvider;
private PersonGrid personGrid; private PersonGrid personGrid;
private EventGrid eventGrid;
private CalendarComponent calendar;
private HorizontalLayout contentLayout;
@Override @Override
protected void init(VaadinRequest request) { protected void init(VaadinRequest request) {
HorizontalLayout layout = new HorizontalLayout();
List<Person> persons = personDao.list(); List<Person> persons = personDao.list();
personGrid = new PersonGrid(groupDao); personGrid = new PersonGrid(groupDao);
personGrid.setItems(persons); personGrid.setItems(persons);
personGrid.setCaption("Personen"); personGrid.setCaption("Personen");
personGrid.setVisible(false); personGrid.setVisible(false);
personGrid.onClosedFunction(() -> detailClosed());
eventGrid = new EventGrid(); this.calendar = new CalendarComponent();
eventGrid.setCaption("Termine");
eventGrid.addItemClickListener(ev -> showDetails(ev.getItem()));
dataProvider = new ClubEventProvider();
Calendar<ClubEvent> calendar = new Calendar<>(dataProvider)
.withMonth(Month.from(LocalDateTime.now()));
calendar.setCaption("Events");
calendar.setHandler(this::onItemClick); calendar.setHandler(this::onItemClick);
layout.addComponents(calendar, personGrid, eventGrid); contentLayout = new HorizontalLayout();
setContent(layout); contentLayout.setSizeFull();
contentLayout.addComponents(calendar, personGrid);
contentLayout.setExpandRatio(calendar, 1.0f);
setContent(contentLayout);
setSizeFull();
ExecutorService exec = Executors.newSingleThreadExecutor(); ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(() -> { exec.execute(() -> {
EventBusiness business = new EventBusiness(); EventBusiness business = new EventBusiness();
List<ClubEvent> events = business.loadEvents(request); List<ClubEvent> events = business.loadEvents(request);
dataProvider.setItems(events); calendar.setItems(events);
eventGrid.setItems(events);
eventGrid.getDataProvider().refreshAll();
System.out.println("Updated data: " + events); System.out.println("Updated data: " + events);
}); });
exec.shutdown(); exec.shutdown();
} }
private void detailClosed() {
personGrid.setVisible(false);
calendar.setSizeFull();
contentLayout.setExpandRatio(calendar, 1.0f);
}
private void onItemClick(CalendarComponentEvents.ItemClickEvent event) { private void onItemClick(CalendarComponentEvents.ItemClickEvent event) {
ClubEvent ev = (ClubEvent) event.getCalendarItem(); ClubEvent ev = (ClubEvent) event.getCalendarItem();
showDetails(ev); showDetails(ev);
} }
private void showDetails(ClubEvent ev) { private void showDetails(ClubEvent ev) {
eventGrid.setVisible(false);
personGrid.setVisible(true); personGrid.setVisible(true);
personGrid.setCaption(ev.getCaption()); personGrid.setCaption(ev.getCaption());
personGrid.setTitle(ev.getCaption()); personGrid.setTitle(ev.getCaption());
Notification.show("" + ev); contentLayout.setExpandRatio(calendar, .5f);
} calendar.setWidth("50%");
class ClubEventProvider extends BasicItemProvider<ClubEvent> {
private static final long serialVersionUID = -5415397258827236704L;
@Override
public void setItems(Collection<ClubEvent> items) {
super.setItems(items);
fireItemSetChanged();
}
Notification.show("" + ev);
} }
} }

@ -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<ClubEvent> 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<ClubEvent> items) {
dataProvider.setItems(items);
}
class ClubEventProvider extends BasicItemProvider<ClubEvent> {
private static final long serialVersionUID = -5415397258827236704L;
@Override
public void setItems(Collection<ClubEvent> items) {
super.setItems(items);
fireItemSetChanged();
}
}
}

@ -9,6 +9,7 @@ import java.util.Set;
import com.vaadin.data.HasValue.ValueChangeEvent; import com.vaadin.data.HasValue.ValueChangeEvent;
import com.vaadin.data.provider.ListDataProvider; import com.vaadin.data.provider.ListDataProvider;
import com.vaadin.event.selection.SingleSelectionEvent; import com.vaadin.event.selection.SingleSelectionEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox; import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox; import com.vaadin.ui.ComboBox;
import com.vaadin.ui.CustomComponent; import com.vaadin.ui.CustomComponent;
@ -38,6 +39,7 @@ public class PersonGrid extends CustomComponent {
private final TextField textTitle; private final TextField textTitle;
private final ListDataProvider<Person> dataProvider; private final ListDataProvider<Person> dataProvider;
private ClosedFunction closedFunction = null;
public PersonGrid(GroupDao groupDao) { public PersonGrid(GroupDao groupDao) {
@ -67,11 +69,22 @@ public class PersonGrid extends CustomComponent {
.setCaption("Geburtstag"); .setCaption("Geburtstag");
grid.setSelectionMode(SelectionMode.MULTI); grid.setSelectionMode(SelectionMode.MULTI);
Button close = new Button("Schließen", ev -> {
PersonGrid.this.setVisible(false);
if (closedFunction != null) {
closedFunction.closed();
}
});
VerticalLayout panel = new VerticalLayout(); VerticalLayout panel = new VerticalLayout();
panel.addComponents(textTitle, filters, grid); panel.addComponents(textTitle, filters, grid, close);
setCompositionRoot(panel); setCompositionRoot(panel);
} }
public void onClosedFunction(ClosedFunction closedFunction) {
this.closedFunction = closedFunction;
}
private void onSelectedOnly(ValueChangeEvent<Boolean> ev) { private void onSelectedOnly(ValueChangeEvent<Boolean> ev) {
dataProvider.clearFilters(); dataProvider.clearFilters();
Set<Person> selected = grid.getSelectedItems(); Set<Person> selected = grid.getSelectedItems();
@ -106,4 +119,8 @@ public class PersonGrid extends CustomComponent {
public void setItems(Person... items) { public void setItems(Person... items) {
grid.setItems(items); grid.setItems(items);
} }
public interface ClosedFunction {
void closed();
}
} }

Loading…
Cancel
Save