48 lines
1.3 KiB
Java
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
|
|
}
|
|
}
|