From 2f6cdf1398be88d5bf85a86fb32362b31f67fbd1 Mon Sep 17 00:00:00 2001 From: Markus Kreth Date: Sat, 3 Nov 2018 01:11:34 +0100 Subject: [PATCH] Holidays just colored. --- .settings/org.eclipse.core.resources.prefs | 1 + .../ui/components/CalendarComponent.java | 46 +++++++---- .../ui/components/CalendarCreator.java | 73 +++--------------- .../ui/components/CalendarSource.java | 76 +++++++++++++++++++ .../resources/jasper/calendar_month.jrxml | 25 +++--- 5 files changed, 135 insertions(+), 86 deletions(-) create mode 100644 src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarSource.java diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 19a8b35..c3edd86 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,6 +1,7 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 encoding//src/main/resources=UTF-8 +encoding//src/main/resources/jasper/calendar_month.jrxml=UTF-8 encoding//src/test/java=UTF-8 encoding//src/test/resources=UTF-8 encoding//target/generated-resources/gwt=UTF-8 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 99f71aa..68e4946 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 @@ -10,8 +10,10 @@ import java.time.format.DateTimeFormatter; 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; @@ -100,31 +102,43 @@ public class CalendarComponent extends CustomComponent { 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<>(); for (ClubEvent ev : items) { - StringBuilder content; - 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); + + String calendarName = ev.getOrganizerDisplayName(); + if ("Schulferien".equals(calendarName)) { + int endDayOfMonth = ev.getEnd().getDayOfMonth(); + for (int dayOfMonth = ev.getStart().getDayOfMonth(); dayOfMonth<=endDayOfMonth; dayOfMonth++) { + holidays.add(dayOfMonth); + } + } else { + StringBuilder content; + + 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()); } - content.append(ev.getCaption()); } } try { - JasperPrint print = CalendarCreator.createCalendar(new Date(start.toInstant().toEpochMilli()), values); + JasperPrint print = CalendarCreator.createCalendar(new Date(start.toInstant().toEpochMilli()), values, holidays); Window window = new Window(); window.setCaption("View PDF"); - AbstractComponent e = createEmbedded(print); + AbstractComponent e = createEmbedded(dfMonth.format(start), print); window.setContent(e); window.setModal(true); window.setWidth("50%"); @@ -139,12 +153,12 @@ public class CalendarComponent extends CustomComponent { } } - private AbstractComponent createEmbedded(JasperPrint print) throws IOException, JRException { + private AbstractComponent createEmbedded(String title, JasperPrint print) throws IOException, JRException { PipedInputStream in = new PipedInputStream(); final PipedOutputStream out = new PipedOutputStream(in); - final StreamResource resource = new StreamResource(() -> in, "invoice.pdf"); + final StreamResource resource = new StreamResource(() -> in, title); resource.setMIMEType("application/pdf"); BrowserFrame c = new BrowserFrame("PDF invoice", resource); 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 6fab551..8573a9d 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 @@ -4,19 +4,17 @@ import java.io.InputStream; import java.sql.Timestamp; import java.time.YearMonth; import java.time.ZoneId; -import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; -import java.util.List; import java.util.Locale; import java.util.Map; -import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; -import net.sf.jasperreports.engine.JRField; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; @@ -28,11 +26,11 @@ public class CalendarCreator { private final YearMonth yearMonthObject; public static JasperPrint createCalendar(Date date) throws JRException { - return new CalendarCreator(date).createCalendar(Collections.emptyMap()); + return new CalendarCreator(date).createCalendar(Collections.emptyMap(), Collections.emptyList()); } - public static JasperPrint createCalendar(Date date, Map values) throws JRException { - return new CalendarCreator(date).createCalendar(values); + public static JasperPrint createCalendar(Date date, Map values, Collection holidays) throws JRException { + return new CalendarCreator(date).createCalendar(values, holidays); } CalendarCreator(Date date) { @@ -44,7 +42,7 @@ public class CalendarCreator { } - JasperPrint createCalendar(Map values) throws JRException { + JasperPrint createCalendar(Map values, Collection holidays) throws JRException { Map parameters = new HashMap<>(); Timestamp timestamp = new Timestamp(yearMonthObject.atDay(1).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); @@ -56,69 +54,22 @@ public class CalendarCreator { .compileReport(jrxmlResource); JasperPrint print = JasperFillManager.fillReport(report, - parameters, new CalendarSource<>(yearMonthObject, values)); + parameters, new CalendarSource<>(yearMonthObject, values, holidays)); return print; } - private static class CalendarSource implements JRDataSource { - - private final List days; - private final Map dayContent; - private int index = -1; - private int prefix; - - public CalendarSource(YearMonth yearMonthObject, Map dayContent) { - - days = new ArrayList<>(); - this.dayContent = dayContent; - prefix = yearMonthObject.atDay(1).getDayOfWeek().getValue() -1; - int daysInMonth = yearMonthObject.lengthOfMonth(); - - for (int i=0, limit = daysInMonth + prefix; i=days.size()) { - return false; - } - index++; - return true; - } - - @Override - public Object getFieldValue(JRField jrField) throws JRException { - if (jrField.getName().equals("id")) { - return days.get(index); - } else if (jrField.getName().equals("Field_Value") && days.get(index)>0) { - T content = dayContent.get(index - prefix); - if (content != null) { - return content.toString(); - } else { - return ""; - } - } else { - return ""; - } - } - - } - public static void main(String[] args) throws JRException { Locale.setDefault(Locale.GERMANY); - Calendar cal = new GregorianCalendar(2018, Calendar.OCTOBER, 1); - JasperViewer v1 = new JasperViewer(createCalendar(cal.getTime())); + Calendar cal = new GregorianCalendar(2018, Calendar.AUGUST, 1); + JasperViewer v1 = new JasperViewer(createCalendar(cal.getTime(), Collections.emptyMap(), Arrays.asList(2,3,4,5,6))); v1.setVisible(true); - cal = new GregorianCalendar(2018, Calendar.FEBRUARY, 1); - JasperViewer v3 = new JasperViewer(createCalendar(cal.getTime())); - v3.setVisible(true); +// cal = new GregorianCalendar(2018, Calendar.FEBRUARY, 1); +// JasperViewer v3 = new JasperViewer(createCalendar(cal.getTime())); +// v3.setVisible(true); } /** diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarSource.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarSource.java new file mode 100644 index 0000000..fff5505 --- /dev/null +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/CalendarSource.java @@ -0,0 +1,76 @@ +package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components; + +import java.time.YearMonth; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.sf.jasperreports.engine.JRDataSource; +import net.sf.jasperreports.engine.JRException; +import net.sf.jasperreports.engine.JRField; + +public class CalendarSource implements JRDataSource { + + private final List days; + private final Map dayContent; + private int index = -1; + private int prefix; + private final Collection holidays; + + public CalendarSource(YearMonth yearMonthObject, Map dayContent, Collection holidays) { + + days = new ArrayList<>(); + this.dayContent = dayContent; + this.holidays = holidays; + prefix = yearMonthObject.atDay(1).getDayOfWeek().getValue() -1; + int daysInMonth = yearMonthObject.lengthOfMonth(); + + for (int i=0, limit = daysInMonth + prefix; i=days.size()) { + return false; + } + index++; + return true; + } + + @Override + public Object getFieldValue(JRField jrField) throws JRException { + switch (jrField.getName()) { + case "id": + return days.get(index); + + case "Field_Value": + T content = dayContent.get(index - prefix); + if (content != null && days.get(index)>0) { + return content.toString(); + } else { + return ""; + } + case "IsHoliday": + return holidays.contains(index); + default: + return ""; + } + } + + public static CalendarSource createTestSource() { + Map values = new HashMap<>(); + 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 CalendarSource<>(YearMonth.now(), values, holi ); + } +} \ No newline at end of file diff --git a/src/main/resources/jasper/calendar_month.jrxml b/src/main/resources/jasper/calendar_month.jrxml index 4187981..3788c92 100644 --- a/src/main/resources/jasper/calendar_month.jrxml +++ b/src/main/resources/jasper/calendar_month.jrxml @@ -2,13 +2,17 @@ - + - @@ -36,6 +40,9 @@ + + + @@ -163,14 +170,8 @@ - - - - - - - + 0&&$V{Date}.intValue()<=$P{Days}.intValue()]]> @@ -189,6 +190,12 @@ 0&&$V{Date}.intValue()<=$P{Days}.intValue()]]> + + + + + +