From 3bc5a861f14681dea3ed8e82a92ff05f007b3a0d Mon Sep 17 00:00:00 2001 From: Mark Wickens Date: Tue, 18 Jun 2024 00:10:18 +0100 Subject: [PATCH 1/2] - add ability to read activity database from a remote server --- pom.xml | 2 +- .../activity/ActivityDatabaseService.java | 35 ++++++++++++++----- .../activity/RemoteActivitySource.java | 5 +++ .../adifproc/activity/pota/PotaCsvReader.java | 9 ++++- 4 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 src/main/java/uk/m0nom/adifproc/activity/RemoteActivitySource.java diff --git a/pom.xml b/pom.xml index 29c50fb0..bb28fe9a 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ uk.m0nom adif-processor - 1.4.3 + 1.4.4-SNAPSHOT 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..0c97890a 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,15 +57,33 @@ 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 readFromRemote = false; + + if (reader instanceof RemoteActivitySource remoteActivitySource) { + // Attempt to download the file from the remote source + try { + InputStream inputStream = URI.create(remoteActivitySource.getRemoteUrl()).toURL().openStream(); + if (inputStream != null) { + reader.read(inputStream); + logger.info(String.format("Loaded %s from %s", reader.getType().getActivityName(), remoteActivitySource.getRemoteUrl())); + readFromRemote = 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())); + } } - 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())); + if (!readFromRemote) { + 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())); + } + 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"; + } } From 37de18cdcb382bd0eb1cd3220747d12113ec1886 Mon Sep 17 00:00:00 2001 From: Mark Wickens Date: Tue, 18 Jun 2024 10:18:55 +0100 Subject: [PATCH 2/2] - release 1.4.4 --- pom.xml | 2 +- .../activity/ActivityDatabaseService.java | 29 ++++++++++--------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index bb28fe9a..376cc64b 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ uk.m0nom adif-processor - 1.4.4-SNAPSHOT + 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 0c97890a..59878f48 100644 --- a/src/main/java/uk/m0nom/adifproc/activity/ActivityDatabaseService.java +++ b/src/main/java/uk/m0nom/adifproc/activity/ActivityDatabaseService.java @@ -57,34 +57,35 @@ public ActivityDatabaseService() { */ public void loadData() { readers.values().forEach(reader -> { - boolean readFromRemote = false; - + boolean readingFromRemote = false; + InputStream inputStream = null; if (reader instanceof RemoteActivitySource remoteActivitySource) { // Attempt to download the file from the remote source try { - InputStream inputStream = URI.create(remoteActivitySource.getRemoteUrl()).toURL().openStream(); + inputStream = URI.create(remoteActivitySource.getRemoteUrl()).toURL().openStream(); if (inputStream != null) { - reader.read(inputStream); - logger.info(String.format("Loaded %s from %s", reader.getType().getActivityName(), remoteActivitySource.getRemoteUrl())); - readFromRemote = true; + 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 (!readFromRemote) { - InputStream inputStream = getClass().getClassLoader().getResourceAsStream(reader.getSourceFile()); + 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())); - } } + + 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())); }); }