diff --git a/.classpath b/.classpath
index 9bc1b29..a25dc2c 100644
--- a/.classpath
+++ b/.classpath
@@ -28,7 +28,6 @@
-
diff --git a/pom.xml b/pom.xml
index 1cf8b6f..b3e22e5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -102,6 +102,18 @@
mysql
mysql-connector-java
+
+ com.google.gwt
+ gwt-elemental
+ 2.8.2
+
+
+ com.google.gwt
+ gwt-user
+ 2.8.2
+ provided
+
+
commons-io
diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/CsvExporter.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/CsvExporter.java
index 5bfae4e..e71d372 100644
--- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/CsvExporter.java
+++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/CsvExporter.java
@@ -1,17 +1,55 @@
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.CSVPrinter;
+
+import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent;
+import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
public class CsvExporter {
+ private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
+
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 = { 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(',')
.withHeader(HEAD);
+
+ public void export(List 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());
+ }
+ }
}
diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/GroupDef.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/GroupDef.java
index eb92bed..eab4e09 100644
--- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/GroupDef.java
+++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/GroupDef.java
@@ -57,7 +57,6 @@ public class GroupDef extends BaseEntity implements Serializable {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((name == null) ? 0 : name.hashCode());
- result = prime * result + ((persongroups == null) ? 0 : persongroups.hashCode());
return result;
}
@@ -81,14 +80,6 @@ public class GroupDef extends BaseEntity implements Serializable {
else if (!name.equals(other.name)) {
return false;
}
- if (persongroups == null) {
- if (other.persongroups != null) {
- return false;
- }
- }
- else if (!persongroups.equals(other.persongroups)) {
- return false;
- }
return true;
}
diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/EventGrid.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/EventGrid.java
index cbf5c57..f835169 100644
--- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/EventGrid.java
+++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/EventGrid.java
@@ -3,42 +3,43 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
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.DataProvider;
import com.vaadin.server.SerializablePredicate;
import com.vaadin.ui.Grid;
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.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 {
- private static final long serialVersionUID = -5435770187868470290L;
-
- private final transient DateTimeFormatter df = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
-
private ConfigurableFilterDataProvider> eventDataProvider;
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;
- setCaption("Veranstaltungen");
setSizeFull();
setSelectionMode(SelectionMode.NONE);
- addColumn(ClubEvent::getStart, dt -> {
- return dt != null ? df.format(dt) : "";
- }).setCaption("Start");
addComponentColumn(ev -> {
Label l = new Label();
@@ -48,10 +49,13 @@ public class EventGrid extends Grid {
return l;
}).setSortable(true).setHidable(false);
addColumn(ClubEvent::getStart).setCaption("Start")
- .setRenderer(new ZonedDateTimeRenderer(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)))
+ .setRenderer(new TestRenderer(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)))
.setSortable(true).setHidable(true);
addColumn(ClubEvent::getCaption).setCaption("Bezeichnung");
addColumn(ClubEvent::getLocation).setCaption("Ort");
+ if (withCompetitors) {
+// addColumn(ClubEvent::getPersons).setCaption("Teilnehmer").setRenderer(createRenderer());
+ }
List loadEvents = business.loadEvents();
@@ -61,6 +65,46 @@ public class EventGrid extends Grid {
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> createRenderer() {
+ return new PersonSetRenderer();
+ }
+
+ private static final Set set = new HashSet<>();
+
+ class PersonSetRenderer extends AbstractRenderer