diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/ClubhelperNavigation.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/ClubhelperNavigation.java index 7cdc9e9..bde0c40 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/ClubhelperNavigation.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/ClubhelperNavigation.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)); diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/ClubhelperViews.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/ClubhelperViews.java index 3d8eeca..988bd83 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/ClubhelperViews.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/ClubhelperViews.java @@ -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; diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainView.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainView.java index bde1859..4dc9942 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainView.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainView.java @@ -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 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 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); } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainViewDesktop.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainViewDesktop.java new file mode 100644 index 0000000..44d4397 --- /dev/null +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainViewDesktop.java @@ -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 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); + } + +}