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