CSV export of competitions

master
Markus Kreth 7 years ago
parent 18bb33f4c9
commit df0217f4cb
  1. 1
      .classpath
  2. 12
      pom.xml
  3. 42
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/CsvExporter.java
  4. 9
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/GroupDef.java
  5. 70
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/EventGrid.java
  6. 23
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/ClubhelperNavigation.java
  7. 7
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/DesktopHeadView.java
  8. 61
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/HeadView.java
  9. 10
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainViewDesktop.java
  10. 14
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainViewMobile.java
  11. 6
      src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainViewDesktopSmokeTest.java
  12. 6
      src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/navigation/MainViewMobileSmokeTest.java

@ -28,7 +28,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>

@ -102,6 +102,18 @@
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-elemental</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.8.2</version>
<scope>provided</scope>
</dependency>
<dependency> <dependency>
<groupId>commons-io</groupId> <groupId>commons-io</groupId>

@ -1,17 +1,55 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.business; package de.kreth.vaadin.clubhelper.vaadinclubhelper.business;
import java.io.IOException;
import java.io.Writer;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
public class CsvExporter { public class CsvExporter {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
private static final String HEAD_DATUM = "Datum"; private static final String HEAD_DATUM = "Datum";
private static final String HEAD_CAPTION = "Datum"; private static final String HEAD_CAPTION = "Bezeichnung";
private static final String HEAD_ORT = "Ort"; private static final String HEAD_ORT = "Ort";
private static final String[] HEAD = { HEAD_DATUM, HEAD_CAPTION, HEAD_ORT }; private static final String HEAD_TEILNEHMER = "Teilnehmer";
private static final String[] HEAD = { HEAD_DATUM, HEAD_CAPTION, HEAD_ORT, HEAD_TEILNEHMER };
private final CSVFormat format = CSVFormat.RFC4180.withDelimiter(',') private final CSVFormat format = CSVFormat.RFC4180.withDelimiter(',')
.withHeader(HEAD); .withHeader(HEAD);
public void export(List<ClubEvent> items, Writer out) throws IOException {
CSVPrinter printer = format.print(out);
printer.printRecords(Arrays.asList(HEAD));
for (ClubEvent event : items) {
String start = FORMATTER.format(event.getStart());
String end = FORMATTER.format(event.getEnd());
if (start.equals(end) == false) {
start = start + "-" + end;
}
StringBuilder competitors = new StringBuilder();
for (Person p : event.getPersons()) {
if (competitors.length() > 0) {
competitors.append(",");
}
competitors.append(p.getPrename()).append(" ").append(p.getSurname());
}
printer.printRecord(start, event.getCaption(), event.getLocation(), competitors.toString());
}
}
} }

@ -57,7 +57,6 @@ public class GroupDef extends BaseEntity implements Serializable {
final int prime = 31; final int prime = 31;
int result = super.hashCode(); int result = super.hashCode();
result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((persongroups == null) ? 0 : persongroups.hashCode());
return result; return result;
} }
@ -81,14 +80,6 @@ public class GroupDef extends BaseEntity implements Serializable {
else if (!name.equals(other.name)) { else if (!name.equals(other.name)) {
return false; return false;
} }
if (persongroups == null) {
if (other.persongroups != null) {
return false;
}
}
else if (!persongroups.equals(other.persongroups)) {
return false;
}
return true; return true;
} }

