diff --git a/pom.xml b/pom.xml
index 29c50fb0..376cc64b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
uk.m0nom
adif-processor
- 1.4.3
+ 1.4.4
ADIF Processor
https://github.com/urbancamo/adif-processor
diff --git a/src/main/java/uk/m0nom/adifproc/activity/ActivityDatabaseService.java b/src/main/java/uk/m0nom/adifproc/activity/ActivityDatabaseService.java
index 3cd8590e..59878f48 100644
--- a/src/main/java/uk/m0nom/adifproc/activity/ActivityDatabaseService.java
+++ b/src/main/java/uk/m0nom/adifproc/activity/ActivityDatabaseService.java
@@ -15,6 +15,7 @@
import java.io.IOException;
import java.io.InputStream;
+import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
@@ -56,16 +57,35 @@ public ActivityDatabaseService() {
*/
public void loadData() {
readers.values().forEach(reader -> {
- InputStream inputStream = getClass().getClassLoader().getResourceAsStream(reader.getSourceFile());
- if (inputStream == null) {
- logger.severe(String.format("Can't load %s using classloader %s", reader.getSourceFile(), getClass().getClassLoader().toString()));
+ boolean readingFromRemote = false;
+ InputStream inputStream = null;
+ if (reader instanceof RemoteActivitySource remoteActivitySource) {
+ // Attempt to download the file from the remote source
+ try {
+ inputStream = URI.create(remoteActivitySource.getRemoteUrl()).toURL().openStream();
+ if (inputStream != null) {
+ logger.info(String.format("Loading %s from %s", reader.getType().getActivityName(), remoteActivitySource.getRemoteUrl()));
+ readingFromRemote = true;
+ }
+ } catch (IOException e) {
+ // problem downloading the file, so load the local copy instead
+ logger.warning(String.format("Problem downloading %s from %s", reader.getType().getActivityName(), remoteActivitySource.getRemoteUrl()));
+ }
}
+ if (!readingFromRemote) {
+ inputStream = getClass().getClassLoader().getResourceAsStream(reader.getSourceFile());
+ if (inputStream == null) {
+ logger.severe(String.format("Can't load %s using classloader %s", reader.getSourceFile(), getClass().getClassLoader().toString()));
+ }
+ }
+
try {
ActivityDatabase database = reader.read(inputStream);
databases.put(reader.getType().getActivityName(), database);
} catch (IOException e) {
logger.severe(String.format("Exception thrown reading activity databases: %s", e.getMessage()));
}
+
//logger.info(String.format("%d %s records loaded", database.size(), reader.getType().getActivityDescription()));
});
}
diff --git a/src/main/java/uk/m0nom/adifproc/activity/RemoteActivitySource.java b/src/main/java/uk/m0nom/adifproc/activity/RemoteActivitySource.java
new file mode 100644
index 00000000..a01314ea
--- /dev/null
+++ b/src/main/java/uk/m0nom/adifproc/activity/RemoteActivitySource.java
@@ -0,0 +1,5 @@
+package uk.m0nom.adifproc.activity;
+
+public interface RemoteActivitySource {
+ String getRemoteUrl();
+}
diff --git a/src/main/java/uk/m0nom/adifproc/activity/pota/PotaCsvReader.java b/src/main/java/uk/m0nom/adifproc/activity/pota/PotaCsvReader.java
index 8a66fd17..deeecf29 100644
--- a/src/main/java/uk/m0nom/adifproc/activity/pota/PotaCsvReader.java
+++ b/src/main/java/uk/m0nom/adifproc/activity/pota/PotaCsvReader.java
@@ -5,16 +5,18 @@
import uk.m0nom.adifproc.activity.Activity;
import uk.m0nom.adifproc.activity.ActivityType;
import uk.m0nom.adifproc.activity.CsvActivityReader;
+import uk.m0nom.adifproc.activity.RemoteActivitySource;
/**
* Reader for the Parks on the Air CSV extract
*/
-public class PotaCsvReader extends CsvActivityReader {
+public class PotaCsvReader extends CsvActivityReader implements RemoteActivitySource {
public PotaCsvReader(String sourceFile) {
super(ActivityType.POTA, sourceFile);
}
+
@Override
protected Activity readRecord(CSVRecord record) throws IllegalArgumentException {
PotaInfo info = new PotaInfo();
@@ -31,4 +33,9 @@ protected Activity readRecord(CSVRecord record) throws IllegalArgumentException
info.setGrid(record.get("grid"));
return info;
}
+
+ @Override
+ public String getRemoteUrl() {
+ return "https://pota.app/all_parks_ext.csv";
+ }
}