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;
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<Person> 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<ClubEvent> 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<ClubEvent> 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<ClubEvent> {
private static final long serialVersionUID = -5415397258827236704L;
@Override
public void setItems(Collection<ClubEvent> items) {
super.setItems(items);
fireItemSetChanged();
}
contentLayout.setExpandRatio(calendar, .5f);
calendar.setWidth("50%");
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.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<Person> 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<Boolean> ev) {
dataProvider.clearFilters();
Set<Person> 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();
}
}

Loading…
Cancel
Save