Files
OpenCloudCal/de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/SinglePageImporter.java
2026-01-04 21:22:20 +01:00

48 lines
1.3 KiB
Java

/* © SRSoftware 2026 */
package de.srsoftware.cal;
import static de.srsoftware.cal.Util.url;
import de.srsoftware.cal.api.Appointment;
import de.srsoftware.cal.api.Link;
import de.srsoftware.tools.Payload;
import de.srsoftware.tools.Result;
import de.srsoftware.tools.Tag;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.stream.Stream;
public abstract class SinglePageImporter extends BaseImporter{
public SinglePageImporter() throws NoSuchAlgorithmException {
super();
}
@Override
public Stream<Appointment> fetch() {
var programPage = Payload.of(programURL());
var eventLink = programPage //
.map(Util::url).optional()
.map(url -> new Link(url, "Event-Seite"))
.orElse(null);
Stream<Result<Tag>> eventTags = url(programPage).map(Util::open).map(Util::preload)
.map(Util::parseXML)
.map(this::extractEventTags)
.stream();
return eventTags.map(tagResult -> extractEvent(tagResult, eventLink))
.peek(res -> {
if (res.optional().isEmpty()) LOG.log(System.Logger.Level.WARNING, res);
})
.flatMap(res -> res.optional().stream());
}
protected abstract Result<List<Tag>> extractEventTags(Result<Tag> tagResult);
@Override
protected Result<List<String>> extractEventUrls(Result<Tag> programPage) {
return null; // not needed by this fetch implementation
}
}