From 31670652326880d0e953c330ffab21914177c97c Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Mon, 31 Aug 2026 15:36:54 +0200 Subject: [PATCH] preparing importer for ReparierCafe Signed-off-by: Stephan Richter --- build.gradle.kts | 2 + de.srsoftware.cal.app/build.gradle.kts | 1 - .../de/srsoftware/cal/app/Application.java | 1 - de.srsoftware.cal.base/build.gradle.kts | 1 - .../java/de/srsoftware/cal/BaseImporter.java | 5 +- .../java/de/srsoftware/cal/IcalImporter.java | 49 +++++ .../de/srsoftware/cal/SinglePageImporter.java | 4 +- .../src/main/java/de/srsoftware/cal/Util.java | 3 - de.srsoftware.cal.db/build.gradle.kts | 1 - .../java/de/srsoftware/cal/db/MariaDB.java | 6 +- .../java/de/srsoftware/cal/db/SQlite.java | 6 +- .../main/java/de/srsoftware/cal/db/SqlDb.java | 4 +- de.srsoftware.cal.importer/build.gradle.kts | 1 - .../srsoftware/cal/importer/erfurt/Eburg.java | 8 +- .../cal/importer/erfurt/FromHell.java | 8 +- .../erfurt/GewerkschaftshausErfurt.java | 8 +- .../srsoftware/cal/importer/gera/AtParty.java | 8 +- .../cal/importer/jena/CafeWagner.java | 5 +- .../cal/importer/jena/CosmicDawn.java | 5 +- .../srsoftware/cal/importer/jena/FHaus.java | 8 +- .../cal/importer/jena/Kassablanca.java | 3 +- .../cal/importer/jena/Psychochor.java | 8 +- .../cal/importer/jena/ReparierCafe.java | 16 ++ .../cal/importer/jena/Rosenkeller.java | 8 +- .../cal/importer/leipzig/Bandhaus.java | 177 ------------------ .../cal/importer/neustadt/Wotufa.java | 166 ---------------- .../cal/importer/weimar/CKeller.java | 8 +- .../cal/importer/weimar/Gerberstrasse.java | 6 +- .../cal/importer/weimar/Kasseturm.java | 6 +- de.srsoftware.cal.web/build.gradle.kts | 1 - .../java/de/srsoftware/cal/ApiEndpoint.java | 4 +- 31 files changed, 124 insertions(+), 413 deletions(-) create mode 100644 de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/IcalImporter.java create mode 100644 de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/ReparierCafe.java delete mode 100644 de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/leipzig/Bandhaus.java delete mode 100644 de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/neustadt/Wotufa.java diff --git a/build.gradle.kts b/build.gradle.kts index a1707ed..b6cfd01 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -33,6 +33,8 @@ subprojects { dependencies { testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") + + implementation("de.srsoftware:tools.container:1.0.6") } tasks.withType() { diff --git a/de.srsoftware.cal.app/build.gradle.kts b/de.srsoftware.cal.app/build.gradle.kts index 358732b..f338bd8 100644 --- a/de.srsoftware.cal.app/build.gradle.kts +++ b/de.srsoftware.cal.app/build.gradle.kts @@ -14,7 +14,6 @@ dependencies { implementation("de.srsoftware:configuration.api:1.0.0") implementation("de.srsoftware:configuration.json:1.0.1") - implementation("de.srsoftware:tools.container:1.0.6") implementation("de.srsoftware:tools.http:6.0.5") implementation("de.srsoftware:tools.logging:1.3.2") implementation("de.srsoftware:tools.plugin:1.0.2") diff --git a/de.srsoftware.cal.app/src/main/java/de/srsoftware/cal/app/Application.java b/de.srsoftware.cal.app/src/main/java/de/srsoftware/cal/app/Application.java index 5f972ad..ce56ed0 100644 --- a/de.srsoftware.cal.app/src/main/java/de/srsoftware/cal/app/Application.java +++ b/de.srsoftware.cal.app/src/main/java/de/srsoftware/cal/app/Application.java @@ -8,7 +8,6 @@ import com.sun.net.httpserver.HttpServer; import de.srsoftware.cal.*; import de.srsoftware.cal.db.Database; import de.srsoftware.cal.db.MariaDB; -import de.srsoftware.cal.db.SqlDb; import de.srsoftware.cal.db.SQlite; import de.srsoftware.configuration.Configuration; import de.srsoftware.configuration.JsonConfig; diff --git a/de.srsoftware.cal.base/build.gradle.kts b/de.srsoftware.cal.base/build.gradle.kts index f44d14b..4cb0032 100644 --- a/de.srsoftware.cal.base/build.gradle.kts +++ b/de.srsoftware.cal.base/build.gradle.kts @@ -3,7 +3,6 @@ description = "OpenCloudCal : Base" dependencies { implementation(project(":de.srsoftware.cal.api")) - implementation("de.srsoftware:tools.container:1.0.6") implementation("de.srsoftware:tools.mime:1.1.4") implementation("de.srsoftware:tools.optionals:1.0.0") implementation("de.srsoftware:tools.util:2.1.1") diff --git a/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/BaseImporter.java b/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/BaseImporter.java index a2a085f..9aafde9 100644 --- a/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/BaseImporter.java +++ b/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/BaseImporter.java @@ -2,17 +2,16 @@ package de.srsoftware.cal; import static de.srsoftware.cal.Util.*; -import static de.srsoftware.tools.container.Error.error; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.HREF; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import static java.lang.System.Logger.Level.DEBUG; import de.srsoftware.cal.api.*; import de.srsoftware.tools.*; import de.srsoftware.tools.container.Container; import de.srsoftware.tools.container.Payload; - import java.io.InputStream; import java.net.*; import java.time.LocalDate; diff --git a/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/IcalImporter.java b/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/IcalImporter.java new file mode 100644 index 0000000..b817e74 --- /dev/null +++ b/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/IcalImporter.java @@ -0,0 +1,49 @@ +/* © SRSoftware 2026 */ +package de.srsoftware.cal; + +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; + +import de.srsoftware.cal.api.Appointment; +import de.srsoftware.cal.api.Importer; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Scanner; +import java.util.stream.Stream; + +public abstract class IcalImporter implements Importer { + + @Override + public Stream fetch() throws IOException { + var programPage = Payload.of(url()).map(Util::url); + + return programPage + .map(Util::open) + .map(Util::preload) + .map(IcalImporter::parse) + .stream(); + } + + private static Container> parse(Container input) { + if (input.optional().isEmpty()) return transform(input); + InputStream stream = input.optional().get(); + var scanner = new Scanner(stream); + while (scanner.hasNextLine()){ + var line = scanner.nextLine(); + System.out.println(line); + } + scanner.close(); + try { + stream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + return error("Not implemented"); + } + + + public abstract String url(); +} diff --git a/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/SinglePageImporter.java b/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/SinglePageImporter.java index 7a81a14..9ca5bef 100644 --- a/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/SinglePageImporter.java +++ b/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/SinglePageImporter.java @@ -5,9 +5,9 @@ import static de.srsoftware.cal.Util.url; import de.srsoftware.cal.api.Appointment; import de.srsoftware.cal.api.Link; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; import de.srsoftware.tools.Tag; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; diff --git a/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/Util.java b/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/Util.java index a9331c1..133e241 100644 --- a/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/Util.java +++ b/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/Util.java @@ -4,8 +4,6 @@ package de.srsoftware.cal; import static de.srsoftware.tools.Tag.STYLE; import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.container.Error.error; - -import static java.lang.System.Logger.Level.DEBUG; import static java.lang.System.Logger.Level.WARNING; import de.srsoftware.cal.api.Attachment; @@ -13,7 +11,6 @@ import de.srsoftware.cal.api.Coords; import de.srsoftware.tools.*; import de.srsoftware.tools.container.Container; import de.srsoftware.tools.container.Payload; - import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; diff --git a/de.srsoftware.cal.db/build.gradle.kts b/de.srsoftware.cal.db/build.gradle.kts index 5b1dbe5..b8154ab 100644 --- a/de.srsoftware.cal.db/build.gradle.kts +++ b/de.srsoftware.cal.db/build.gradle.kts @@ -4,7 +4,6 @@ dependencies { implementation(project(":de.srsoftware.cal.api")) implementation(project(":de.srsoftware.cal.base")) - implementation("de.srsoftware:tools.container:1.0.6") implementation("de.srsoftware:tools.jdbc:2.0.8") implementation("de.srsoftware:tools.optionals:1.0.0") implementation("de.srsoftware:tools.util:2.1.1") diff --git a/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/MariaDB.java b/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/MariaDB.java index c3b33fb..2bcf8fa 100644 --- a/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/MariaDB.java +++ b/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/MariaDB.java @@ -1,13 +1,13 @@ +/* © SRSoftware 2026 */ package de.srsoftware.cal.db; -import de.srsoftware.tools.jdbc.Query; + +import static de.srsoftware.tools.jdbc.Query.Dialect.MARIADB; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; -import static de.srsoftware.tools.jdbc.Query.Dialect.MARIADB; - public class MariaDB extends SqlDb{ protected MariaDB(Connection conn) throws SQLException { diff --git a/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/SQlite.java b/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/SQlite.java index 7774dce..ad3bdc7 100644 --- a/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/SQlite.java +++ b/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/SQlite.java @@ -1,13 +1,13 @@ +/* © SRSoftware 2026 */ package de.srsoftware.cal.db; -import de.srsoftware.tools.jdbc.Query; + +import static de.srsoftware.tools.jdbc.Query.Dialect.SQLITE; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; -import static de.srsoftware.tools.jdbc.Query.Dialect.SQLITE; - public class SQlite extends SqlDb { diff --git a/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/SqlDb.java b/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/SqlDb.java index f22b9c7..5c67a7c 100644 --- a/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/SqlDb.java +++ b/de.srsoftware.cal.db/src/main/java/de/srsoftware/cal/db/SqlDb.java @@ -4,9 +4,9 @@ package de.srsoftware.cal.db; import static de.srsoftware.cal.Util.extractCoords; import static de.srsoftware.cal.db.Fields.*; import static de.srsoftware.cal.db.Fields.ALL; -import static de.srsoftware.tools.container.Error.error; import static de.srsoftware.tools.Optionals.*; import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import static de.srsoftware.tools.jdbc.Condition.*; import static de.srsoftware.tools.jdbc.Query.*; import static java.lang.System.Logger.Level.*; @@ -15,8 +15,8 @@ import de.srsoftware.cal.BaseAppointment; import de.srsoftware.cal.api.Appointment; import de.srsoftware.cal.api.Attachment; import de.srsoftware.cal.api.Link; -import de.srsoftware.tools.container.Payload; import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import de.srsoftware.tools.jdbc.Query; import java.net.MalformedURLException; import java.net.URI; diff --git a/de.srsoftware.cal.importer/build.gradle.kts b/de.srsoftware.cal.importer/build.gradle.kts index a30b7de..68ae7c4 100644 --- a/de.srsoftware.cal.importer/build.gradle.kts +++ b/de.srsoftware.cal.importer/build.gradle.kts @@ -3,7 +3,6 @@ description = "OpenCloudCal : Importers" dependencies { implementation(project(":de.srsoftware.cal.api")) implementation(project(":de.srsoftware.cal.base")) - implementation("de.srsoftware:tools.container:1.0.6") implementation("de.srsoftware:tools.optionals:1.0.0") implementation("de.srsoftware:tools.util:2.1.1") implementation("de.srsoftware:tools.web:1.3.16") diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/Eburg.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/Eburg.java index 9d22360..4a27c51 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/Eburg.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/Eburg.java @@ -2,19 +2,19 @@ package de.srsoftware.cal.importer.erfurt; import static de.srsoftware.cal.Util.url; -import static de.srsoftware.tools.container.Error.error; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.CLASS; import static de.srsoftware.tools.Tag.HREF; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import de.srsoftware.cal.BaseImporter; import de.srsoftware.cal.Util; import de.srsoftware.cal.api.Coords; import de.srsoftware.cal.api.Link; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; import de.srsoftware.tools.Tag; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.security.NoSuchAlgorithmException; import java.time.LocalDate; import java.time.LocalTime; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/FromHell.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/FromHell.java index 870cb46..807e63e 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/FromHell.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/FromHell.java @@ -3,21 +3,21 @@ package de.srsoftware.cal.importer.erfurt; import static de.srsoftware.cal.Util.parseGermanTime; import static de.srsoftware.cal.Util.parseLongGermanDate; -import static de.srsoftware.tools.container.Error.error; import static de.srsoftware.tools.Optionals.nullIfEmpty; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.*; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import static java.nio.charset.StandardCharsets.UTF_8; import de.srsoftware.cal.BaseImporter; import de.srsoftware.cal.api.Attachment; import de.srsoftware.cal.api.Coords; import de.srsoftware.cal.api.Link; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; import de.srsoftware.tools.Strings; import de.srsoftware.tools.Tag; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/GewerkschaftshausErfurt.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/GewerkschaftshausErfurt.java index 887172f..1bb9784 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/GewerkschaftshausErfurt.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/erfurt/GewerkschaftshausErfurt.java @@ -2,10 +2,10 @@ package de.srsoftware.cal.importer.erfurt; import static de.srsoftware.cal.Util.parseGermanTime; -import static de.srsoftware.tools.container.Error.error; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.*; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import static java.nio.charset.StandardCharsets.UTF_8; import de.srsoftware.cal.BaseImporter; @@ -13,9 +13,9 @@ import de.srsoftware.cal.Util; import de.srsoftware.cal.api.Attachment; import de.srsoftware.cal.api.Coords; import de.srsoftware.cal.api.Link; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; import de.srsoftware.tools.Tag; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/gera/AtParty.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/gera/AtParty.java index a6dac6a..3f6b1ea 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/gera/AtParty.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/gera/AtParty.java @@ -2,20 +2,20 @@ package de.srsoftware.cal.importer.gera; import static de.srsoftware.cal.Util.*; -import static de.srsoftware.tools.container.Error.error; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.CLASS; import static de.srsoftware.tools.Tag.HREF; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import static java.nio.charset.StandardCharsets.UTF_8; import de.srsoftware.cal.BaseImporter; import de.srsoftware.cal.Util; import de.srsoftware.cal.api.Attachment; import de.srsoftware.cal.api.Coords; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; import de.srsoftware.tools.Tag; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/CafeWagner.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/CafeWagner.java index fd10779..581a285 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/CafeWagner.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/CafeWagner.java @@ -3,11 +3,11 @@ package de.srsoftware.cal.importer.jena; import static de.srsoftware.cal.Util.extractBackgroundImage; import static de.srsoftware.cal.Util.toNumericMonth; -import static de.srsoftware.tools.container.Error.error; import static de.srsoftware.tools.Optionals.emptyIfNull; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.*; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import de.srsoftware.cal.BaseImporter; import de.srsoftware.cal.Util; @@ -16,7 +16,6 @@ import de.srsoftware.cal.api.Coords; import de.srsoftware.tools.*; import de.srsoftware.tools.container.Container; import de.srsoftware.tools.container.Payload; - import java.security.NoSuchAlgorithmException; import java.time.LocalDate; import java.time.LocalTime; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/CosmicDawn.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/CosmicDawn.java index 6bee73f..c08fb8a 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/CosmicDawn.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/CosmicDawn.java @@ -3,10 +3,10 @@ package de.srsoftware.cal.importer.jena; import static de.srsoftware.cal.Util.parseGermanDate; import static de.srsoftware.cal.Util.parseGermanTime; -import static de.srsoftware.tools.container.Error.error; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.CLASS; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import static java.nio.charset.StandardCharsets.UTF_8; import de.srsoftware.cal.BaseImporter; @@ -15,7 +15,6 @@ import de.srsoftware.cal.api.Coords; import de.srsoftware.tools.*; import de.srsoftware.tools.container.Container; import de.srsoftware.tools.container.Payload; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/FHaus.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/FHaus.java index f3225c5..a31f931 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/FHaus.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/FHaus.java @@ -2,16 +2,16 @@ package de.srsoftware.cal.importer.jena; import static de.srsoftware.cal.Util.parseGermanTime; -import static de.srsoftware.tools.container.Error.error; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.*; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import de.srsoftware.cal.BaseImporter; import de.srsoftware.cal.api.Coords; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; import de.srsoftware.tools.Tag; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.security.NoSuchAlgorithmException; import java.time.LocalDate; import java.time.LocalTime; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Kassablanca.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Kassablanca.java index 6d24355..f7a5057 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Kassablanca.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Kassablanca.java @@ -2,17 +2,16 @@ package de.srsoftware.cal.importer.jena; import static de.srsoftware.cal.Util.*; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.CLASS; import static de.srsoftware.tools.Tag.DIV; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; import de.srsoftware.cal.BaseImporter; import de.srsoftware.cal.api.Coords; import de.srsoftware.tools.*; import de.srsoftware.tools.container.Container; import de.srsoftware.tools.container.Payload; - import java.security.NoSuchAlgorithmException; import java.time.LocalDate; import java.time.LocalTime; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Psychochor.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Psychochor.java index 940aed8..332d817 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Psychochor.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Psychochor.java @@ -1,18 +1,18 @@ /* © SRSoftware 2026 */ package de.srsoftware.cal.importer.jena; -import static de.srsoftware.tools.container.Error.error; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.CLASS; import static de.srsoftware.tools.Tag.ID; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import de.srsoftware.cal.SinglePageImporter; import de.srsoftware.cal.Util; import de.srsoftware.cal.api.Coords; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; import de.srsoftware.tools.Tag; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.security.NoSuchAlgorithmException; import java.time.LocalDate; import java.time.LocalTime; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/ReparierCafe.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/ReparierCafe.java new file mode 100644 index 0000000..a411fa2 --- /dev/null +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/ReparierCafe.java @@ -0,0 +1,16 @@ +/* © SRSoftware 2026 */ +package de.srsoftware.cal.importer.jena; + +import de.srsoftware.cal.IcalImporter; + +public class ReparierCafe extends IcalImporter { + @Override + public String url() { + return "https://www.reparatur-initiativen.de/events/ical/2553.ics"; + } + + @Override + public String description() { + return "Reparier-Café Jena"; + } +} diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Rosenkeller.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Rosenkeller.java index b085a53..b4120db 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Rosenkeller.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/jena/Rosenkeller.java @@ -2,16 +2,16 @@ package de.srsoftware.cal.importer.jena; import static de.srsoftware.cal.Util.parseGermanTime; -import static de.srsoftware.tools.container.Error.error; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.*; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import de.srsoftware.cal.BaseImporter; import de.srsoftware.cal.api.Coords; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; import de.srsoftware.tools.Tag; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.security.NoSuchAlgorithmException; import java.time.LocalDate; import java.time.LocalTime; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/leipzig/Bandhaus.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/leipzig/Bandhaus.java deleted file mode 100644 index 18142bd..0000000 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/leipzig/Bandhaus.java +++ /dev/null @@ -1,177 +0,0 @@ -/* © SRSoftware 2026 */ -package de.srsoftware.cal.importer.leipzig; - -import static de.srsoftware.cal.Util.parseGermanTime; -import static de.srsoftware.tools.container.Error.error; -import static de.srsoftware.tools.container.Container.transform; -import static de.srsoftware.tools.Tag.*; -import static de.srsoftware.tools.TagFilter.*; - -import de.srsoftware.cal.BaseImporter; -import de.srsoftware.cal.Util; -import de.srsoftware.cal.api.Coords; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; -import de.srsoftware.tools.Tag; -import java.security.NoSuchAlgorithmException; -import java.time.LocalDate; -import java.time.LocalTime; -import java.util.List; -import java.util.Objects; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -public class Bandhaus extends BaseImporter { - private static final Coords COORDS_BANDHAUS = new Coords(51.32498, 12.31578); - - public Bandhaus() throws NoSuchAlgorithmException { - super(); - } - - @Override - protected String baseUrl() { - return "https://bandcommunity-leipzig.org"; - } - - @Override - public String description() { - return "Importer für Veranstaltungen des Bandhaus Leipzig"; - } - - @Override - protected Predicate extractAttachmentsFilter() { - return attributeHas(CLASS,"event_description"); - } - - @Override - protected Predicate extractDescriptionFilter() { - return attributeEquals("itemprop","description"); - } - - @Override - protected Container extractCoords(Tag eventTag) { - var list = eventTag.find(attributeHas(CLASS,"evo_location_address")); - if (list.isEmpty()) return error("Failed to locate address → failed to locate coords"); - var loc = list.getFirst().strip(); - var lower = loc.toLowerCase(); - if (lower.contains("saarländer")) return Payload.of(COORDS_BANDHAUS); - return error("Unknown location: %s",loc); - } - - @Override - protected Predicate extractEndDateFilter() { - return null; - } - - @Override - protected Predicate extractEndTimeFilter() { - return null; - } - - @Override - protected Predicate extractEventTagFilter() { - return attributeStartsWith(ID, "event_"); - } - - @Override - protected Container> extractEventUrls(Container programPage) { - var opt = programPage.optional(); - if (opt.isEmpty())return transform(programPage); - var list = opt.get().find(attributeEquals(ID, "evcal_list")).stream() - .flatMap(tag -> tag.find(IS_ANCHOR).stream()) - .map(anchor -> anchor.get(HREF)) - .filter(Objects::nonNull).filter(link-> link.contains("/events/")) - .map(link -> link.contains("://") ? link : baseUrl()+link) - .distinct().toList(); - return Payload.of(list); - } - - @Override - protected Predicate extractLinksFilter() { - return attributeEquals("itemprop","description"); - } - - protected Container extractLocationTag(Tag eventTag){ - var list = eventTag.find(extractLocationFilter()).stream() - .flatMap(tag -> tag.find(IS_PARAGRAPH).stream()).toList(); - if (list.isEmpty()) return error("Failed to find location tag"); - return Payload.of(Tag.of(DIV).addAll(list)); - } - - protected Container extractLocation(Tag eventTag) { - var location = eventTag.find(extractLocationFilter()).stream() - .flatMap(tag -> tag.find(IS_PARAGRAPH).stream()) - .map(Tag::strip).collect(Collectors.joining(", ")); - - return location.isBlank() ? error("Failed to find location!") : Payload.of(location); - } - - @Override - protected Predicate extractLocationFilter() { - return attributeContains(CLASS,"data_cell").and(tag -> !tag.find(attributeHas(CLASS,"evo_location_address")).isEmpty()); - } - - @Override - protected Container extractStartDate(Tag eventTag) { - Container startDateTag = extractStartDateTag(eventTag); - var opt = startDateTag.optional(); - if (opt.isEmpty()) return transform(startDateTag); - var dateTag = opt.get(); - Container year = dateTag.find(withAttribute("data-syr")).stream() - .map(tag -> tag.get("data-syr")) - .map(Util::parseInt).findAny().orElseGet(() -> error("Failed to find start date")); - Container day = dateTag.find(attributeEquals(CLASS, "date")).stream() - .map(Tag::strip).map(Util::parseInt).findAny().orElseGet(() -> error("Failed to find start date")); - Container month = dateTag.find(attributeEquals(CLASS, "month")).stream() - .map(Tag::strip).map(Util::toNumericMonth).findAny().orElseGet(() -> error("Failed to find start date")); - if (year.optional().isEmpty()) return transform(year); - if (month.optional().isEmpty()) return transform(month); - if (day.optional().isEmpty()) return transform(day); - return Payload.of(LocalDate.of(year.optional().get(),month.optional().get(),day.optional().get())); - } - - @Override - protected Predicate extractStartDateFilter() { - return withAttribute("data-syr").and(tag -> !tag.find(attributeContains(CLASS,"evo_start")).isEmpty()); - } - - @Override - protected Predicate extractStartTimeFilter() { - return attributeContains(CLASS,"evo_start"); - } - - @Override - protected List extractTags(Tag eventTag) { - return List.of("Bandhaus","Leipzig"); - } - - @Override - protected Predicate extractTitleFilter() { - return attributeHas(CLASS,"evcal_event_title"); - } - - @Override - protected Container parseEndDate(String string) { - return null; - } - - @Override - protected Container parseEndTime(String string) { - return null; - } - - @Override - protected Container parseStartDate(String string) { - return null; - } - - @Override - protected Container parseStartTime(String string) { - return parseGermanTime(string+" "); - } - - @Override - protected String programURL() { - return baseUrl()+"/veranstaltungen"; - } -} diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/neustadt/Wotufa.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/neustadt/Wotufa.java deleted file mode 100644 index e67118d..0000000 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/neustadt/Wotufa.java +++ /dev/null @@ -1,166 +0,0 @@ -/* © SRSoftware 2026 */ -package de.srsoftware.cal.importer.neustadt; - -import static de.srsoftware.cal.Util.parseGermanDate; -import static de.srsoftware.cal.Util.parseGermanTime; -import static de.srsoftware.tools.container.Error.error; -import static de.srsoftware.tools.container.Container.transform; -import static de.srsoftware.tools.Tag.CLASS; -import static de.srsoftware.tools.Tag.HREF; -import static de.srsoftware.tools.TagFilter.*; -import static java.util.function.Predicate.not; - -import de.srsoftware.cal.BaseImporter; -import de.srsoftware.cal.api.Coords; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; -import de.srsoftware.tools.Tag; -import java.security.NoSuchAlgorithmException; -import java.time.LocalDate; -import java.time.LocalTime; -import java.util.List; -import java.util.Objects; -import java.util.function.Predicate; - -public class Wotufa extends BaseImporter { - - private static final String DEFAULT_LOCATION = "Wotufa-Saal, Ziegenrücker Str. 6, 07806 Neustadt an der Orla"; - public static final Coords DEFAULT_COORDS = new Coords(50.73184, 11.74444); - private static final LocalTime DEFAULT_TIME = LocalTime.of(19,0); - - public Wotufa() throws NoSuchAlgorithmException { - super(); - } - - @Override - protected String baseUrl() { - return "http://wotufa.de"; - } - - @Override - public String description() { - return "Importer für Events im Wotufa-Saal Neustadt an der Orla"; - } - - @Override - protected Predicate extractAttachmentsFilter() { - return ofType("table").and(attributeEquals(CLASS,"kalDetl")); - } - - @Override - protected Predicate extractDescriptionFilter() { - return cellWithContext("Details"); - } - - @Override - protected Container extractCoords(Tag eventTag) { - return Payload.of(DEFAULT_COORDS); - } - - @Override - protected Predicate extractEndDateFilter() { - return null; - } - - @Override - protected Predicate extractEndTimeFilter() { - return null; - } - - @Override - protected Predicate extractEventTagFilter() { - return ofType("table").and(attributeContains(CLASS,"kalDetl")); - } - - @Override - protected Container> extractEventUrls(Container programPage) { - var opt = programPage.optional(); - if (opt.isEmpty()) return transform(programPage); - List list = opt.get().find(IS_ANCHOR) - .stream().map(a -> a.get(HREF)) - .filter(Objects::nonNull) - .filter(url -> url.contains("kal_Aktion=detail")) - .map(url -> url.contains("://") ? url : baseUrl() + url) - .map(url -> url.replace("&","&")) // glitch on that website - .distinct() - .toList(); - return Payload.of(list); - } - - @Override - protected Predicate extractLinksFilter() { - return ofType("table").and(attributeEquals(CLASS,"kalDetl")); - } - - @Override - protected Container extractLocation(Tag eventTag) { - Container locationTag = extractLocationTag(eventTag); - if (locationTag.optional().isEmpty()) return transform(locationTag); - var loc = locationTag.optional().get().strip(); - - var wotufa = loc.equals("Neustadt an der Orla") || loc.toLowerCase().contains("wotufa"); - return Payload.of(wotufa ? DEFAULT_LOCATION : loc); - } - - @Override - protected Predicate extractLocationFilter() { - return cellWithContext("Ort"); - } - - @Override - protected Predicate extractStartDateFilter() { - return cellWithContext("Datum"); - } - - @Override - protected Predicate extractStartTimeFilter() { - return cellWithContext("Zeit").or(cellWithContext("Details")); - } - - protected Container extractStartTimeTag(Tag eventTag) { - var list = eventTag.find(extractStartTimeFilter()); - if (list.isEmpty()) return error("Failed to find start time tag"); - return Payload.of(new Tag("group").addAll(list)); - } - - @Override - protected List extractTags(Tag eventTag) { - return List.of("Wotufa","Neustadt/Orla"); - } - - @Override - protected Predicate extractTitleFilter() { - return cellWithContext("Veranstaltung"); - } - - private Predicate cellWithContext(String key){ - return ofType("td") - .and(not(withAttribute("width"))) - .and(tag -> tag.parent().map(Tag::strip).filter(content -> content.startsWith(key)).isPresent()); - } - - @Override - protected Container parseEndDate(String string) { - return null; - } - - @Override - protected Container parseEndTime(String string) { - return null; - } - - @Override - protected Container parseStartDate(String string) { - return parseGermanDate(string); - } - - @Override - protected Container parseStartTime(String string) { - return parseGermanTime(string).map(res -> res.optional().isEmpty() ? Payload.of(DEFAULT_TIME) : res); - } - - @Override - protected String programURL() { - return baseUrl()+"/eventkalender/kalender.php"; - } -} diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/CKeller.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/CKeller.java index 949373b..27eb74c 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/CKeller.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/CKeller.java @@ -1,10 +1,10 @@ /* © SRSoftware 2026 */ package de.srsoftware.cal.importer.weimar; -import static de.srsoftware.tools.container.Error.error; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.*; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import static java.util.Optional.empty; import de.srsoftware.cal.BaseAppointment; @@ -13,9 +13,9 @@ import de.srsoftware.cal.api.Appointment; import de.srsoftware.cal.api.Attachment; import de.srsoftware.cal.api.Importer; import de.srsoftware.cal.api.Link; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; import de.srsoftware.tools.Tag; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.io.IOException; import java.net.MalformedURLException; import java.net.URI; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/Gerberstrasse.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/Gerberstrasse.java index bd7dd71..e12053a 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/Gerberstrasse.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/Gerberstrasse.java @@ -3,15 +3,15 @@ package de.srsoftware.cal.importer.weimar; import static de.srsoftware.cal.Util.parseGermanDate; import static de.srsoftware.cal.Util.parseGermanTime; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.*; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; import de.srsoftware.cal.BaseImporter; import de.srsoftware.cal.api.Coords; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; import de.srsoftware.tools.Tag; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.security.NoSuchAlgorithmException; import java.time.LocalDate; import java.time.LocalTime; diff --git a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/Kasseturm.java b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/Kasseturm.java index 0d7f08b..e71336e 100644 --- a/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/Kasseturm.java +++ b/de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/weimar/Kasseturm.java @@ -1,17 +1,17 @@ /* © SRSoftware 2026 */ package de.srsoftware.cal.importer.weimar; -import static de.srsoftware.tools.container.Container.transform; import static de.srsoftware.tools.Tag.CLASS; import static de.srsoftware.tools.Tag.HREF; import static de.srsoftware.tools.TagFilter.*; +import static de.srsoftware.tools.container.Container.transform; import de.srsoftware.cal.BaseImporter; import de.srsoftware.cal.Util; import de.srsoftware.cal.api.Coords; -import de.srsoftware.tools.container.Payload; -import de.srsoftware.tools.container.Container; import de.srsoftware.tools.Tag; +import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.time.LocalDate; import java.time.LocalTime; import java.util.ArrayList; diff --git a/de.srsoftware.cal.web/build.gradle.kts b/de.srsoftware.cal.web/build.gradle.kts index 82ebfa5..701231e 100644 --- a/de.srsoftware.cal.web/build.gradle.kts +++ b/de.srsoftware.cal.web/build.gradle.kts @@ -5,7 +5,6 @@ dependencies { implementation(project(":de.srsoftware.cal.base")) implementation(project(":de.srsoftware.cal.db")) - implementation("de.srsoftware:tools.container:1.0.6") implementation("de.srsoftware:tools.http:6.0.5") implementation("de.srsoftware:tools.optionals:1.0.0") implementation("de.srsoftware:tools.util:2.1.1") diff --git a/de.srsoftware.cal.web/src/main/java/de/srsoftware/cal/ApiEndpoint.java b/de.srsoftware.cal.web/src/main/java/de/srsoftware/cal/ApiEndpoint.java index 478812f..efbc39e 100644 --- a/de.srsoftware.cal.web/src/main/java/de/srsoftware/cal/ApiEndpoint.java +++ b/de.srsoftware.cal.web/src/main/java/de/srsoftware/cal/ApiEndpoint.java @@ -4,10 +4,10 @@ package de.srsoftware.cal; import static de.srsoftware.cal.Util.extractCoords; import static de.srsoftware.cal.db.Fields.*; import static de.srsoftware.cal.db.Fields.AID; -import static de.srsoftware.tools.container.Error.error; import static de.srsoftware.tools.Optionals.nullIfEmpty; import static de.srsoftware.tools.Optionals.nullable; import static de.srsoftware.tools.container.Container.transform; +import static de.srsoftware.tools.container.Error.error; import static java.time.format.DateTimeFormatter.ISO_DATE_TIME; import com.sun.net.httpserver.HttpExchange; @@ -18,8 +18,8 @@ import de.srsoftware.cal.db.NotFound; import de.srsoftware.tools.HttpError; import de.srsoftware.tools.Path; import de.srsoftware.tools.PathHandler; -import de.srsoftware.tools.container.Payload; import de.srsoftware.tools.container.Container; +import de.srsoftware.tools.container.Payload; import java.io.IOException; import java.time.LocalDateTime; import java.util.Arrays;