Reorganized Main Layout

master
Markus Kreth 7 years ago
parent 73f93f0697
commit ff6b6fe353
  1. 1
      .classpath
  2. 35
      .settings/org.eclipse.wst.common.component
  3. 5
      pom.xml
  4. 2
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/HeadView.java
  5. 29
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainView.java
  6. 1
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarComponent.java
  7. 23
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonFilter.java
  8. 38
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java

@ -39,7 +39,6 @@
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
<attributes> <attributes>
<attribute name="module" value="true"/>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>

@ -1,64 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="vaadin-clubhelper-1.0.2-SNAPSHOT">
<wb-module deploy-name="vaadin-clubhelper-1.0.3">
<wb-resource deploy-path="/" source-path="/WebContent"/> <wb-resource deploy-path="/" source-path="/WebContent"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/target/generated-resources/gwt"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/target/generated-resources/gwt"/>
<property name="context-root" value="vaadin-clubhelper"/> <property name="context-root" value="vaadin-clubhelper"/>
<property name="java-output-path" value="/vaadin-clubhelper/target/classes"/> <property name="java-output-path" value="/vaadin-clubhelper/target/classes"/>
</wb-module> </wb-module>

@ -86,11 +86,6 @@
<groupId>com.vaadin</groupId> <groupId>com.vaadin</groupId>
<artifactId>vaadin-context-menu</artifactId> <artifactId>vaadin-context-menu</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.vaadin.addons</groupId>
<artifactId>border-layout-addon</artifactId>
<version>1.0</version>
</dependency>
<dependency> <dependency>
<groupId>org.vaadin.ui</groupId> <groupId>org.vaadin.ui</groupId>
<artifactId>numberfield</artifactId> <artifactId>numberfield</artifactId>

