diff --git a/.classpath b/.classpath index c12c8d0..5772ac7 100644 --- a/.classpath +++ b/.classpath @@ -39,7 +39,6 @@ - diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 8216514..c34e8ca 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,64 +1,75 @@ - + - - + + + + - + + - + + - + + - + + - + + - + + - + + - + + - + + diff --git a/pom.xml b/pom.xml index a387eec..18a7394 100644 --- a/pom.xml +++ b/pom.xml @@ -86,11 +86,6 @@ com.vaadin vaadin-context-menu - - org.vaadin.addons - border-layout-addon - 1.0 - org.vaadin.ui numberfield diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/HeadView.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/HeadView.java index f20319d..8bed1da 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/HeadView.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/HeadView.java @@ -93,8 +93,6 @@ public class HeadView extends HorizontalLayout { setComponentAlignment(personLabel, Alignment.MIDDLE_RIGHT); setExpandRatio(monthName, 1.0f); - setSizeFull(); - this.startTime = startTime; this.endTime = endTime; this.dataProvider = dataProvider; diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainView.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainView.java index ee141b2..94bab65 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainView.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainView.java @@ -7,7 +7,6 @@ import java.util.concurrent.Executors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.vaadin.addon.borderlayout.BorderLayout; import org.vaadin.addon.calendar.ui.CalendarComponentEvents; import com.vaadin.event.selection.SelectionEvent; @@ -30,7 +29,7 @@ import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.CalendarCompone import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.PersonGrid; import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.SingleEventView; -public class MainView extends BorderLayout implements NamedView { +public class MainView extends VerticalLayout implements NamedView { public static final String VIEW_NAME = ""; @@ -50,6 +49,10 @@ public class MainView extends BorderLayout implements NamedView { private Navigator navigator; + private VerticalLayout eastLayout; + + private HorizontalLayout mainLayout; + public MainView(PersonDao personDao, GroupDao groupDao, EventBusiness eventBusiness, SecurityVerifier securityGroupVerifier) { this.personDao = personDao; @@ -64,7 +67,6 @@ public class MainView extends BorderLayout implements NamedView { initUI(event); LOGGER.info("Loaded UI and started fetch of Events"); } else { - if (securityVerifier.isLoggedin()) { LOGGER.info("{} already initialized - opening Person View.", getClass().getName()); openPersonViewForEvent(eventBusiness.getCurrent()); @@ -72,12 +74,14 @@ public class MainView extends BorderLayout implements NamedView { head.updateLoggedinPerson(); } else { LOGGER.info("{} already initialized - but not loggedin.", getClass().getName()); + detailClosed(); head.updateLoggedinPerson(); } } } public void initUI(ViewChangeEvent event) { + navigator = event.getNavigator(); eventView = new SingleEventView(false); @@ -104,7 +108,7 @@ public class MainView extends BorderLayout implements NamedView { eventButtonLayout.addComponents(close, eventDetails); eventButtonLayout.setVisible(false); - VerticalLayout eastLayout = new VerticalLayout(); + eastLayout = new VerticalLayout(); eastLayout.addComponents(eventView, personGrid, eventButtonLayout); ClubEventProvider dataProvider = new ClubEventProvider(); @@ -115,13 +119,19 @@ public class MainView extends BorderLayout implements NamedView { head = new HeadView(navigator, () -> calendar.getStartDate(), () -> calendar.getEndDate(), dataProvider, securityVerifier); + head.setWidth("100%"); head.updateMonthText(calendar.getStartDate()); + calendar.add(dateTime -> head.updateMonthText(dateTime)); + mainLayout = new HorizontalLayout(calendar); + mainLayout.setSizeFull(); + mainLayout.setExpandRatio(calendar, 2f); + + addComponent(head); + addComponent(mainLayout); + setExpandRatio(mainLayout, 1f); setSizeFull(); - addComponent(head, BorderLayout.PAGE_START); - addComponent(calendar, BorderLayout.CENTER); - addComponent(eastLayout, BorderLayout.LINE_END); ExecutorService exec = Executors.newSingleThreadExecutor(); exec.execute(() -> { @@ -149,6 +159,7 @@ public class MainView extends BorderLayout implements NamedView { personGrid.setVisible(false); eventView.setVisible(false); eventButtonLayout.setVisible(false); + mainLayout.removeComponent(eastLayout); } private void onItemClick(CalendarComponentEvents.ItemClickEvent event) { @@ -166,7 +177,6 @@ public class MainView extends BorderLayout implements NamedView { LOGGER.debug("Opening detail view for {}", ev); eventBusiness.setSelected(null); - eventView.setEvent(ev); personGrid.setEnabled(false); @@ -177,6 +187,9 @@ public class MainView extends BorderLayout implements NamedView { eventView.setVisible(true); eventButtonLayout.setVisible(true); + mainLayout.addComponent(eastLayout); + mainLayout.setExpandRatio(eastLayout, 1f); + eventBusiness.setSelected(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 index 805dcb1..4a30acc 100644 --- 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 @@ -42,7 +42,6 @@ public class CalendarComponent extends CustomComponent { calendar.setSizeFull(); calendar.addListener(ev -> calendarEvent(ev)); - setSizeFull(); setCompositionRoot(calendar); } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonFilter.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonFilter.java index 3e99c64..af6db40 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonFilter.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonFilter.java @@ -25,6 +25,7 @@ public class PersonFilter implements SerializablePredicate, DataProvider private final List publishedList; private final PersonDao personDao; private final DefaultDataUpdateHandler updateHandler; + private String nameFilter; public PersonFilter(PersonDao personDao) { this.personDao = personDao; @@ -34,7 +35,7 @@ public class PersonFilter implements SerializablePredicate, DataProvider @Override public boolean test(Person t) { - if (selectedGroups == null && selectedPersons == null) { + if (selectedGroups == null && selectedPersons == null && nameFilter == null) { return true; } @@ -44,9 +45,21 @@ public class PersonFilter implements SerializablePredicate, DataProvider if (personInGroup(t) == false) { return false; } + if (personNameMatch(t) == false) { + return false; + } return true; } + private boolean personNameMatch(Person t) { + if (nameFilter == null || nameFilter.isBlank()) { + return true; + } + boolean contains = t.getPrename().toLowerCase().contains(nameFilter) + || t.getSurname().toLowerCase().contains(nameFilter); + return contains; + } + private boolean personInGroup(Person t) { if (selectedGroups != null) { return t.getGroups() != null && haveCommonGroup(t.getGroups(), selectedGroups); @@ -86,6 +99,14 @@ public class PersonFilter implements SerializablePredicate, DataProvider } } + public void setNameFilter(String value) { + if (value != null) { + this.nameFilter = value.toLowerCase(); + } else { + this.nameFilter = value; + } + } + public void setSelectedGroups(Set selected) { this.selectedGroups = selected; } 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 c74cf41..2f28594 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 @@ -22,6 +22,7 @@ import com.vaadin.ui.Grid.Column; import com.vaadin.ui.Grid.SelectionMode; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Layout; +import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.components.grid.GridMultiSelect; @@ -44,10 +45,8 @@ public class PersonGrid extends VerticalLayout { private final Grid grid; private final CheckBox checkIncluded; private final ComboBox comboGroups; + private final TextField textFilter; - private Boolean selectedOnlyFilter; - - private Set groupMemberFilter; private List allGroups; private PersonFilter filter; private ClubEvent currentEvent; @@ -64,6 +63,7 @@ public class PersonGrid extends VerticalLayout { checkIncluded = new CheckBox("Nur gemeldete"); comboGroups = new ComboBox<>("Gruppenfilter"); + textFilter = new TextField("Namenfilter"); filters = setupFilterComponents(); allGroups = groupDao.listAll(); @@ -128,34 +128,43 @@ public class PersonGrid extends VerticalLayout { comboGroups.setItemCaptionGenerator(GroupDef::getName); comboGroups.addSelectionListener(ev -> onGroupSelected(ev)); + textFilter.setId("person.filter.namefilter"); + textFilter.addValueChangeListener(ev -> textFilterChanged(ev)); HorizontalLayout filters = new HorizontalLayout(); filters.setMargin(false); - filters.addComponents(checkIncluded, comboGroups); + filters.addComponents(checkIncluded, comboGroups, textFilter); return filters; } + private void textFilterChanged(ValueChangeEvent ev) { + String value = ev.getValue(); + if (value != null && value.length() >= 2) { + filter.setNameFilter(value); + dataProvider.refreshAll(); + } else { + filter.setNameFilter(null); + dataProvider.refreshAll(); + } + } + public void hideFilter() { filters.setVisible(false); } private void onSelectedOnly(ValueChangeEvent ev) { - this.selectedOnlyFilter = ev.getValue(); - updateFilter(); + updateSelectedOnlyFilter(ev.getValue()); } public void setSelectedOnly() { - this.selectedOnlyFilter = true; - updateFilter(); + updateSelectedOnlyFilter(true); } - private void updateFilter() { - if (selectedOnlyFilter != null && selectedOnlyFilter.equals(Boolean.TRUE)) { + private void updateSelectedOnlyFilter(Boolean selectedOnly) { + if (selectedOnly != null && selectedOnly.equals(Boolean.TRUE)) { filter.setSelectedPersons(grid.getSelectedItems()); } else { filter.setSelectedPersons(null); } - - filter.setSelectedGroups(groupMemberFilter); dataProvider.refreshAll(); } @@ -198,11 +207,12 @@ public class PersonGrid extends VerticalLayout { private void onGroupSelected(SingleSelectionEvent ev) { - groupMemberFilter = ev.getAllSelectedItems(); + Set groupMemberFilter = ev.getAllSelectedItems(); if (groupMemberFilter.isEmpty()) { groupMemberFilter = null; } - updateFilter(); + filter.setSelectedGroups(groupMemberFilter); + dataProvider.refreshAll(); } public void onPersonEdit() {