diff --git a/pom.xml b/pom.xml
index 9bbdb02..b7f4575 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,6 +61,11 @@
org.springframework.boot
spring-boot-starter-web
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+ provided
+
com.vaadin
vaadin-spring-boot-starter
diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarComponent.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarComponent.java
index 5a6242c..944e491 100644
--- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarComponent.java
+++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarComponent.java
@@ -3,19 +3,16 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
+import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.time.temporal.TemporalUnit;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -50,7 +47,7 @@ import net.sf.jasperreports.engine.JasperPrint;
public class CalendarComponent extends CustomComponent {
private static final long serialVersionUID = -9152173211931554059L;
- private transient final Logger log = LoggerFactory.getLogger(getClass());
+ private transient final Logger log = LoggerFactory.getLogger(getClass());
private transient DateTimeFormatter dfMonth = DateTimeFormatter.ofPattern("MMMM uuuu");
@@ -66,12 +63,11 @@ public class CalendarComponent extends CustomComponent {
Button popupButton = new Button("Menu");
popupButton.addClickListener(ev -> openPopupMenu(ev));
-
+
HorizontalLayout head = new HorizontalLayout(monthName, popupButton);
-
+
dataProvider = new ClubEventProvider();
- calendar = new Calendar<>(dataProvider)
- .withMonth(Month.from(LocalDateTime.now()));
+ calendar = new Calendar<>(dataProvider).withMonth(Month.from(LocalDateTime.now()));
calendar.setCaption("Events");
calendar.setSizeFull();
calendar.addListener(ev -> calendarEvent(ev));
@@ -96,61 +92,76 @@ public class CalendarComponent extends CustomComponent {
private void openPopupMenu(ClickEvent ev) {
ContextMenu contextMenu = new ContextMenu(ev.getButton(), true);
- contextMenu.addItem("Export", ev1 -> calendarExport(ev1));
+ contextMenu.addItem("Export Monat", ev1 -> calendarExport(ev1));
+ contextMenu.addItem("Export Jahr", ev1 -> calendarExport(ev1));
contextMenu.open(210, 40);
}
private void calendarExport(MenuItem ev1) {
- ZonedDateTime start = calendar.getStartDate();
- ZonedDateTime end = calendar.getEndDate();
- log.debug("exporting Calendar from {} to {}", start, end);
- List items = dataProvider.getItems(start, end);
- Map values = new HashMap<>();
- Set holidays = new HashSet<>();
-
+ boolean monthOnly = ev1.getText().contains("Monat");
+ List items;
+ ZonedDateTime start;
+ if (monthOnly) {
+ start = calendar.getStartDate();
+ ZonedDateTime end = calendar.getEndDate();
+ log.debug("exporting Calendar from {} to {}", start, end);
+ items = dataProvider.getItems(start, end);
+ } else {
+
+ start = calendar.getStartDate().withDayOfYear(1);
+ ZonedDateTime end = start.withMonth(12).withDayOfMonth(31);
+ log.debug("exporting Calendar from {} to {}", start, end);
+ items = dataProvider.getItems(start, end);
+ }
+
+ Map values = new HashMap<>();
+ List holidays = CalendarCreator.filterHolidays(items);
+
for (ClubEvent ev : items) {
- String calendarName = ev.getOrganizerDisplayName();
- if ("Schulferien".equals(calendarName)) {
- log.trace("Added to holiday List: {}", ev);
- TemporalUnit unit = ChronoUnit.DAYS;
- int durationDays = (int) ev.getStart().until(ev.getEnd(), unit) + 1;
- for (int dayOfMonth = ev.getStart().getDayOfMonth(), endDay=dayOfMonth + durationDays; dayOfMonth<=endDay; dayOfMonth++) {
- holidays.add(dayOfMonth);
- }
- } else {
- log.trace("Added to eventsd: {}", ev);
- StringBuilder content;
+ ZonedDateTime evStart = ev.getStart();
+ ZonedDateTime evEnd = ev.getEnd();
+
+ log.trace("Added to eventsd: {}", ev);
- int dayOfMonth = ev.getStart().getDayOfMonth();
- int endDayOfMonth = ev.getEnd().getDayOfMonth();
- for (;dayOfMonth<=endDayOfMonth; dayOfMonth++) {
-
- if (values.containsKey(dayOfMonth)) {
- content = values.get(dayOfMonth);
- content.append("\n");
- } else {
- content = new StringBuilder();
- values.put(dayOfMonth, content);
- }
- content.append(ev.getCaption());
+ CalendarCreator.iterateDays(evStart.toLocalDate(), evEnd.toLocalDate(), day -> {
+
+ StringBuilder content;
+ if (values.containsKey(day)) {
+ content = values.get(day);
+ content.append("\n");
+ } else {
+ content = new StringBuilder();
+ values.put(day, content);
}
- }
+ content.append(ev.getCaption());
+ });
+ }
+
+ String calendarMonth;
+ if (monthOnly) {
+ calendarMonth = dfMonth.format(start);
+ } else {
+ calendarMonth = "Jahr " + start.getYear();
}
- String calendarMonth = dfMonth.format(start);
try {
- JasperPrint print = CalendarCreator.createCalendar(new Date(start.toInstant().toEpochMilli()), values, holidays);
+ JasperPrint print;
+ if (monthOnly) {
+ print = CalendarCreator.createCalendar(new Date(start.toInstant().toEpochMilli()), values, holidays);
+ } else {
+ print = CalendarCreator.createYearCalendar(start.getYear(), values, holidays);
+ }
log.trace("Created Jasper print for {}", calendarMonth);
- Window window = new Window();
- window.setCaption("View PDF");
+ Window window = new Window();
+ window.setCaption("View PDF");
AbstractComponent e = createEmbedded(calendarMonth, print);
- window.setContent(e);
- window.setModal(true);
- window.setWidth("50%");
- window.setHeight("90%");
- monthName.getUI().addWindow(window);
+ window.setContent(e);
+ window.setModal(true);
+ window.setWidth("50%");
+ window.setHeight("90%");
+ monthName.getUI().addWindow(window);
log.trace("Added pdf window for {}", calendarMonth);
} catch (JRException e) {
log.error("Error Creating Jasper Report for {}", calendarMonth, e);
@@ -167,22 +178,22 @@ public class CalendarComponent extends CustomComponent {
final PipedOutputStream out = new PipedOutputStream(in);
final StreamResource resource = new StreamResource(() -> in, title);
- resource.setMIMEType("application/pdf");
-
+ resource.setMIMEType("application/pdf");
+
BrowserFrame c = new BrowserFrame("PDF invoice", resource);
- c.setSizeFull();
-
- ExecutorService exec = Executors.newSingleThreadExecutor();
- exec.execute(() -> {
- try {
+ c.setSizeFull();
+
+ ExecutorService exec = Executors.newSingleThreadExecutor();
+ exec.execute(() -> {
+ try {
JasperExportManager.exportReportToPdfStream(print, out);
} catch (JRException e) {
log.error("Error on Export to Pdf.", e);
throw new RuntimeException(e);
}
- });
- exec.shutdown();
- return c;
+ });
+ exec.shutdown();
+ return c;
}
private void updateMonthText(ZonedDateTime startDate) {
diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarCreator.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarCreator.java
index 6a108f0..28e9bb5 100644
--- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarCreator.java
+++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarCreator.java
@@ -13,6 +13,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.function.Consumer;
import java.util.stream.Collectors;
import org.hibernate.Session;
@@ -51,14 +52,16 @@ public abstract class CalendarCreator {
.setHolidays(Collections.emptyList()).createCalendar();
}
- public static JasperPrint createCalendar(Date date, Map values,
- Collection holidays) throws JRException {
- return new MonthlyCalendarCreator(date).setValues(values).setHolidays(holidays).createCalendar();
+ public static JasperPrint createCalendar(Date date, Map values,
+ Collection holidays) throws JRException {
+ return new MonthlyCalendarCreator(date).setValues(values)
+ .setHolidays(holidays.stream().map(h -> h.getDayOfMonth()).collect(Collectors.toList()))
+ .createCalendar();
}
@SuppressWarnings("unchecked")
- public static JasperPrint createCalendar(int year, Map values,
- List holidays) throws JRException {
+ public static JasperPrint createYearCalendar(int year, Map values,
+ Collection holidays) throws JRException {
return new YearlyCalendarCreator(year, (Map) values, holidays).createCalendar();
}
@@ -91,12 +94,12 @@ public abstract class CalendarCreator {
Map values = map(allevents, year);
- JasperViewer v1 = new JasperViewer(createCalendar(year, values, holidays));
+ JasperViewer v1 = new JasperViewer(createYearCalendar(year, values, holidays));
v1.setVisible(true);
}
- private static List filterHolidays(List allevents) {
+ public static List filterHolidays(List allevents) {
List holidays = new ArrayList<>();
Iterator iter = allevents.iterator();
while (iter.hasNext()) {
@@ -105,16 +108,20 @@ public abstract class CalendarCreator {
iter.remove();
LocalDate start = item.getStart().toLocalDate();
LocalDate end = item.getEnd().toLocalDate();
- while (end.isAfter(start) || end.isEqual(start)) {
- holidays.add(start);
- start = start.plusDays(1);
- }
+ iterateDays(start, end, d -> holidays.add(d));
}
}
return holidays;
}
+ public static void iterateDays(LocalDate start, LocalDate end, Consumer consumer) {
+ while (end.isAfter(start) || end.isEqual(start)) {
+ consumer.accept(start);
+ start = start.plusDays(1);
+ }
+ }
+
protected static Map map(List allevents, int year) {
Map values = new HashMap<>();
allevents.forEach(ev -> {
diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/MonthlyCalendarCreator.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/MonthlyCalendarCreator.java
index bb70feb..d927153 100644
--- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/MonthlyCalendarCreator.java
+++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/MonthlyCalendarCreator.java
@@ -2,6 +2,7 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.io.InputStream;
import java.sql.Timestamp;
+import java.time.LocalDate;
import java.time.YearMonth;
import java.time.ZoneId;
import java.util.Collection;
@@ -13,15 +14,15 @@ import net.sf.jasperreports.engine.JRDataSource;
public class MonthlyCalendarCreator extends CalendarCreator {
private final YearMonth yearMonthObject;
- private Map values;
+ private Map values;
private Collection holidays;
public MonthlyCalendarCreator(Date date) {
this.yearMonthObject = YearMonth.from(date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
}
- public MonthlyCalendarCreator setValues(Map values) {
- this.values = values;
+ public MonthlyCalendarCreator setValues(Map values2) {
+ this.values = values2;
return this;
}
@@ -46,7 +47,7 @@ public class MonthlyCalendarCreator extends CalendarCrea
@Override
protected JRDataSource getSource() {
- return new MonthlyCalendarSource<>(yearMonthObject, values, holidays);
+ return new MonthlyCalendarSource<>(yearMonthObject, MonthlyCalendarSource.map(values), holidays);
}
}
\ No newline at end of file
diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/MonthlyCalendarSource.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/MonthlyCalendarSource.java
index bbd2f24..c01edef 100644
--- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/MonthlyCalendarSource.java
+++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/MonthlyCalendarSource.java
@@ -1,5 +1,6 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
+import java.time.LocalDate;
import java.time.YearMonth;
import java.util.ArrayList;
import java.util.Arrays;
@@ -7,6 +8,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
@@ -19,25 +21,38 @@ public class MonthlyCalendarSource implements JRDataSour
private int index = -1;
private int prefix;
private final Collection holidays;
-
+
public MonthlyCalendarSource(YearMonth yearMonthObject, Map dayContent, Collection holidays) {
days = new ArrayList<>();
this.dayContent = dayContent;
this.holidays = holidays;
- prefix = yearMonthObject.atDay(1).getDayOfWeek().getValue() -1;
+ prefix = yearMonthObject.atDay(1).getDayOfWeek().getValue() - 1;
int daysInMonth = yearMonthObject.lengthOfMonth();
-
- for (int i=0, limit = daysInMonth + prefix; i dayContent,
+// Collection holidays) {
+// this(yearMonthObject, map(dayContent), holidays);
+// }
+
+ public static Map map(Map dayContent) {
+ Map values = new HashMap<>();
+ for (Entry entry : dayContent.entrySet()) {
+ values.put(entry.getKey().getDayOfMonth(), entry.getValue());
}
-
+ return values;
}
@Override
public boolean next() throws JRException {
- if (index+1>=days.size()) {
+ if (index + 1 >= days.size()) {
return false;
}
index++;
@@ -52,7 +67,7 @@ public class MonthlyCalendarSource implements JRDataSour
case "Field_Value":
T content = dayContent.get(index - prefix);
- if (content != null && days.get(index)>0) {
+ if (content != null && days.get(index) > 0) {
return content.toString();
} else {
return "";
@@ -63,14 +78,14 @@ public class MonthlyCalendarSource implements JRDataSour
return "";
}
}
-
+
public static MonthlyCalendarSource createTestSource() {
Map values = new HashMap<>();
- for (int i=1; i<30;i+=3) {
+ for (int i = 1; i < 30; i += 3) {
values.put(i, String.format("Termin am %s.", i));
}
-
- List holi = Arrays.asList(2,3,4,5,6);
- return new MonthlyCalendarSource<>(YearMonth.now(), values, holi );
+
+ List holi = Arrays.asList(2, 3, 4, 5, 6);
+ return new MonthlyCalendarSource<>(YearMonth.now(), values, holi);
}
}
\ No newline at end of file
diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/YearlyCalendarCreator.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/YearlyCalendarCreator.java
index 61b943b..d33609f 100644
--- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/YearlyCalendarCreator.java
+++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/YearlyCalendarCreator.java
@@ -3,9 +3,9 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.io.InputStream;
import java.time.LocalDate;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.calendar.Year;
@@ -21,7 +21,7 @@ public class YearlyCalendarCreator extends CalendarCreator {
this(year, values, Collections.emptyList());
}
- public YearlyCalendarCreator(int year, Map values, List holidays) {
+ public YearlyCalendarCreator(int year, Map values, Collection holidays) {
if (values == null) {
throw new NullPointerException("Calendar values must not be null!");
}
diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/calendar/Year.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/calendar/Year.java
index d24f308..f67681e 100644
--- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/calendar/Year.java
+++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/calendar/Year.java
@@ -4,10 +4,10 @@ import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.format.TextStyle;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -24,11 +24,11 @@ public class Year {
this(year, Collections.emptyMap(), Collections.emptyList(), Locale.getDefault());
}
- public Year(int year, Map values, List holidays) {
+ public Year(int year, Map values, Collection holidays) {
this(year, values, holidays, Locale.getDefault());
}
- public Year(int year, Map values, List holidays, Locale locale) {
+ public Year(int year, Map values, Collection holidays, Locale locale) {
if (year < 1900 || year > 2100) {
throw new IllegalArgumentException("Year value must be between 1900 and 2100");
}
diff --git a/src/main/resources/simplelogger.properties b/src/main/resources/simplelogger.properties
index 7f6fa4e..7feccb4 100644
--- a/src/main/resources/simplelogger.properties
+++ b/src/main/resources/simplelogger.properties
@@ -1,4 +1,4 @@
-org.slf4j.simpleLogger.defaultLogLevel = trace
+org.slf4j.simpleLogger.defaultLogLevel = warn
log4j.logger.de.kreth.vaadin.clubhelper=trace
log4j.logger.org.hibernate.type=warn
log4j.logger.org.jboss.logging=warn
\ No newline at end of file