@ -3,42 +3,43 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle; import java.time.format.FormatStyle;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import org.basilbourque.timecolumnrenderers.ZonedDateTimeRenderer; import org.basilbourque.timecolumnrenderers.ZonedDateTimeRenderer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.vaadin.data.provider.ConfigurableFilterDataProvider; import com.vaadin.data.provider.ConfigurableFilterDataProvider;
import com.vaadin.data.provider.DataProvider; import com.vaadin.data.provider.DataProvider;
import com.vaadin.server.SerializablePredicate; import com.vaadin.server.SerializablePredicate;
import com.vaadin.ui.Grid; import com.vaadin.ui.Grid;
import com.vaadin.ui.Label; import com.vaadin.ui.Label;
import com.vaadin.ui.renderers.AbstractRenderer;
import com.vaadin.ui.renderers.Renderer;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.EventBusiness; import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.EventBusiness;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
import elemental.js.json.JsJsonFactory;
import elemental.json.JsonArray;
import elemental.json.JsonValue;
@Component
public class EventGrid extends Grid<ClubEvent> { public class EventGrid extends Grid<ClubEvent> {
private static final long serialVersionUID = -5435770187868470290L;
private final transient DateTimeFormatter df = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
private ConfigurableFilterDataProvider<ClubEvent, Void, SerializablePredicate<ClubEvent>> eventDataProvider; private ConfigurableFilterDataProvider<ClubEvent, Void, SerializablePredicate<ClubEvent>> eventDataProvider;
private transient EventBusiness business; private transient EventBusiness business;
public EventGrid(@Autowired EventBusiness eventBusiness) { public EventGrid(EventBusiness eventBusiness) {
this(eventBusiness, false);
}
public EventGrid(EventBusiness eventBusiness, boolean withCompetitors) {
this.business = eventBusiness; this.business = eventBusiness;
setCaption("Veranstaltungen");
setSizeFull(); setSizeFull();
setSelectionMode(SelectionMode.NONE); setSelectionMode(SelectionMode.NONE);
addColumn(ClubEvent::getStart, dt -> {
return dt != null ? df.format(dt) : "";
}).setCaption("Start");
addComponentColumn(ev -> { addComponentColumn(ev -> {
Label l = new Label(); Label l = new Label();
@ -48,10 +49,13 @@ public class EventGrid extends Grid<ClubEvent> {
return l; return l;
}).setSortable(true).setHidable(false); }).setSortable(true).setHidable(false);
addColumn(ClubEvent::getStart).setCaption("Start") addColumn(ClubEvent::getStart).setCaption("Start")
.setRenderer(new ZonedDateTimeRenderer(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM))) .setRenderer(new TestRenderer(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)))
.setSortable(true).setHidable(true); .setSortable(true).setHidable(true);
addColumn(ClubEvent::getCaption).setCaption("Bezeichnung"); addColumn(ClubEvent::getCaption).setCaption("Bezeichnung");
addColumn(ClubEvent::getLocation).setCaption("Ort"); addColumn(ClubEvent::getLocation).setCaption("Ort");
if (withCompetitors) {
// addColumn(ClubEvent::getPersons).setCaption("Teilnehmer").setRenderer(createRenderer());
}
List<ClubEvent> loadEvents = business.loadEvents(); List<ClubEvent> loadEvents = business.loadEvents();
@ -61,6 +65,46 @@ public class EventGrid extends Grid<ClubEvent> {
setDataProvider(eventDataProvider); setDataProvider(eventDataProvider);
} }
class TestRenderer extends ZonedDateTimeRenderer {
protected TestRenderer(DateTimeFormatter formatter) {
super(formatter);
}
@Override
public JsonValue encode(ZonedDateTime value) {
JsonValue encodeed = super.encode(value);
return encodeed;
}
}
private Renderer<Set<Person>> createRenderer() {
return new PersonSetRenderer();
}
private static final Set<Person> set = new HashSet<>();
class PersonSetRenderer extends AbstractRenderer<Object, Set<Person>> {
@SuppressWarnings("unchecked")
protected PersonSetRenderer() {
super((Class<Set<Person>>) set.getClass());
}
@Override
public JsonValue encode(Set<Person> value) {
JsJsonFactory jsonFactory = new JsJsonFactory();
JsonArray personArray = jsonFactory.createArray();
int index = 0;
for (Person p : value) {
personArray.set(index, p.getPrename() + " " + p.getSurname());
index++;
}
return personArray;
}
}
private boolean filter(ClubEvent ev) { private boolean filter(ClubEvent ev) {
return ev.getStart().isAfter(ZonedDateTime.now().minusMonths(1).withDayOfMonth(1)); return ev.getStart().isAfter(ZonedDateTime.now().minusMonths(1).withDayOfMonth(1));
} }

@ -4,7 +4,10 @@ import java.util.Stack;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.vaadin.navigator.Navigator; import com.vaadin.navigator.Navigator;
@ -21,10 +24,12 @@ import de.kreth.vaadin.clubhelper.vaadinclubhelper.security.SecurityVerifier;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.EventDetails; import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.EventDetails;
@Component @Component
public class ClubhelperNavigation { public class ClubhelperNavigation implements ApplicationContextAware {
private static final Logger LOGGER = LoggerFactory.getLogger(ClubhelperNavigation.class); private static final Logger LOGGER = LoggerFactory.getLogger(ClubhelperNavigation.class);
private ApplicationContext context;
@Autowired @Autowired
PersonDao personDao; PersonDao personDao;
@ -85,9 +90,10 @@ public class ClubhelperNavigation {
public MainView createMain() { public MainView createMain() {
if (page.getBrowserWindowWidth() < 1000) { if (page.getBrowserWindowWidth() < 1000) {
return new MainViewMobile(personDao, groupDao, eventBusiness, securityGroupVerifier); return new MainViewMobile(context, personDao, groupDao, eventBusiness, securityGroupVerifier);
} else { }
return new MainViewDesktop(personDao, groupDao, eventBusiness, securityGroupVerifier); else {
return new MainViewDesktop(context, personDao, groupDao, eventBusiness, securityGroupVerifier);
} }
} }
@ -103,6 +109,7 @@ public class ClubhelperNavigation {
public class ClubNavigator extends Navigator { public class ClubNavigator extends Navigator {
private static final long serialVersionUID = -6503600786209888296L; private static final long serialVersionUID = -6503600786209888296L;
private final Stack<ClubhelperViews> navigationViewNames = new Stack<>(); private final Stack<ClubhelperViews> navigationViewNames = new Stack<>();
ClubNavigator init(UI ui) { ClubNavigator init(UI ui) {
@ -131,7 +138,8 @@ public class ClubhelperNavigation {
navigationViewNames.clear(); navigationViewNames.clear();
navigationViewNames.add(ClubhelperViews.MainView); navigationViewNames.add(ClubhelperViews.MainView);
super.navigateTo(ClubhelperViews.LoginUI.name()); super.navigateTo(ClubhelperViews.LoginUI.name());
} else { }
else {
navigationViewNames.add(byState); navigationViewNames.add(byState);
super.navigateTo(navigationState); super.navigateTo(navigationState);
} }
@ -143,4 +151,9 @@ public class ClubhelperNavigation {
navigateTo(navigationViewNames.pop().name()); navigateTo(navigationViewNames.pop().name());
} }
} }
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
} }

@ -3,6 +3,8 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.navigation;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.function.Function; import java.util.function.Function;
import org.springframework.context.ApplicationContext;
import com.vaadin.ui.Component; import com.vaadin.ui.Component;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.security.SecurityVerifier; import de.kreth.vaadin.clubhelper.vaadinclubhelper.security.SecurityVerifier;
@ -13,10 +15,11 @@ public class DesktopHeadView extends HeadView {
private static final long serialVersionUID = 1596573215389558000L; private static final long serialVersionUID = 1596573215389558000L;
public DesktopHeadView(ClubNavigator navigator, Function<Component, ZonedDateTime> startTime, public DesktopHeadView(ApplicationContext context, ClubNavigator navigator,
Function<Component, ZonedDateTime> startTime,
Function<Component, ZonedDateTime> endTime, ClubEventProvider dataProvider, Function<Component, ZonedDateTime> endTime, ClubEventProvider dataProvider,
SecurityVerifier securityVerifier) { SecurityVerifier securityVerifier) {
super(navigator, startTime, endTime, dataProvider, securityVerifier); super(context, navigator, startTime, endTime, dataProvider, securityVerifier);
} }

@ -1,8 +1,12 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.navigation; package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.navigation;
import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.PipedInputStream; import java.io.PipedInputStream;
import java.io.PipedOutputStream; import java.io.PipedOutputStream;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@ -13,15 +17,16 @@ import java.util.Map;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import com.vaadin.contextmenu.ContextMenu; import com.vaadin.contextmenu.ContextMenu;
import com.vaadin.data.provider.Query;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.server.FileDownloader;
import com.vaadin.server.StreamResource; import com.vaadin.server.StreamResource;
import com.vaadin.ui.AbstractComponent; import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.Alignment; import com.vaadin.ui.Alignment;
@ -36,6 +41,7 @@ import com.vaadin.ui.Notification;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window; import com.vaadin.ui.Window;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.CsvExporter;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.EventBusiness; import de.kreth.vaadin.clubhelper.vaadinclubhelper.business.EventBusiness;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
@ -49,11 +55,7 @@ import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperPrint;
public class HeadView extends HorizontalLayout implements ApplicationContextAware { public class HeadView extends HorizontalLayout {
private static final long serialVersionUID = -7915475211371903028L;
private static ApplicationContext context;
protected transient final Logger log = LoggerFactory.getLogger(getClass()); protected transient final Logger log = LoggerFactory.getLogger(getClass());
@ -75,10 +77,13 @@ public class HeadView extends HorizontalLayout implements ApplicationContextAwar
private final SecurityVerifier securityVerifier; private final SecurityVerifier securityVerifier;
public HeadView(ClubNavigator navigator, Function<Component, ZonedDateTime> startTime, private ApplicationContext context;
public HeadView(ApplicationContext context, ClubNavigator navigator, Function<Component, ZonedDateTime> startTime,
Function<Component, ZonedDateTime> endTime, ClubEventProvider dataProvider, Function<Component, ZonedDateTime> endTime, ClubEventProvider dataProvider,
SecurityVerifier securityVerifier) { SecurityVerifier securityVerifier) {
this.context = context;
this.navigator = navigator; this.navigator = navigator;
this.securityVerifier = securityVerifier; this.securityVerifier = securityVerifier;
this.startTime = startTime; this.startTime = startTime;
@ -163,10 +168,18 @@ public class HeadView extends HorizontalLayout implements ApplicationContextAwar
private void calendarCsv(Button button, MenuItem ev1) { private void calendarCsv(Button button, MenuItem ev1) {
EventBusiness eventBusiness = context.getBean(EventBusiness.class); EventBusiness eventBusiness = context.getBean(EventBusiness.class);
EventGrid grid = new EventGrid(eventBusiness); EventGrid grid = new EventGrid(eventBusiness, true);
HorizontalLayout head = new HorizontalLayout();
Button downloadButton = new Button("Download", VaadinIcons.DOWNLOAD);
FileDownloader downloader = new FileDownloader(csvDownload(grid));
downloader.extend(downloadButton);
head.addComponents(new Label("Veranstaltungen"), downloadButton);
VerticalLayout layout = new VerticalLayout(); VerticalLayout layout = new VerticalLayout();
layout.addComponents(grid); layout.addComponents(head, grid);
Window window = new Window(); Window window = new Window();
window.setCaption("Veranstaltungen"); window.setCaption("Veranstaltungen");
@ -178,6 +191,29 @@ public class HeadView extends HorizontalLayout implements ApplicationContextAwar
button.getUI().addWindow(window); button.getUI().addWindow(window);
} }
private StreamResource csvDownload(EventGrid grid) {
List<ClubEvent> items = grid.getDataProvider()
.fetch(new Query<>())
.collect(Collectors.toList());
CsvExporter exporter = new CsvExporter();
StringWriter writer = new StringWriter();
try {
exporter.export(items, writer);
}
catch (IOException e) {
Notification.show("Fehler beim Erzeugen der Veranstaltungen");
throw new RuntimeException(e);
}
InputStream in = new ByteArrayInputStream(writer.toString().getBytes(StandardCharsets.UTF_8));
final StreamResource resource = new StreamResource(() -> in, "Veranstaltungen.csv");
resource.setMIMEType("application/pdf");
return resource;
}
private void calendarExport(Button source, MenuItem ev1) { private void calendarExport(Button source, MenuItem ev1) {
boolean monthOnly = ev1.getId() == monthItemId; boolean monthOnly = ev1.getId() == monthItemId;
@ -296,9 +332,4 @@ public class HeadView extends HorizontalLayout implements ApplicationContextAwar
return c; return c;
} }
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
HeadView.context = applicationContext;
}
} }

@ -4,6 +4,7 @@ import java.util.List;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import org.springframework.context.ApplicationContext;
import org.vaadin.addon.calendar.ui.CalendarComponentEvents; import org.vaadin.addon.calendar.ui.CalendarComponentEvents;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
@ -37,9 +38,13 @@ public class MainViewDesktop extends MainView {
private DesktopHeadView head; private DesktopHeadView head;
public MainViewDesktop(PersonDao personDao, GroupDao groupDao, EventBusiness eventBusiness, private ApplicationContext context;
public MainViewDesktop(ApplicationContext context, PersonDao personDao, GroupDao groupDao,
EventBusiness eventBusiness,
SecurityVerifier securityGroupVerifier) { SecurityVerifier securityGroupVerifier) {
super(personDao, groupDao, eventBusiness, securityGroupVerifier); super(personDao, groupDao, eventBusiness, securityGroupVerifier);
this.context = context;
} }
@Override @Override
@ -52,7 +57,8 @@ public class MainViewDesktop extends MainView {
calendar.setId("main.calendar"); calendar.setId("main.calendar");
calendar.setHandler(this::onItemClick); calendar.setHandler(this::onItemClick);
head = new DesktopHeadView(navigator, component -> calendar.getStartDate(), component -> calendar.getEndDate(), head = new DesktopHeadView(context, navigator, component -> calendar.getStartDate(),
component -> calendar.getEndDate(),
dataProvider, securityVerifier); dataProvider, securityVerifier);
head.setWidth("100%"); head.setWidth("100%");
head.updateMonthText(calendar.getStartDate()); head.updateMonthText(calendar.getStartDate());

@ -8,6 +8,7 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import org.basilbourque.timecolumnrenderers.ZonedDateTimeRenderer; import org.basilbourque.timecolumnrenderers.ZonedDateTimeRenderer;
import org.springframework.context.ApplicationContext;
import com.vaadin.data.provider.ConfigurableFilterDataProvider; import com.vaadin.data.provider.ConfigurableFilterDataProvider;
import com.vaadin.data.provider.DataProvider; import com.vaadin.data.provider.DataProvider;
@ -31,11 +32,6 @@ import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.CalendarCompone
public class MainViewMobile extends MainView { public class MainViewMobile extends MainView {
/**
*
*/
private static final long serialVersionUID = -3293470536470926668L;
private Grid<ClubEvent> eventGrid; private Grid<ClubEvent> eventGrid;
private HeadView head; private HeadView head;
@ -44,9 +40,13 @@ public class MainViewMobile extends MainView {
ConfigurableFilterDataProvider<ClubEvent, Void, SerializablePredicate<ClubEvent>> eventDataProvider; ConfigurableFilterDataProvider<ClubEvent, Void, SerializablePredicate<ClubEvent>> eventDataProvider;
public MainViewMobile(PersonDao personDao, GroupDao groupDao, EventBusiness eventBusiness, private ApplicationContext context;
public MainViewMobile(ApplicationContext context, PersonDao personDao, GroupDao groupDao,
EventBusiness eventBusiness,
SecurityVerifier securityGroupVerifier) { SecurityVerifier securityGroupVerifier) {
super(personDao, groupDao, eventBusiness, securityGroupVerifier); super(personDao, groupDao, eventBusiness, securityGroupVerifier);
this.context = context;
} }
@Override @Override
@ -57,7 +57,7 @@ public class MainViewMobile extends MainView {
return; return;
} }
head = new HeadView(navigator, component -> showDateTimeDialog(component, "Startdatum"), head = new HeadView(context, navigator, component -> showDateTimeDialog(component, "Startdatum"),
component -> showDateTimeDialog(component, "Endedatum"), new ClubEventProvider(), securityVerifier); component -> showDateTimeDialog(component, "Endedatum"), new ClubEventProvider(), securityVerifier);
head.setWidth("100%"); head.setWidth("100%");
head.updateLoggedinPerson(); head.updateLoggedinPerson();

@ -15,6 +15,7 @@ import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
@ -36,6 +37,9 @@ import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.SingleEventView
@Tag("spring") @Tag("spring")
public class MainViewDesktopSmokeTest { public class MainViewDesktopSmokeTest {
@Autowired
ApplicationContext context;
@Autowired @Autowired
PersonDao personDao; PersonDao personDao;
@ -56,7 +60,7 @@ public class MainViewDesktopSmokeTest {
@BeforeEach @BeforeEach
void initUi() { void initUi() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mainView = new MainViewDesktop(personDao, groupDao, eventBusiness, securityGroupVerifier); mainView = new MainViewDesktop(context, personDao, groupDao, eventBusiness, securityGroupVerifier);
mainView.initUI(event); mainView.initUI(event);
} }

@ -18,6 +18,7 @@ import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
@ -45,6 +46,9 @@ import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.tests.TestConfiguration;
@Disabled @Disabled
public class MainViewMobileSmokeTest { public class MainViewMobileSmokeTest {
@Autowired
ApplicationContext context;
@Autowired @Autowired
PersonDao personDao; PersonDao personDao;
@ -70,7 +74,7 @@ public class MainViewMobileSmokeTest {
person.setGroups(new HashSet<GroupDef>(Arrays.asList(g1))); person.setGroups(new HashSet<GroupDef>(Arrays.asList(g1)));
securityGroupVerifier = new SecurityVerifierImpl(); securityGroupVerifier = new SecurityVerifierImpl();
assertFalse(securityGroupVerifier.isLoggedin()); assertFalse(securityGroupVerifier.isLoggedin());
mainView = new MainViewMobile(personDao, groupDao, eventBusiness, securityGroupVerifier); mainView = new MainViewMobile(context, personDao, groupDao, eventBusiness, securityGroupVerifier);
assertNotNull(securityGroupVerifier); assertNotNull(securityGroupVerifier);
assertNotNull(person); assertNotNull(person);

Loading…
Cancel
Save