overhauled API:

- wrote openapi schema
- re-implemented api endpoint following openapi schema
- intensified and improved working with Result objects

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2024-12-31 00:02:14 +01:00
parent 10ad309d8c
commit 4822320961
28 changed files with 874 additions and 542 deletions

View File

@@ -1,12 +1,12 @@
/* © SRSoftware 2024 */
package de.srsoftware.cal.importer.jena;
import static de.srsoftware.tools.Error.error;
import static de.srsoftware.tools.Result.transform;
import static de.srsoftware.tools.TagFilter.*;
import de.srsoftware.cal.BaseImporter;
import de.srsoftware.tools.*;
import de.srsoftware.tools.Error;
import java.security.NoSuchAlgorithmException;
import java.time.LocalDateTime;
import java.util.List;
@@ -31,12 +31,12 @@ public class Kassablanca extends BaseImporter {
protected Result<Tag> extractDescriptionTag(Tag eventTag) {
var list = eventTag.find(attributeHas("class", "se-content"));
if (list.size() == 1) return Payload.of(list.getFirst());
return Error.of("Failed to find description tag");
return error("Failed to find description tag");
}
@Override
protected Result<Tag> extractEndTag(Tag eventTag) {
return Error.format("end date not supported");
return error("end date not supported");
}
@Override
@@ -44,7 +44,7 @@ public class Kassablanca extends BaseImporter {
if (pageResult.optional().isEmpty()) return transform(pageResult);
var list = pageResult.optional().get().find(attributeEquals("class", APPOINTMENT_TAG_ID));
if (list.size() == 1) return Payload.of(list.getFirst());
return Error.format("Could not find tag with id \"%s\"", APPOINTMENT_TAG_ID);
return error("Could not find tag with id \"%s\"", APPOINTMENT_TAG_ID);
}
@Override
@@ -85,7 +85,7 @@ public class Kassablanca extends BaseImporter {
protected Result<Tag> extractStartTag(Tag eventTag) {
List<Tag> tags = eventTag.find(attributeEquals("class", "se-header"));
if (tags.size() == 1) return Payload.of(tags.getFirst());
return Error.of("Failed to find event time information");
return error("Failed to find event time information");
}
@Override
@@ -97,7 +97,7 @@ public class Kassablanca extends BaseImporter {
protected Result<Tag> extractTitleTag(Tag eventTag) {
var list = eventTag.find(ofType("h1"));
if (list.size() == 1) return Payload.of(list.getFirst());
return Error.of("Failed to find title tag");
return error("Failed to find title tag");
}
@Override
@@ -117,7 +117,7 @@ public class Kassablanca extends BaseImporter {
var date = LocalDateTime.of(year, month, day, hour, minute);
return Payload.of(date);
}
return Error.of("Could not recognize start date/time");
return error("Could not recognize start date/time");
}
@Override

View File

@@ -1,12 +1,12 @@
/* © SRSoftware 2024 */
package de.srsoftware.cal.importer.jena;
import static de.srsoftware.tools.Error.error;
import static de.srsoftware.tools.Optionals.nullable;
import static de.srsoftware.tools.Result.transform;
import static de.srsoftware.tools.TagFilter.*;
import de.srsoftware.cal.BaseImporter;
import de.srsoftware.tools.Error;
import de.srsoftware.tools.Payload;
import de.srsoftware.tools.Result;
import de.srsoftware.tools.Tag;
@@ -42,12 +42,12 @@ public class Rosenkeller extends BaseImporter {
.stream()
.findAny();
if (opt.isPresent()) return Payload.of(opt.get());
return Error.of("Failed to find description tag");
return error("Failed to find description tag");
}
@Override
protected Result<Tag> extractEndTag(Tag eventTag) {
return Error.of("extractEndTag(…) not supported");
return error("extractEndTag(…) not supported");
}
@Override
@@ -55,7 +55,7 @@ public class Rosenkeller extends BaseImporter {
if (pageResult.optional().isEmpty()) return transform(pageResult);
var list = pageResult.optional().get().find(attributeEquals("id", APPOINTMENT_TAG_ID));
if (list.size() == 1) return Payload.of(list.getFirst());
return Error.format("Could not find tag with id \"%s\"", APPOINTMENT_TAG_ID);
return error("Could not find tag with id \"%s\"", APPOINTMENT_TAG_ID);
}
@Override
@@ -88,7 +88,7 @@ public class Rosenkeller extends BaseImporter {
protected Result<Tag> extractStartTag(Tag eventTag) {
List<Tag> list = eventTag.find(attributeEquals("class", "tribe-event-date-start"));
if (list.size() == 1) return Payload.of(list.getFirst());
return Error.of("Failed to locate start tag");
return error("Failed to locate start tag");
}
@Override
@@ -100,12 +100,12 @@ public class Rosenkeller extends BaseImporter {
protected Result<Tag> extractTitleTag(Tag eventTag) {
var list = eventTag.find(attributeEndsWith("class", "single-event-title"));
if (list.size() == 1) return Payload.of(list.getFirst());
return Error.of("Failed to find title tag");
return error("Failed to find title tag");
}
@Override
protected Result<LocalDateTime> parseEndDate(String text) {
return Error.of("parseEndDate(…) not supported");
return error("parseEndDate(…) not supported");
}
@Override
@@ -123,7 +123,7 @@ public class Rosenkeller extends BaseImporter {
if (date.isBefore(now)) date = date.plusYears(1);
return Payload.of(date);
}
return Error.format("Failed to recognize a date in \"%s\"", text);
return error("Failed to recognize a date in \"%s\"", text);
}
@Override