Browse Source

moved methods to Util

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
main
Stephan Richter 4 months ago
parent
commit
d48b9097f4
  1. 1
      de.srsoftware.cal.base/build.gradle.kts
  2. 42
      de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/BaseImporter.java
  3. 4
      de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/SinglePageImporter.java
  4. 37
      de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/Util.java
  5. 20
      de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/gera/AtParty.java
  6. 17
      de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/leipzig/Bandhaus.java

1
de.srsoftware.cal.base/build.gradle.kts

@ -3,6 +3,7 @@ description = "OpenCloudCal : Base" @@ -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")

42
de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/BaseImporter.java

@ -3,18 +3,14 @@ package de.srsoftware.cal; @@ -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 { @@ -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 { @@ -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 { @@ -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();

4
de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/SinglePageImporter.java

@ -26,8 +26,8 @@ public abstract class SinglePageImporter extends BaseImporter{ @@ -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();

37
de.srsoftware.cal.base/src/main/java/de/srsoftware/cal/Util.java

@ -8,11 +8,10 @@ import static java.lang.System.Logger.Level.WARNING; @@ -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 { @@ -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 { @@ -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 { @@ -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());

20
de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/gera/AtParty.java

@ -1,5 +1,14 @@ @@ -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; @@ -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; @@ -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);

17
de.srsoftware.cal.importer/src/main/java/de/srsoftware/cal/importer/leipzig/Bandhaus.java

@ -1,28 +1,25 @@ @@ -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);

Loading…
Cancel
Save