moved methods to Util
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -3,6 +3,7 @@ description = "OpenCloudCal : Base"
|
||||
dependencies {
|
||||
implementation(project(":de.srsoftware.cal.api"))
|
||||
|
||||
implementation("de.srsoftware:tools.mime:1.1.0")
|
||||
implementation("de.srsoftware:tools.optionals:1.0.0")
|
||||
implementation("de.srsoftware:tools.util:1.3.0")
|
||||
implementation("de.srsoftware:tools.web:1.3.14")
|
||||
|
||||
@@ -3,18 +3,14 @@ package de.srsoftware.cal;
|
||||
|
||||
import static de.srsoftware.cal.Util.*;
|
||||
import static de.srsoftware.tools.Error.error;
|
||||
import static de.srsoftware.tools.Optionals.nullIfEmpty;
|
||||
import static de.srsoftware.tools.Result.transform;
|
||||
import static de.srsoftware.tools.Tag.HREF;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
|
||||
import de.srsoftware.cal.api.*;
|
||||
import de.srsoftware.tools.*;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.time.LocalDate;
|
||||
@@ -281,9 +277,9 @@ public abstract class BaseImporter implements Importer {
|
||||
public Stream<Appointment> fetch() {
|
||||
var url = Payload.of(programURL());
|
||||
Stream<Result<String>> urls = url(url)
|
||||
.map(this::open) //
|
||||
.map(this::preload)
|
||||
.map(this::parseXML)
|
||||
.map(Util::open) //
|
||||
.map(Util::preload)
|
||||
.map(Util::parseXML)
|
||||
.map(this::extractEventUrls)
|
||||
.stream();
|
||||
return urls //
|
||||
@@ -308,27 +304,14 @@ public abstract class BaseImporter implements Importer {
|
||||
.map(url -> new Link(url, "Event-Seite"))
|
||||
.orElse(null);
|
||||
return urlResult //
|
||||
.map(this::open)
|
||||
.map(this::preload)
|
||||
.map(this::parseXML)
|
||||
.map(Util::open)
|
||||
.map(Util::preload)
|
||||
.map(Util::parseXML)
|
||||
.map(this::extractEventTag)
|
||||
.map(tagResult -> extractEvent(tagResult, link));
|
||||
}
|
||||
|
||||
protected Result<InputStream> open(Result<URL> url) {
|
||||
var opt = url.optional();
|
||||
if (opt.isEmpty()) return transform(url);
|
||||
try {
|
||||
var conn = (HttpURLConnection) opt.get().openConnection();
|
||||
conn.setRequestProperty("Accept","*/*");
|
||||
conn.setRequestProperty("Host",opt.get().getHost());
|
||||
conn.setRequestProperty("User-Agent","OpenCloudCal/0.1");
|
||||
return Payload.of(conn.getInputStream());
|
||||
} catch (IOException e) {
|
||||
return error(e, "Failed to open %s", url, e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected abstract Result<LocalDate> parseEndDate(String string);
|
||||
protected abstract Result<LocalTime> parseEndTime(String string);
|
||||
@@ -336,19 +319,10 @@ public abstract class BaseImporter implements Importer {
|
||||
protected abstract Result<LocalDate> parseStartDate(String string);
|
||||
protected abstract Result<LocalTime> parseStartTime(String string);
|
||||
|
||||
protected Result<Tag> parseXML(Result<InputStream> inputStream) {
|
||||
var opt = inputStream.optional();
|
||||
return opt.isEmpty() ? transform((inputStream)) : XMLParser.parse(opt.get());
|
||||
}
|
||||
|
||||
|
||||
protected Result<InputStream> preload(Result<InputStream> inputStream) {
|
||||
var opt = inputStream.optional();
|
||||
if (opt.isEmpty()) return transform(inputStream);
|
||||
try {
|
||||
return Payload.of(XMLParser.preload(opt.get()));
|
||||
} catch (IOException e) {
|
||||
return error(e, "Failed to buffer data from %s", inputStream);
|
||||
}
|
||||
return Util.preload(inputStream);
|
||||
}
|
||||
|
||||
protected abstract String programURL();
|
||||
|
||||
@@ -26,8 +26,8 @@ public abstract class SinglePageImporter extends BaseImporter{
|
||||
.map(url -> new Link(url, "Event-Seite"))
|
||||
.orElse(null);
|
||||
|
||||
Stream<Result<Tag>> eventTags = url(programPage).map(this::open).map(this::preload)
|
||||
.map(this::parseXML)
|
||||
Stream<Result<Tag>> eventTags = url(programPage).map(Util::open).map(Util::preload)
|
||||
.map(Util::parseXML)
|
||||
.map(this::extractEventTags)
|
||||
.stream();
|
||||
|
||||
|
||||
@@ -8,11 +8,10 @@ import static java.lang.System.Logger.Level.WARNING;
|
||||
|
||||
import de.srsoftware.cal.api.Attachment;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.Payload;
|
||||
import de.srsoftware.tools.Result;
|
||||
import de.srsoftware.tools.Tag;
|
||||
|
||||
import de.srsoftware.tools.*;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Files;
|
||||
@@ -101,7 +100,19 @@ public class Util {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static Result<InputStream> open(Result<URL> url) {
|
||||
var opt = url.optional();
|
||||
if (opt.isEmpty()) return transform(url);
|
||||
try {
|
||||
var conn = (HttpURLConnection) opt.get().openConnection();
|
||||
conn.setRequestProperty("Accept","*/*");
|
||||
conn.setRequestProperty("Host",opt.get().getHost());
|
||||
conn.setRequestProperty("User-Agent","OpenCloudCal/0.1");
|
||||
return Payload.of(conn.getInputStream());
|
||||
} catch (IOException e) {
|
||||
return error(e, "Failed to open %s", url, e);
|
||||
}
|
||||
}
|
||||
|
||||
public static String paramText(String param) {
|
||||
return param
|
||||
@@ -148,6 +159,20 @@ public class Util {
|
||||
return error("Failed to find time");
|
||||
}
|
||||
|
||||
public static Result<Tag> parseXML(Result<InputStream> inputStream) {
|
||||
var opt = inputStream.optional();
|
||||
return opt.isEmpty() ? transform((inputStream)) : XMLParser.parse(opt.get());
|
||||
}
|
||||
|
||||
public static Result<InputStream> preload(Result<InputStream> inputStream) {
|
||||
var opt = inputStream.optional();
|
||||
if (opt.isEmpty()) return transform(inputStream);
|
||||
try {
|
||||
return Payload.of(XMLParser.preload(opt.get()));
|
||||
} catch (IOException e) {
|
||||
return error(e, "Failed to buffer data from %s", inputStream);
|
||||
}
|
||||
}
|
||||
|
||||
public static Result<Integer> toNumericMonth(String month) {
|
||||
month = month.toLowerCase();
|
||||
@@ -201,7 +226,7 @@ public class Util {
|
||||
var opt = urlResult.optional();
|
||||
if (opt.isEmpty()) return transform(urlResult);
|
||||
try {
|
||||
var mime = opt.get().openConnection().getContentType();
|
||||
var mime = MimeType.guessMime(opt.get());
|
||||
return Payload.of(new Attachment(opt.get(), mime));
|
||||
} catch (Exception e) {
|
||||
LOG.log(WARNING, "Failed to read mime type of {0}", opt.get());
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
/* © SRSoftware 2024 */
|
||||
package de.srsoftware.cal.importer.gera;
|
||||
|
||||
import static de.srsoftware.cal.Util.*;
|
||||
import static de.srsoftware.tools.Error.error;
|
||||
import static de.srsoftware.tools.Result.transform;
|
||||
import static de.srsoftware.tools.Tag.CLASS;
|
||||
import static de.srsoftware.tools.Tag.HREF;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
import de.srsoftware.cal.BaseImporter;
|
||||
import de.srsoftware.cal.Util;
|
||||
import de.srsoftware.cal.api.Attachment;
|
||||
@@ -7,7 +16,6 @@ import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.Payload;
|
||||
import de.srsoftware.tools.Result;
|
||||
import de.srsoftware.tools.Tag;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
@@ -21,16 +29,6 @@ import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import static de.srsoftware.cal.Util.*;
|
||||
import static de.srsoftware.tools.Error.error;
|
||||
import static de.srsoftware.tools.Optionals.emptyIfNull;
|
||||
import static de.srsoftware.tools.Result.transform;
|
||||
import static de.srsoftware.tools.Tag.CLASS;
|
||||
import static de.srsoftware.tools.Tag.HREF;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static java.util.Map.of;
|
||||
|
||||
public class AtParty extends BaseImporter {
|
||||
private static final Coords COORDS_HOFWIESENPARK = new Coords(50.87802, 12.07067);
|
||||
private static final Coords COORDS_QUI = new Coords(50.87932, 12.07853);
|
||||
|
||||
@@ -1,28 +1,25 @@
|
||||
/* © SRSoftware 2024 */
|
||||
package de.srsoftware.cal.importer.leipzig;
|
||||
|
||||
import static de.srsoftware.cal.Util.parseGermanTime;
|
||||
import static de.srsoftware.tools.Error.error;
|
||||
import static de.srsoftware.tools.Result.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.Payload;
|
||||
import de.srsoftware.tools.Result;
|
||||
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.Optional;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static de.srsoftware.cal.Util.parseGermanTime;
|
||||
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.Tag.*;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
|
||||
public class Bandhaus extends BaseImporter {
|
||||
private static final Coords COORDS_BANDHAUS = new Coords(51.32498, 12.31578);
|
||||
|
||||
Reference in New Issue
Block a user