From be38739c2371ac072cc2e43e6ed30ab49029e69c Mon Sep 17 00:00:00 2001 From: LO Kam Tao Leo Date: Fri, 28 Oct 2022 20:05:09 +0100 Subject: [PATCH] Basic operation on SMART --- src/main/java/org/leolo/nrdatad/Constants.java | 1 + .../org/leolo/nrdatad/cron/ReferenceDataJob.java | 22 +++++++++++++++- .../java/org/leolo/nrdatad/db/DatabaseManager.java | 2 ++ src/main/java/org/leolo/nrdatad/db/SmartDao.java | 2 ++ .../leolo/nrdatad/db/mariadb/DatabaseManager.java | 6 +++++ .../org/leolo/nrdatad/db/mariadb/SmartDao.java | 11 ++++++++ .../java/org/leolo/nrdatad/model/SmartEvent.java | 11 ++++++++ .../org/leolo/nrdatad/model/SmartStepType.java | 10 ++++++++ src/test/java/org/leolo/nrdatad/SmartEnumTest.java | 29 ++++++++++++++++++++++ .../org/leolo/nrdatad/db/test/DatabaseManager.java | 8 ++++++ 10 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/leolo/nrdatad/SmartEnumTest.java diff --git a/src/main/java/org/leolo/nrdatad/Constants.java b/src/main/java/org/leolo/nrdatad/Constants.java index 07a083c..a129d2a 100644 --- a/src/main/java/org/leolo/nrdatad/Constants.java +++ b/src/main/java/org/leolo/nrdatad/Constants.java @@ -18,5 +18,6 @@ public final class Constants { public static class NetworkRailURI{ public static final String CORPUS_URL = "https://datafeeds.networkrail.co.uk/ntrod/SupportingFileAuthenticate?type=CORPUS"; + public static final String SMART_URL = "https://datafeeds.networkrail.co.uk/ntrod/SupportingFileAuthenticate?type=SMART"; } } diff --git a/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java b/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java index 1e800cd..35ee0c6 100644 --- a/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java +++ b/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java @@ -26,7 +26,27 @@ public class ReferenceDataJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { log.atInfo().log("Load reference data triggered at {}", context.getFireTime()); //There are 3 different kind of reference data. Create 3 thread and deal with them - new Thread(()->{processCORPUS();}).start(); +// new Thread(()->{processCORPUS();}).start(); + new Thread(()->{processSMART();}).start(); + } + + private void processSMART() { + ConfigurationManager conf = ConfigurationManager.getInstance(); + log.atInfo().log("Loading SMART"); + String json = null; + try { + json = HttpUtil.sendHttpRequestForGZipFile( + Constants.NetworkRailURI.SMART_URL, + conf.getProperty(Constants.Configuration.NETWORK_RAIL_USER), + conf.getProperty(Constants.Configuration.NETWORK_RAIL_PASSWORD) + ); + } catch (IOException|URISyntaxException e) { + log.atError().withThrowable(e).log("Error when getting CORPUS data"); + return; + } + JSONObject rootObj = new JSONObject(json); + JSONArray rootArray = rootObj.getJSONArray("BERTHDATA"); + log.atInfo().log("{} entries found", rootArray.length()); } private void processCORPUS(){ diff --git a/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java b/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java index 3a6684d..3f77e19 100644 --- a/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java +++ b/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java @@ -14,4 +14,6 @@ public interface DatabaseManager { public MetadataDao getMetadataDao(); public CorpusDao getCORPUSDao(); + + public SmartDao getSmartDao(); } diff --git a/src/main/java/org/leolo/nrdatad/db/SmartDao.java b/src/main/java/org/leolo/nrdatad/db/SmartDao.java index 8105adf..a7cec0a 100644 --- a/src/main/java/org/leolo/nrdatad/db/SmartDao.java +++ b/src/main/java/org/leolo/nrdatad/db/SmartDao.java @@ -13,6 +13,8 @@ public abstract class SmartDao extends BaseDao{ public abstract void add(Smart smart) throws SQLException; + public abstract void truncateTable() throws SQLException; + public void addAll(Collection smarts) throws SQLException{ for(Smart smart: smarts){ add(smart); diff --git a/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java b/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java index a990f42..cc94d1b 100644 --- a/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java +++ b/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java @@ -5,6 +5,7 @@ import org.apache.logging.log4j.Logger; import org.leolo.nrdatad.ConfigurationManager; import org.leolo.nrdatad.db.CorpusDao; import org.leolo.nrdatad.db.MetadataDao; +import org.leolo.nrdatad.db.SmartDao; import org.mariadb.jdbc.MariaDbPoolDataSource; import java.sql.*; @@ -71,4 +72,9 @@ public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager{ public CorpusDao getCORPUSDao() { return new org.leolo.nrdatad.db.mariadb.CorpusDao(this); } + + @Override + public SmartDao getSmartDao() { + return new org.leolo.nrdatad.db.mariadb.SmartDao(this); + } } diff --git a/src/main/java/org/leolo/nrdatad/db/mariadb/SmartDao.java b/src/main/java/org/leolo/nrdatad/db/mariadb/SmartDao.java index bc651df..8db8550 100644 --- a/src/main/java/org/leolo/nrdatad/db/mariadb/SmartDao.java +++ b/src/main/java/org/leolo/nrdatad/db/mariadb/SmartDao.java @@ -6,6 +6,7 @@ import org.leolo.nrdatad.model.Smart; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.sql.Statement; import java.util.Collection; public class SmartDao extends org.leolo.nrdatad.db.SmartDao { @@ -72,4 +73,14 @@ public class SmartDao extends org.leolo.nrdatad.db.SmartDao { conn.commit(); } } + + @Override + public void truncateTable() throws SQLException { + try( + Connection conn = getConnection(); + Statement stmt = conn.createStatement() + ){ + stmt.executeUpdate("TRUNCATE TABLE smart"); + } + } } diff --git a/src/main/java/org/leolo/nrdatad/model/SmartEvent.java b/src/main/java/org/leolo/nrdatad/model/SmartEvent.java index 977e4a5..54afeaa 100644 --- a/src/main/java/org/leolo/nrdatad/model/SmartEvent.java +++ b/src/main/java/org/leolo/nrdatad/model/SmartEvent.java @@ -1,5 +1,7 @@ package org.leolo.nrdatad.model; +import org.jetbrains.annotations.NotNull; + public enum SmartEvent { ARRIVE_UP ("A"), DEPART_UP ("B"), @@ -17,4 +19,13 @@ public enum SmartEvent { return code; } + public static SmartEvent parseCode(@NotNull String code){ + for(SmartEvent se: SmartEvent.values()){ + if(code.equalsIgnoreCase(se.code)){ + return se; + } + } + return null; + } + } diff --git a/src/main/java/org/leolo/nrdatad/model/SmartStepType.java b/src/main/java/org/leolo/nrdatad/model/SmartStepType.java index 3e67e76..0b1a7a9 100644 --- a/src/main/java/org/leolo/nrdatad/model/SmartStepType.java +++ b/src/main/java/org/leolo/nrdatad/model/SmartStepType.java @@ -1,5 +1,7 @@ package org.leolo.nrdatad.model; +import org.jetbrains.annotations.NotNull; + public enum SmartStepType { /** * This is a move between directly adjacent berths, and is the preferred type of movement. The time reported to @@ -50,4 +52,12 @@ public enum SmartStepType { public String getCode() { return code; } + + public static SmartStepType parseCode(@NotNull String code){ + for(SmartStepType sst: SmartStepType.values()){ + if(code.equalsIgnoreCase(sst.code)) + return sst; + } + return null; + } } diff --git a/src/test/java/org/leolo/nrdatad/SmartEnumTest.java b/src/test/java/org/leolo/nrdatad/SmartEnumTest.java new file mode 100644 index 0000000..5a8bad9 --- /dev/null +++ b/src/test/java/org/leolo/nrdatad/SmartEnumTest.java @@ -0,0 +1,29 @@ +package org.leolo.nrdatad; + +import org.junit.Test; +import org.leolo.nrdatad.model.SmartEvent; +import org.leolo.nrdatad.model.SmartStepType; + +import static org.junit.Assert.*; + +public class SmartEnumTest { + + @Test + public void testSmartStepType(){ + assertEquals(SmartStepType.BETWEEN, SmartStepType.parseCode("B")); + assertEquals(SmartStepType.BETWEEN, SmartStepType.parseCode("b")); + assertNull(SmartStepType.parseCode("Q")); + assertNull(SmartStepType.parseCode("X")); + assertNull(SmartStepType.parseCode("")); + } + + @Test + public void testSmartEvent(){ + assertEquals(SmartEvent.ARRIVE_UP, SmartEvent.parseCode("A")); + assertEquals(SmartEvent.ARRIVE_UP, SmartEvent.parseCode("a")); + assertNull(SmartEvent.parseCode("Q")); + assertNull(SmartEvent.parseCode("X")); + assertNull(SmartEvent.parseCode("")); + + } +} diff --git a/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java b/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java index 5ce8b2a..cb53841 100644 --- a/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java +++ b/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java @@ -2,6 +2,7 @@ package org.leolo.nrdatad.db.test; import org.leolo.nrdatad.db.CorpusDao; import org.leolo.nrdatad.db.MetadataDao; +import org.leolo.nrdatad.db.SmartDao; import java.sql.Connection; import java.sql.SQLException; @@ -23,6 +24,11 @@ public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager { } @Override + public SmartDao getSmartDao() { + return null; + } + + @Override public MetadataDao getMetadataDao() { return null; } @@ -31,4 +37,6 @@ public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager { public CorpusDao getCORPUSDao() { return null; } + + }