Refactoring: Extracted MainView Parent.

master
Markus Kreth 7 years ago
parent 9de8550c11
commit 51a30a69dc
  1. 2
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/ClubhelperNavigation.java
  2. 6
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/ClubhelperViews.java
  3. 112
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainView.java
  4. 145
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainViewDesktop.java

@ -49,7 +49,7 @@ public class ClubhelperNavigation {
navi = new ClubNavigator().init(mainUI);
// Create and register the views
MainView mainView = new MainView(personDao, groupDao, eventBusiness, securityGroupVerifier);
MainView mainView = new MainViewDesktop(personDao, groupDao, eventBusiness, securityGroupVerifier);
navi.addView("", mainView);
navi.addView(ClubhelperViews.MainView.name(), mainView);
navi.addView(ClubhelperViews.LoginUI.name(), new LoginUI(personDao, securityGroupVerifier));

@ -1,9 +1,15 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.navigation;
public enum ClubhelperViews {
/**
* With Alias ''
*/
MainView, EventDetails, PersonEditView, LoginUI;
public static ClubhelperViews byState(String state) {
if (state.isBlank()) {
return MainView;
}
for (ClubhelperViews v : values()) {
if (state.startsWith(v.name())) {
return v;

@ -1,21 +1,14 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.navigation;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.vaadin.addon.calendar.ui.CalendarComponentEvents;
import com.vaadin.event.selection.SelectionEvent;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.Grid.SelectionMode;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.EventBusiness;
@ -24,33 +17,24 @@ import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.security.SecurityVerifier;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.CalendarComponent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.CalendarComponent.ClubEventProvider;
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.navigation.ClubhelperNavigation.ClubNavigator;
public class MainView extends VerticalLayout implements View {
public abstract class MainView extends VerticalLayout implements View {
private static final long serialVersionUID = 4831071242146146399L;
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
protected final Logger LOGGER = LoggerFactory.getLogger(getClass());
private final PersonDao personDao;
private final GroupDao groupDao;
private final EventBusiness eventBusiness;
private final SecurityVerifier securityVerifier;
protected final EventBusiness eventBusiness;
protected final SecurityVerifier securityVerifier;
private PersonGrid personGrid;
private CalendarComponent calendar;
private HeadView head;
private SingleEventView eventView;
private HorizontalLayout eventButtonLayout;
protected PersonGrid personGrid;
protected SingleEventView eventView;
private ClubNavigator navigator;
private VerticalLayout eastLayout;
private HorizontalLayout mainLayout;
protected ClubNavigator navigator;
public MainView(PersonDao personDao, GroupDao groupDao, EventBusiness eventBusiness,
SecurityVerifier securityGroupVerifier) {
@ -70,16 +54,10 @@ public class MainView extends VerticalLayout implements View {
LOGGER.info("{} already initialized - opening Person View.", getClass().getName());
ClubEvent current = eventBusiness.getCurrent();
openPersonViewForEvent(current);
if (current != null) {
calendar.setToday(current.getStart());
}
head.updateLoggedinPerson();
} else {
LOGGER.info("{} already initialized - but not loggedin.", getClass().getName());
detailClosed();
head.updateLoggedinPerson();
}
reloadEvents();
}
}
@ -96,63 +74,6 @@ public class MainView extends VerticalLayout implements View {
personGrid.onPersonSelect(ev -> personSelectionChange(ev));
personGrid.setVisible(false);
Button close = new Button("Schließen", ev -> {
detailClosed();
});
close.setId("person.close");
Button eventDetails = new Button("Veranstaltung Details", ev -> {
navigator.navigateTo(ClubhelperViews.EventDetails.name());
});
eventDetails.setId("person.eventDetails");
eventButtonLayout = new HorizontalLayout();
eventButtonLayout.setSpacing(true);
eventButtonLayout.addComponents(close, eventDetails);
eventButtonLayout.setVisible(false);
eastLayout = new VerticalLayout();
eastLayout.addComponents(eventView, personGrid, eventButtonLayout);
ClubEventProvider dataProvider = new ClubEventProvider();
calendar = new CalendarComponent(dataProvider);
calendar.setSizeFull();
calendar.setId("main.calendar");
calendar.setHandler(this::onItemClick);
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();
reloadEvents();
}
public void reloadEvents() {
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(() -> {
final List<ClubEvent> events = eventBusiness.loadEvents();
LOGGER.info("Loaded events: {}", events);
final UI ui = calendar.getUI();
ui.access(() -> {
calendar.setItems(events);
ui.push();
});
});
exec.shutdown();
}
private void personSelectionChange(SelectionEvent<Person> ev) {
@ -161,23 +82,10 @@ public class MainView extends VerticalLayout implements View {
eventBusiness.changePersons(selected);
}
private void detailClosed() {
public void detailClosed() {
LOGGER.debug("Closing detail view.");
personGrid.setVisible(false);
eventView.setVisible(false);
eventButtonLayout.setVisible(false);
mainLayout.removeComponent(eastLayout);
}
private void onItemClick(CalendarComponentEvents.ItemClickEvent event) {
ClubEvent ev = (ClubEvent) event.getCalendarItem();
if (securityVerifier.isLoggedin()) {
openPersonViewForEvent(ev);
} else {
eventBusiness.setSelected(ev);
navigator.navigateTo(ClubhelperViews.LoginUI.name() + '/' + ev.getId());
}
}
public void openPersonViewForEvent(ClubEvent ev) {
@ -192,10 +100,6 @@ public class MainView extends VerticalLayout implements View {
personGrid.setVisible(true);
eventView.setVisible(true);
eventButtonLayout.setVisible(true);
mainLayout.addComponent(eastLayout);
mainLayout.setExpandRatio(eastLayout, 1f);
eventBusiness.setSelected(ev);
}

@ -0,0 +1,145 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.navigation;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.vaadin.addon.calendar.ui.CalendarComponentEvents;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.EventBusiness;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.GroupDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.security.SecurityVerifier;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.CalendarComponent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.CalendarComponent.ClubEventProvider;
public class MainViewDesktop extends MainView {
/**
*
*/
private static final long serialVersionUID = -3293470536470926668L;
private VerticalLayout eastLayout;
private HorizontalLayout mainLayout;
private HorizontalLayout eventButtonLayout;
private CalendarComponent calendar;
private HeadView head;
public MainViewDesktop(PersonDao personDao, GroupDao groupDao, EventBusiness eventBusiness,
SecurityVerifier securityGroupVerifier) {
super(personDao, groupDao, eventBusiness, securityGroupVerifier);
}
@Override
public void initUI(ViewChangeEvent event) {
super.initUI(event);
ClubEventProvider dataProvider = new ClubEventProvider();
calendar = new CalendarComponent(dataProvider);
calendar.setSizeFull();
calendar.setId("main.calendar");
calendar.setHandler(this::onItemClick);
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);
Button close = new Button("Schließen", ev -> {
detailClosed();
});
close.setId("person.close");
Button eventDetails = new Button("Veranstaltung Details", ev -> {
navigator.navigateTo(ClubhelperViews.EventDetails.name());
});
eventDetails.setId("person.eventDetails");
eventButtonLayout = new HorizontalLayout();
eventButtonLayout.setSpacing(true);
eventButtonLayout.addComponents(close, eventDetails);
eventButtonLayout.setVisible(false);
eastLayout = new VerticalLayout();
eastLayout.addComponents(eventView, personGrid, eventButtonLayout);
addComponent(head);
addComponent(mainLayout);
setExpandRatio(mainLayout, 1f);
setSizeFull();
reloadEvents();
}
public void reloadEvents() {
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(() -> {
final List<ClubEvent> events = eventBusiness.loadEvents();
LOGGER.info("Loaded events: {}", events);
final UI ui = calendar.getUI();
ui.access(() -> {
calendar.setItems(events);
ui.push();
});
});
exec.shutdown();
}
@Override
public void enter(ViewChangeEvent event) {
super.enter(event);
head.updateLoggedinPerson();
reloadEvents();
}
private void onItemClick(CalendarComponentEvents.ItemClickEvent event) {
ClubEvent ev = (ClubEvent) event.getCalendarItem();
if (securityVerifier.isLoggedin()) {
openPersonViewForEvent(ev);
} else {
eventBusiness.setSelected(ev);
navigator.navigateTo(ClubhelperViews.LoginUI.name() + '/' + ev.getId());
}
}
@Override
public void openPersonViewForEvent(ClubEvent ev) {
super.openPersonViewForEvent(ev);
mainLayout.addComponent(eastLayout);
mainLayout.setExpandRatio(eastLayout, 1f);
if (ev != null) {
calendar.setToday(ev.getStart());
}
eventButtonLayout.setVisible(true);
}
@Override
public void detailClosed() {
super.detailClosed();
mainLayout.removeComponent(eastLayout);
eventButtonLayout.setVisible(false);
}
}
Loading…
Cancel
Save