export txt, ics
This commit is contained in:
@@ -20,4 +20,8 @@ public class CommonExtensions {
|
||||
public static int plus(int a, int b) {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
public static String rightPad(String str, int length) {
|
||||
return String.format("%1$-" + length + "s", str);
|
||||
}
|
||||
}
|
||||
|
||||
35
src/main/java/de/mbremer/kalender/Event.java
Normal file
35
src/main/java/de/mbremer/kalender/Event.java
Normal file
@@ -0,0 +1,35 @@
|
||||
package de.mbremer.kalender;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.UUID;
|
||||
|
||||
@Getter
|
||||
public class Event {
|
||||
private final String created;
|
||||
private final String dtStart;
|
||||
private final String dtEnd;
|
||||
private final String uid;
|
||||
|
||||
public Event(@NotNull LocalDateTime created, LocalDate date) {
|
||||
this.created = created.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
|
||||
.replaceAll("[-:]", "") + "Z";
|
||||
this.dtStart = date.format(DateTimeFormatter.ISO_LOCAL_DATE)
|
||||
.replace("-", "");
|
||||
this.dtEnd = date.plusDays(1).format(DateTimeFormatter.ISO_LOCAL_DATE)
|
||||
.replace("-", "");
|
||||
this.uid = UUID.randomUUID().toString() + "@buerokalender";
|
||||
}
|
||||
|
||||
public String getLastModified() {
|
||||
return created;
|
||||
}
|
||||
|
||||
public String getDtStamp() {
|
||||
return created;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package de.mbremer.kalender;
|
||||
|
||||
import de.mbremer.secutity.User;
|
||||
import io.quarkus.qute.Location;
|
||||
import io.quarkus.qute.Template;
|
||||
import io.quarkus.qute.TemplateInstance;
|
||||
import io.quarkus.security.identity.SecurityIdentity;
|
||||
@@ -14,6 +15,7 @@ import javax.transaction.Transactional;
|
||||
import javax.ws.rs.*;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
@@ -28,35 +30,32 @@ public class KalenderResource {
|
||||
SecurityIdentity identity;
|
||||
@Inject
|
||||
Template kalenderpage;
|
||||
@Inject
|
||||
@Location("export/textExport.txt")
|
||||
Template textExport;
|
||||
@Location("export/icsExport.ics")
|
||||
Template icsExport;
|
||||
|
||||
@Path("")
|
||||
@GET
|
||||
@Produces(MediaType.TEXT_HTML)
|
||||
public TemplateInstance kalender() {
|
||||
return kalenderWithOffset(0);
|
||||
}
|
||||
|
||||
@Path("offset/{weeks}")
|
||||
@GET
|
||||
@Produces(MediaType.TEXT_HTML)
|
||||
public TemplateInstance kalenderWithOffset(@PathParam("weeks") int offsetInWeeks) {
|
||||
User currentUser = User.find("username", identity.getPrincipal().getName()).singleResult();
|
||||
LocalDate today = LocalDate.now();
|
||||
|
||||
LocalDate montag = today.minusDays(today.getDayOfWeek().getValue() - 1).plusDays(7 * offsetInWeeks);
|
||||
|
||||
List<KalenderTag> week = getWeek(currentUser, montag);
|
||||
public TemplateInstance kalender(@QueryParam("offset") @DefaultValue("0") int offsetInWeeks) {
|
||||
List<KalenderTag> week = getWeek(offsetInWeeks);
|
||||
|
||||
return kalenderpage
|
||||
.data("today", today)
|
||||
.data("today", LocalDate.now())
|
||||
.data("offset", offsetInWeeks)
|
||||
.data("week", week);
|
||||
}
|
||||
|
||||
private List<KalenderTag> getWeek(User currentUser, LocalDate start) {
|
||||
private List<KalenderTag> getWeek(int offsetInWeeks) {
|
||||
User currentUser = getCurrentUser();
|
||||
LocalDate today = LocalDate.now();
|
||||
LocalDate montag = today.minusDays(today.getDayOfWeek().getValue() - 1).plusDays(7 * offsetInWeeks);
|
||||
|
||||
return Stream.iterate(0, i -> i < 5, i -> ++i)
|
||||
.map(d -> {
|
||||
LocalDate day = start.plusDays(d);
|
||||
LocalDate day = montag.plusDays(d);
|
||||
KalenderTag tag = (KalenderTag) KalenderTag.find("day", day).singleResultOptional().orElse(new KalenderTag(day));
|
||||
tag.setCurrentUserInOffice(currentUser.equals(tag.getInOffice()));
|
||||
tag.setToday(LocalDate.now().equals(day));
|
||||
@@ -65,6 +64,14 @@ public class KalenderResource {
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private List<Event> getEvents(int offsetInWeeks) {
|
||||
List<KalenderTag> week = getWeek(offsetInWeeks);
|
||||
return week.stream()
|
||||
.filter(d -> d.isCurrentUserInOffice())
|
||||
.map(d-> new Event(LocalDateTime.now(), d.getDay()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@POST
|
||||
@Transactional
|
||||
@Consumes(MediaType.MULTIPART_FORM_DATA)
|
||||
@@ -73,7 +80,7 @@ public class KalenderResource {
|
||||
@QueryParam("offset") int offsetInWeeks, @MultipartForm KalenderTagForm kalenderForm) {
|
||||
LocalDate dayParsed = LocalDate.parse(day);
|
||||
|
||||
User currentUser = User.find("username", identity.getPrincipal().getName()).singleResult();
|
||||
User currentUser = getCurrentUser();
|
||||
try {
|
||||
KalenderTag tag = KalenderTag.find("day", dayParsed).singleResult();
|
||||
if (kalenderForm.isInOffice() && tag.getInOffice() == null) {
|
||||
@@ -87,6 +94,24 @@ public class KalenderResource {
|
||||
tag.persist();
|
||||
}
|
||||
|
||||
return kalenderWithOffset(offsetInWeeks);
|
||||
return kalender(offsetInWeeks);
|
||||
}
|
||||
|
||||
private User getCurrentUser() {
|
||||
return User.find("username", identity.getPrincipal().getName()).singleResult();
|
||||
}
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.TEXT_PLAIN)
|
||||
@Path("export/txt")
|
||||
public TemplateInstance exportTxt(@QueryParam("offset") int offset) {
|
||||
return textExport.data("week", getWeek(offset));
|
||||
}
|
||||
|
||||
@GET
|
||||
@Produces("text/calendar")
|
||||
@Path("export/ics")
|
||||
public TemplateInstance exportIcs(@QueryParam("offset") int offset) {
|
||||
return icsExport.data("events", getEvents(offset));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user