@ -93,8 +93,6 @@ public class HeadView extends HorizontalLayout {
setComponentAlignment(personLabel, Alignment.MIDDLE_RIGHT); setComponentAlignment(personLabel, Alignment.MIDDLE_RIGHT);
setExpandRatio(monthName, 1.0f); setExpandRatio(monthName, 1.0f);
setSizeFull();
this.startTime = startTime; this.startTime = startTime;
this.endTime = endTime; this.endTime = endTime;
this.dataProvider = dataProvider; this.dataProvider = dataProvider;

@ -7,7 +7,6 @@ import java.util.concurrent.Executors;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.vaadin.addon.borderlayout.BorderLayout;
import org.vaadin.addon.calendar.ui.CalendarComponentEvents; import org.vaadin.addon.calendar.ui.CalendarComponentEvents;
import com.vaadin.event.selection.SelectionEvent; 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.PersonGrid;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.SingleEventView; 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 = ""; public static final String VIEW_NAME = "";
@ -50,6 +49,10 @@ public class MainView extends BorderLayout implements NamedView {
private Navigator navigator; private Navigator navigator;
private VerticalLayout eastLayout;
private HorizontalLayout mainLayout;
public MainView(PersonDao personDao, GroupDao groupDao, EventBusiness eventBusiness, public MainView(PersonDao personDao, GroupDao groupDao, EventBusiness eventBusiness,
SecurityVerifier securityGroupVerifier) { SecurityVerifier securityGroupVerifier) {
this.personDao = personDao; this.personDao = personDao;
@ -64,7 +67,6 @@ public class MainView extends BorderLayout implements NamedView {
initUI(event); initUI(event);
LOGGER.info("Loaded UI and started fetch of Events"); LOGGER.info("Loaded UI and started fetch of Events");
} else { } else {
if (securityVerifier.isLoggedin()) { if (securityVerifier.isLoggedin()) {
LOGGER.info("{} already initialized - opening Person View.", getClass().getName()); LOGGER.info("{} already initialized - opening Person View.", getClass().getName());
openPersonViewForEvent(eventBusiness.getCurrent()); openPersonViewForEvent(eventBusiness.getCurrent());
@ -72,12 +74,14 @@ public class MainView extends BorderLayout implements NamedView {
head.updateLoggedinPerson(); head.updateLoggedinPerson();
} else { } else {
LOGGER.info("{} already initialized - but not loggedin.", getClass().getName()); LOGGER.info("{} already initialized - but not loggedin.", getClass().getName());
detailClosed();
head.updateLoggedinPerson(); head.updateLoggedinPerson();
} }
} }
} }
public void initUI(ViewChangeEvent event) { public void initUI(ViewChangeEvent event) {
navigator = event.getNavigator(); navigator = event.getNavigator();
eventView = new SingleEventView(false); eventView = new SingleEventView(false);
@ -104,7 +108,7 @@ public class MainView extends BorderLayout implements NamedView {
eventButtonLayout.addComponents(close, eventDetails); eventButtonLayout.addComponents(close, eventDetails);
eventButtonLayout.setVisible(false); eventButtonLayout.setVisible(false);
VerticalLayout eastLayout = new VerticalLayout(); eastLayout = new VerticalLayout();
eastLayout.addComponents(eventView, personGrid, eventButtonLayout); eastLayout.addComponents(eventView, personGrid, eventButtonLayout);
ClubEventProvider dataProvider = new ClubEventProvider(); ClubEventProvider dataProvider = new ClubEventProvider();
@ -115,13 +119,19 @@ public class MainView extends BorderLayout implements NamedView {
head = new HeadView(navigator, () -> calendar.getStartDate(), () -> calendar.getEndDate(), dataProvider, head = new HeadView(navigator, () -> calendar.getStartDate(), () -> calendar.getEndDate(), dataProvider,
securityVerifier); securityVerifier);
head.setWidth("100%");
head.updateMonthText(calendar.getStartDate()); head.updateMonthText(calendar.getStartDate());
calendar.add(dateTime -> head.updateMonthText(dateTime)); calendar.add(dateTime -> head.updateMonthText(dateTime));
mainLayout = new HorizontalLayout(calendar);
mainLayout.setSizeFull();
mainLayout.setExpandRatio(calendar, 2f);
addComponent(head);
addComponent(mainLayout);
setExpandRatio(mainLayout, 1f);
setSizeFull(); setSizeFull();
addComponent(head, BorderLayout.PAGE_START);
addComponent(calendar, BorderLayout.CENTER);
addComponent(eastLayout, BorderLayout.LINE_END);
ExecutorService exec = Executors.newSingleThreadExecutor(); ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(() -> { exec.execute(() -> {
@ -149,6 +159,7 @@ public class MainView extends BorderLayout implements NamedView {
personGrid.setVisible(false); personGrid.setVisible(false);
eventView.setVisible(false); eventView.setVisible(false);
eventButtonLayout.setVisible(false); eventButtonLayout.setVisible(false);
mainLayout.removeComponent(eastLayout);
} }
private void onItemClick(CalendarComponentEvents.ItemClickEvent event) { private void onItemClick(CalendarComponentEvents.ItemClickEvent event) {
@ -166,7 +177,6 @@ public class MainView extends BorderLayout implements NamedView {
LOGGER.debug("Opening detail view for {}", ev); LOGGER.debug("Opening detail view for {}", ev);
eventBusiness.setSelected(null); eventBusiness.setSelected(null);
eventView.setEvent(ev); eventView.setEvent(ev);
personGrid.setEnabled(false); personGrid.setEnabled(false);
@ -177,6 +187,9 @@ public class MainView extends BorderLayout implements NamedView {
eventView.setVisible(true); eventView.setVisible(true);
eventButtonLayout.setVisible(true); eventButtonLayout.setVisible(true);
mainLayout.addComponent(eastLayout);
mainLayout.setExpandRatio(eastLayout, 1f);
eventBusiness.setSelected(ev); eventBusiness.setSelected(ev);
} }

@ -42,7 +42,6 @@ public class CalendarComponent extends CustomComponent {
calendar.setSizeFull(); calendar.setSizeFull();
calendar.addListener(ev -> calendarEvent(ev)); calendar.addListener(ev -> calendarEvent(ev));
setSizeFull();
setCompositionRoot(calendar); setCompositionRoot(calendar);
} }

@ -25,6 +25,7 @@ public class PersonFilter implements SerializablePredicate<Person>, DataProvider
private final List<Person> publishedList; private final List<Person> publishedList;
private final PersonDao personDao; private final PersonDao personDao;
private final DefaultDataUpdateHandler updateHandler; private final DefaultDataUpdateHandler updateHandler;
private String nameFilter;
public PersonFilter(PersonDao personDao) { public PersonFilter(PersonDao personDao) {
this.personDao = personDao; this.personDao = personDao;
@ -34,7 +35,7 @@ public class PersonFilter implements SerializablePredicate<Person>, DataProvider
@Override @Override
public boolean test(Person t) { public boolean test(Person t) {
if (selectedGroups == null && selectedPersons == null) { if (selectedGroups == null && selectedPersons == null && nameFilter == null) {
return true; return true;
} }
@ -44,9 +45,21 @@ public class PersonFilter implements SerializablePredicate<Person>, DataProvider
if (personInGroup(t) == false) { if (personInGroup(t) == false) {
return false; return false;
} }
if (personNameMatch(t) == false) {
return false;
}
return true; 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) { private boolean personInGroup(Person t) {
if (selectedGroups != null) { if (selectedGroups != null) {
return t.getGroups() != null && haveCommonGroup(t.getGroups(), selectedGroups); return t.getGroups() != null && haveCommonGroup(t.getGroups(), selectedGroups);
@ -86,6 +99,14 @@ public class PersonFilter implements SerializablePredicate<Person>, DataProvider
} }
} }
public void setNameFilter(String value) {
if (value != null) {
this.nameFilter = value.toLowerCase();
} else {
this.nameFilter = value;
}
}
public void setSelectedGroups(Set<GroupDef> selected) { public void setSelectedGroups(Set<GroupDef> selected) {
this.selectedGroups = selected; this.selectedGroups = selected;
} }

@ -22,6 +22,7 @@ import com.vaadin.ui.Grid.Column;
import com.vaadin.ui.Grid.SelectionMode; import com.vaadin.ui.Grid.SelectionMode;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Layout; import com.vaadin.ui.Layout;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.components.grid.GridMultiSelect; import com.vaadin.ui.components.grid.GridMultiSelect;
@ -44,10 +45,8 @@ public class PersonGrid extends VerticalLayout {
private final Grid<Person> grid; private final Grid<Person> grid;
private final CheckBox checkIncluded; private final CheckBox checkIncluded;
private final ComboBox<GroupDef> comboGroups; private final ComboBox<GroupDef> comboGroups;
private final TextField textFilter;
private Boolean selectedOnlyFilter;
private Set<GroupDef> groupMemberFilter;
private List<GroupDef> allGroups; private List<GroupDef> allGroups;
private PersonFilter filter; private PersonFilter filter;
private ClubEvent currentEvent; private ClubEvent currentEvent;
@ -64,6 +63,7 @@ public class PersonGrid extends VerticalLayout {
checkIncluded = new CheckBox("Nur gemeldete"); checkIncluded = new CheckBox("Nur gemeldete");
comboGroups = new ComboBox<>("Gruppenfilter"); comboGroups = new ComboBox<>("Gruppenfilter");
textFilter = new TextField("Namenfilter");
filters = setupFilterComponents(); filters = setupFilterComponents();
allGroups = groupDao.listAll(); allGroups = groupDao.listAll();
@ -128,34 +128,43 @@ public class PersonGrid extends VerticalLayout {
comboGroups.setItemCaptionGenerator(GroupDef::getName); comboGroups.setItemCaptionGenerator(GroupDef::getName);
comboGroups.addSelectionListener(ev -> onGroupSelected(ev)); comboGroups.addSelectionListener(ev -> onGroupSelected(ev));
textFilter.setId("person.filter.namefilter");
textFilter.addValueChangeListener(ev -> textFilterChanged(ev));
HorizontalLayout filters = new HorizontalLayout(); HorizontalLayout filters = new HorizontalLayout();
filters.setMargin(false); filters.setMargin(false);
filters.addComponents(checkIncluded, comboGroups); filters.addComponents(checkIncluded, comboGroups, textFilter);
return filters; return filters;
} }
private void textFilterChanged(ValueChangeEvent<String> 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() { public void hideFilter() {
filters.setVisible(false); filters.setVisible(false);
} }
private void onSelectedOnly(ValueChangeEvent<Boolean> ev) { private void onSelectedOnly(ValueChangeEvent<Boolean> ev) {
this.selectedOnlyFilter = ev.getValue(); updateSelectedOnlyFilter(ev.getValue());
updateFilter();
} }
public void setSelectedOnly() { public void setSelectedOnly() {
this.selectedOnlyFilter = true; updateSelectedOnlyFilter(true);
updateFilter();
} }
private void updateFilter() { private void updateSelectedOnlyFilter(Boolean selectedOnly) {
if (selectedOnlyFilter != null && selectedOnlyFilter.equals(Boolean.TRUE)) { if (selectedOnly != null && selectedOnly.equals(Boolean.TRUE)) {
filter.setSelectedPersons(grid.getSelectedItems()); filter.setSelectedPersons(grid.getSelectedItems());
} else { } else {
filter.setSelectedPersons(null); filter.setSelectedPersons(null);
} }
filter.setSelectedGroups(groupMemberFilter);
dataProvider.refreshAll(); dataProvider.refreshAll();
} }
@ -198,11 +207,12 @@ public class PersonGrid extends VerticalLayout {
private void onGroupSelected(SingleSelectionEvent<GroupDef> ev) { private void onGroupSelected(SingleSelectionEvent<GroupDef> ev) {
groupMemberFilter = ev.getAllSelectedItems(); Set<GroupDef> groupMemberFilter = ev.getAllSelectedItems();
if (groupMemberFilter.isEmpty()) { if (groupMemberFilter.isEmpty()) {
groupMemberFilter = null; groupMemberFilter = null;
} }
updateFilter(); filter.setSelectedGroups(groupMemberFilter);
dataProvider.refreshAll();
} }
public void onPersonEdit() { public void onPersonEdit() {

Loading…
Cancel
Save