From 4bdbf01bbb16448086414bc91ec73fbd5ac3eac9 Mon Sep 17 00:00:00 2001 From: LO Kam Tao Leo Date: Sun, 2 Apr 2023 15:31:08 +0100 Subject: [PATCH] Various changes --- pom.xml | 5 ++ src/main/java/org/leolo/nrdatad/App.java | 1 - src/main/java/org/leolo/nrdatad/Constants.java | 10 ++- .../org/leolo/nrdatad/cron/ReferenceDataJob.java | 8 +- .../org/leolo/nrdatad/cron/ScheduleImportJob.java | 46 ++++++++++ .../java/org/leolo/nrdatad/db/DataSourceDao.java | 50 +++++++++++ .../java/org/leolo/nrdatad/db/DatabaseManager.java | 4 + .../org/leolo/nrdatad/db/TrainScheduleDao.java | 24 ++++++ .../leolo/nrdatad/db/mariadb/CorpusDaoImpl.java | 28 ++++--- .../nrdatad/db/mariadb/DataSourceDaoImpl.java | 36 ++++++++ .../leolo/nrdatad/db/mariadb/DatabaseManager.java | 10 +++ .../org/leolo/nrdatad/db/mariadb/SmartDaoImpl.java | 10 ++- .../nrdatad/db/mariadb/TrainScheduleDaoImpl.java | 40 +++++++++ src/main/java/org/leolo/nrdatad/model/Corpus.java | 10 +++ .../java/org/leolo/nrdatad/model/DataSource.java | 98 ++++++++++++++++++++++ src/main/java/org/leolo/nrdatad/model/Smart.java | 10 +++ .../org/leolo/nrdatad/model/TrainSchedule.java | 17 ++++ src/main/java/org/leolo/nrdatad/util/UUIDUtil.java | 19 ++++- .../org/leolo/nrdatad/db/test/DatabaseManager.java | 10 ++- .../org/leolo/nrdatad/model/TrainScheduleTest.java | 2 + 20 files changed, 416 insertions(+), 22 deletions(-) create mode 100644 src/main/java/org/leolo/nrdatad/db/DataSourceDao.java create mode 100644 src/main/java/org/leolo/nrdatad/db/TrainScheduleDao.java create mode 100644 src/main/java/org/leolo/nrdatad/db/mariadb/DataSourceDaoImpl.java create mode 100644 src/main/java/org/leolo/nrdatad/db/mariadb/TrainScheduleDaoImpl.java create mode 100644 src/main/java/org/leolo/nrdatad/model/DataSource.java diff --git a/pom.xml b/pom.xml index 6d84dec..57a9ff4 100644 --- a/pom.xml +++ b/pom.xml @@ -82,6 +82,11 @@ java-uuid-generator 4.0.1 + + jug + jug + 2.0.0 + diff --git a/src/main/java/org/leolo/nrdatad/App.java b/src/main/java/org/leolo/nrdatad/App.java index 61fd2f5..0d237b9 100644 --- a/src/main/java/org/leolo/nrdatad/App.java +++ b/src/main/java/org/leolo/nrdatad/App.java @@ -95,7 +95,6 @@ public class App { return; } loadCronJob(); - new Thread(()->{testRefData();}).start(); while(true); } diff --git a/src/main/java/org/leolo/nrdatad/Constants.java b/src/main/java/org/leolo/nrdatad/Constants.java index 068a451..af8fcfb 100644 --- a/src/main/java/org/leolo/nrdatad/Constants.java +++ b/src/main/java/org/leolo/nrdatad/Constants.java @@ -21,8 +21,12 @@ 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"; - public static final String SCHEDULE_URL = "https://datafeeds.networkrail.co.uk/ntrod/CifFileAuthenticate?type=CIF_ALL_FULL_DAILY&day=toc-full"; + public static final String CORPUS_URL = "https://publicdatafeeds.networkrail.co.uk/ntrod/SupportingFileAuthenticate?type=CORPUS"; + public static final String SMART_URL = "https://publicdatafeeds.networkrail.co.uk/ntrod/SupportingFileAuthenticate?type=SMART"; + public static final String SCHEDULE_URL = "https://publicdatafeeds.networkrail.co.uk/ntrod/CifFileAuthenticate?type=CIF_ALL_FULL_DAILY&day=toc-full"; + } + + public static class DataSourceNames { + public static final String SOURCE_NETWORK_RAIL = "Network Rail"; } } diff --git a/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java b/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java index 6f78246..d1cf4d2 100644 --- a/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java +++ b/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java @@ -8,6 +8,7 @@ import org.leolo.nrdatad.ConfigurationManager; import org.leolo.nrdatad.Constants; import org.leolo.nrdatad.db.CorpusDao; import org.leolo.nrdatad.model.Corpus; +import org.leolo.nrdatad.model.DataSource; import org.leolo.nrdatad.model.Smart; import org.leolo.nrdatad.util.HttpUtil; import org.quartz.Job; @@ -50,6 +51,7 @@ public class ReferenceDataJob implements Job { JSONArray rootArray = rootObj.getJSONArray("BERTHDATA"); log.atInfo().log("{} entries found", rootArray.length()); Collection smarts = new ArrayList<>(); + DataSource ds = conf.getDatabaseManager().getDataSourceDao().generateAndInsertUUID(Constants.DataSourceNames.SOURCE_NETWORK_RAIL,"SMART", false); for (int i = 0; i < rootArray.length(); i++) { JSONObject obj = rootArray.getJSONObject(i); Smart smart = Smart.parseJSON(obj); @@ -57,6 +59,7 @@ public class ReferenceDataJob implements Job { log.atInfo().log("Improper SMART record: {}", obj); continue; } + smart.setDataSource(ds); smarts.add(smart); } try { @@ -86,9 +89,12 @@ public class ReferenceDataJob implements Job { JSONArray rootArray = rootObj.getJSONArray("TIPLOCDATA"); log.atInfo().log("{} entries found", rootArray.length()); ArrayList corpusList = new ArrayList<>(); + DataSource ds = conf.getDatabaseManager().getDataSourceDao().generateAndInsertUUID(Constants.DataSourceNames.SOURCE_NETWORK_RAIL,"CORPUS", false); for(int i=0;i schedules = new ArrayList<>(); + while(true){ + String line = br.readLine(); + if(line == null){ + break; + } + TrainSchedule trainSchedule = TrainSchedule.parseJSON(line); + if(Character.isDigit(trainSchedule.getTrainStatus().charAt(0))){ + trainSchedule.setSchedeuleType("WTT"); + }else{ + trainSchedule.setSchedeuleType("STP"); + } + schedules.add(trainSchedule); + if(schedules.size()>1000){ + //Replace + log.atDebug().log("Processed a batch of SCHEDULE"); + schedules.clear(); + } + } + //Replace + log.atDebug().log("Processed last batch of SCHEDULE"); + } catch (IOException e){ + log.atError().withThrowable(e).log("Error when reading file."); + } + try{ + new File(baseTempDir, file).delete(); + } catch (Exception e){ + log.atWarn().withThrowable(e).log("Unable to remove temp file {}", file); + } + } } diff --git a/src/main/java/org/leolo/nrdatad/db/DataSourceDao.java b/src/main/java/org/leolo/nrdatad/db/DataSourceDao.java new file mode 100644 index 0000000..68abf5b --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/db/DataSourceDao.java @@ -0,0 +1,50 @@ +package org.leolo.nrdatad.db; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.leolo.nrdatad.model.DataSource; + +import java.sql.SQLException; +import java.util.Date; + +public abstract class DataSourceDao extends BaseDao{ + + private Logger log = LogManager.getLogger(); + + public DataSourceDao(DatabaseManager manager) { + super(manager); + } + + public abstract void insert(DataSource ds) throws SQLException; + + public DataSource generateAndInsertUUID(String provider, String streamName, boolean isMessage, Date startDate, String messageId){ + DataSource ds = new DataSource(provider, streamName, isMessage, startDate, messageId); + tryInsert(ds); + return ds; + } + + public DataSource generateAndInsertUUID(String provider, String streamName, boolean isMessage){ + DataSource ds = new DataSource(provider, streamName, isMessage); + tryInsert(ds); + return ds; + } + + public DataSource generateAndInsertUUID(String provider, String streamName, boolean isMessage, String messageId){ + DataSource ds = new DataSource(provider, streamName, isMessage, messageId); + tryInsert(ds); + return ds; + } + + private void tryInsert(DataSource ds) { + new Thread(()->{ + log.atInfo().log("Trying to insert record {}", ds.getUuid()); + try{ + insert(ds); + } catch (SQLException e){ + log.atWarn().withThrowable(e).log("Unable to insert data source record {}", ds.getUuid()); + } + }).start(); + + } + +} diff --git a/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java b/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java index c5bacfe..0943748 100644 --- a/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java +++ b/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java @@ -20,4 +20,8 @@ public interface DatabaseManager { public TiplocDao getTiplocDao(); public TrainAssociationDao getTrainAssociationDao(); + + public TrainScheduleDao getTrainScheduleDao(); + + public DataSourceDao getDataSourceDao(); } diff --git a/src/main/java/org/leolo/nrdatad/db/TrainScheduleDao.java b/src/main/java/org/leolo/nrdatad/db/TrainScheduleDao.java new file mode 100644 index 0000000..a84735a --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/db/TrainScheduleDao.java @@ -0,0 +1,24 @@ +package org.leolo.nrdatad.db; + +import org.leolo.nrdatad.model.TrainSchedule; + +import java.sql.SQLException; +import java.util.Collection; + +public abstract class TrainScheduleDao extends BaseDao { + + public TrainScheduleDao(DatabaseManager databaseManager){ + super(databaseManager); + } + + public abstract void insert(TrainSchedule schedule) throws SQLException; + + public void insertAll(Collection schedules) throws SQLException{ + for(TrainSchedule ts: schedules){ + insert(ts); + } + } + + public abstract boolean hasSUID(String suid) throws SQLException; + +} diff --git a/src/main/java/org/leolo/nrdatad/db/mariadb/CorpusDaoImpl.java b/src/main/java/org/leolo/nrdatad/db/mariadb/CorpusDaoImpl.java index eab1e1f..6455133 100644 --- a/src/main/java/org/leolo/nrdatad/db/mariadb/CorpusDaoImpl.java +++ b/src/main/java/org/leolo/nrdatad/db/mariadb/CorpusDaoImpl.java @@ -99,8 +99,8 @@ public class CorpusDaoImpl extends org.leolo.nrdatad.db.CorpusDao { try( Connection conn = getConnection(); PreparedStatement pstmt = conn.prepareStatement( - "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, nlc_code, `desc`, short_desc) " + - "VALUES (?,?,?,?,?,?,?)") + "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, nlc_code, `desc`, short_desc, data_source) " + + "VALUES (?,?,?,?,?,?,?,?)") ){ setString(pstmt, 1, corpus.getStanoxCode()); setString(pstmt, 2, corpus.getUicCode()); @@ -109,6 +109,7 @@ public class CorpusDaoImpl extends org.leolo.nrdatad.db.CorpusDao { setString(pstmt, 5, corpus.getNlcCode()); setString(pstmt, 6, corpus.getLongDescription()); setString(pstmt, 7, corpus.getShortDescription()); + setString(pstmt, 8, corpus.getDataSource().getUuid().toString()); pstmt.executeUpdate(); conn.commit(); } @@ -119,8 +120,8 @@ public class CorpusDaoImpl extends org.leolo.nrdatad.db.CorpusDao { try( Connection conn = getConnection(); PreparedStatement pstmt = conn.prepareStatement( - "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, nlc_code, `desc`, short_desc) " + - "VALUES (?,?,?,?,?,?,?)") + "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, nlc_code, `desc`, short_desc, data_source) " + + "VALUES (?,?,?,?,?,?,?,?)") ){ for(Corpus corpus:datas) { setString(pstmt, 1, corpus.getStanoxCode()); @@ -130,6 +131,7 @@ public class CorpusDaoImpl extends org.leolo.nrdatad.db.CorpusDao { setString(pstmt, 5, corpus.getNlcCode()); setString(pstmt, 6, corpus.getLongDescription()); setString(pstmt, 7, corpus.getShortDescription()); + setString(pstmt, 8, corpus.getDataSource().getUuid().toString()); pstmt.addBatch(); } pstmt.executeBatch(); @@ -145,11 +147,11 @@ public class CorpusDaoImpl extends org.leolo.nrdatad.db.CorpusDao { try( Connection conn = getConnection(); PreparedStatement psIns = conn.prepareStatement( - "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, `desc`, short_desc, nlc_code) " + - "VALUES (?,?,?,?,?,?,?)"); + "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, `desc`, short_desc, data_source, nlc_code) " + + "VALUES (?,?,?,?,?,?,?,?)"); PreparedStatement psUpd = conn.prepareStatement( "UPDATE corpus " + - "SET stanox=?, uic_code=?, crs_code=?, tiploc_code=?, `desc`=?, short_desc=? " + + "SET stanox=?, uic_code=?, crs_code=?, tiploc_code=?, `desc`=?, short_desc=?, data_source = ? " + "WHERE nlc_code = ?" ) ){ @@ -158,17 +160,21 @@ public class CorpusDaoImpl extends org.leolo.nrdatad.db.CorpusDao { Corpus existing = searchCORPUSByNlcCode(corpus.getNlcCode()); PreparedStatement stmt = null; if(corpus.equals(existing)){ + log.atDebug().log("CORPUS {} not modified", corpus.getNlcCode()); continue; }else if(existing==null){ if(pendingInsert.contains(corpus.getNlcCode())){ + log.atDebug().log("CORPUS {} already arranged for insert", corpus.getNlcCode()); continue; } pendingInsert.add(corpus.getNlcCode()); stmt = psIns; insertCount++; + log.atDebug().log("CORPUS {} to be inserted", corpus.getNlcCode()); }else{ stmt = psUpd; updateCount++; + log.atDebug().log("CORPUS {} to be updated", corpus.getNlcCode()); } setString(stmt, 1, corpus.getStanoxCode()); setString(stmt, 2, corpus.getUicCode()); @@ -176,7 +182,8 @@ public class CorpusDaoImpl extends org.leolo.nrdatad.db.CorpusDao { setString(stmt, 4, corpus.getTiplocCode()); setString(stmt, 5, corpus.getLongDescription()); setString(stmt, 6, corpus.getShortDescription()); - setString(stmt, 7, corpus.getNlcCode()); + setString(stmt, 7, corpus.getDataSource().getUuid().toString()); + setString(stmt, 8, corpus.getNlcCode()); stmt.addBatch(); } if(insertCount>0){ @@ -225,7 +232,7 @@ public class CorpusDaoImpl extends org.leolo.nrdatad.db.CorpusDao { Connection conn = getConnection(); PreparedStatement pstmt = conn.prepareStatement( "UPDATE corpus " + - "SET stanox=?, uic_code=?, crs_code=?, tiploc_code=?, `desc`=?, short_desc=? " + + "SET stanox=?, uic_code=?, crs_code=?, tiploc_code=?, `desc`=?, short_desc=?, data_source = ? " + "WHERE nlc_code = ?" ) ){ @@ -235,7 +242,8 @@ public class CorpusDaoImpl extends org.leolo.nrdatad.db.CorpusDao { setString(pstmt, 4, corpus.getTiplocCode()); setString(pstmt, 5, corpus.getLongDescription()); setString(pstmt, 6, corpus.getShortDescription()); - setString(pstmt, 7, corpus.getNlcCode()); + setString(pstmt, 7, corpus.getDataSource().getUuid().toString()); + setString(pstmt, 8, corpus.getNlcCode()); pstmt.executeUpdate(); } } diff --git a/src/main/java/org/leolo/nrdatad/db/mariadb/DataSourceDaoImpl.java b/src/main/java/org/leolo/nrdatad/db/mariadb/DataSourceDaoImpl.java new file mode 100644 index 0000000..29413b8 --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/db/mariadb/DataSourceDaoImpl.java @@ -0,0 +1,36 @@ +package org.leolo.nrdatad.db.mariadb; + +import org.leolo.nrdatad.db.DataSourceDao; +import org.leolo.nrdatad.db.DatabaseManager; +import org.leolo.nrdatad.model.DataSource; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public class DataSourceDaoImpl extends DataSourceDao { + + public DataSourceDaoImpl(DatabaseManager manager){ + super(manager); + } + + @Override + public void insert(DataSource ds) throws SQLException { + try( + Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement( + "INSERT INTO data_source (uuid, provider, data_stream, is_messsage, start_date, message_id) " + + "VALUES (?,?,?,?,?,?)" + ) + ){ + setString(stmt,1, ds.getUuid().toString()); + setString(stmt,2, ds.getProvider()); + setString(stmt,3, ds.getStreamName()); + setString(stmt,4, ds.isMessage()?"Y":"N"); + setDate (stmt,5, ds.getStartDate()); + setString(stmt,6, ds.getMessageId()); + stmt.executeUpdate(); + conn.commit(); + } + } +} 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 0c54698..81cb15a 100644 --- a/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java +++ b/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java @@ -85,4 +85,14 @@ public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager{ public TrainAssociationDao getTrainAssociationDao() { return new TrainAssociationDaoImpl(this); } + + @Override + public TrainScheduleDao getTrainScheduleDao() { + return null; + } + + @Override + public DataSourceDao getDataSourceDao() { + return new DataSourceDaoImpl(this); + } } diff --git a/src/main/java/org/leolo/nrdatad/db/mariadb/SmartDaoImpl.java b/src/main/java/org/leolo/nrdatad/db/mariadb/SmartDaoImpl.java index dd25cf9..1d9b9ea 100644 --- a/src/main/java/org/leolo/nrdatad/db/mariadb/SmartDaoImpl.java +++ b/src/main/java/org/leolo/nrdatad/db/mariadb/SmartDaoImpl.java @@ -28,8 +28,8 @@ public class SmartDaoImpl extends org.leolo.nrdatad.db.SmartDao { PreparedStatement pstmt = conn.prepareStatement( "INSERT INTO smart (" + "td, from_berth, to_berth, from_line, to_line, breth_offset, platform, event, route, " + - "stanox, station_name, step_type, comment" + - ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)") + "stanox, station_name, step_type, comment, data_source" + + ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)") ){ setString(pstmt, 1, smart.getTd()); setString(pstmt, 2, smart.getFromBerth()); @@ -44,6 +44,7 @@ public class SmartDaoImpl extends org.leolo.nrdatad.db.SmartDao { setString(pstmt, 11, smart.getStationName()); setString(pstmt, 12, smart.getStepType().getCode()); setString(pstmt, 13, smart.getComment()); + setString(pstmt, 14, smart.getDataSource().getUuid().toString()); pstmt.executeUpdate(); conn.commit(); } @@ -56,8 +57,8 @@ public class SmartDaoImpl extends org.leolo.nrdatad.db.SmartDao { PreparedStatement pstmt = conn.prepareStatement( "INSERT INTO smart (" + "td, from_berth, to_berth, from_line, to_line, breth_offset, platform, event, route, " + - "stanox, station_name, step_type, comment" + - ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)") + "stanox, station_name, step_type, comment, data_source" + + ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?, ?)") ){ for(Smart smart:smarts){ setString(pstmt, 1, smart.getTd()); @@ -73,6 +74,7 @@ public class SmartDaoImpl extends org.leolo.nrdatad.db.SmartDao { setString(pstmt, 11, smart.getStationName()); setString(pstmt, 12, smart.getStepType().getCode()); setString(pstmt, 13, smart.getComment()); + setString(pstmt, 14, smart.getDataSource().getUuid().toString()); pstmt.addBatch(); } pstmt.executeBatch(); diff --git a/src/main/java/org/leolo/nrdatad/db/mariadb/TrainScheduleDaoImpl.java b/src/main/java/org/leolo/nrdatad/db/mariadb/TrainScheduleDaoImpl.java new file mode 100644 index 0000000..d3e8474 --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/db/mariadb/TrainScheduleDaoImpl.java @@ -0,0 +1,40 @@ +package org.leolo.nrdatad.db.mariadb; + +import org.leolo.nrdatad.db.DatabaseManager; +import org.leolo.nrdatad.db.TrainScheduleDao; +import org.leolo.nrdatad.model.TrainSchedule; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public class TrainScheduleDaoImpl extends TrainScheduleDao { + public TrainScheduleDaoImpl(DatabaseManager databaseManager) { + super(databaseManager); + } + + @Override + public void insert(TrainSchedule schedule) throws SQLException { + //Insert into train_schedule, train_schedule_location + try(Connection conn = getConnection()){ + //Insert the train_schedule first + try ( + PreparedStatement pstmt = conn.prepareStatement( + "INSERT INTO train_schedule (suid, train_uid, start_date, end_date, bank_holiday, signal_id, rsid, train_status, train_category, power_type, planned_speed, operating_character, class_avail, sleeper, reservation, catering, atoc_code) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" + ) + ){ + setString(pstmt, 1, schedule.getSUID()); + setInt (pstmt, 2, 1); //This is the first one + setString(pstmt, 3, schedule.getTrainUid()); + char status = schedule.getTrainStatus().charAt(0); + + + } + } + } + + @Override + public boolean hasSUID(String suid) throws SQLException { + return false; + } +} diff --git a/src/main/java/org/leolo/nrdatad/model/Corpus.java b/src/main/java/org/leolo/nrdatad/model/Corpus.java index cdc3ab0..cd7c2a6 100644 --- a/src/main/java/org/leolo/nrdatad/model/Corpus.java +++ b/src/main/java/org/leolo/nrdatad/model/Corpus.java @@ -15,6 +15,16 @@ public class Corpus { private String longDescription; private String shortDescription; + private DataSource dataSource; + + public DataSource getDataSource() { + return dataSource; + } + + public void setDataSource(DataSource dataSource) { + this.dataSource = dataSource; + } + public String getStanoxCode() { return stanoxCode; } diff --git a/src/main/java/org/leolo/nrdatad/model/DataSource.java b/src/main/java/org/leolo/nrdatad/model/DataSource.java new file mode 100644 index 0000000..6204526 --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/model/DataSource.java @@ -0,0 +1,98 @@ +package org.leolo.nrdatad.model; + +import org.leolo.nrdatad.util.UUIDUtil; + +import java.util.Date; +import java.util.UUID; + +public class DataSource { + + private UUID uuid; + private String provider; + private String streamName; + private boolean isMessage; + private Date startDate; + private String messageId; + + public DataSource(){ + setRandomUuid(); + } + + public DataSource(String provider, String streamName, boolean isMessage, Date startDate, String messageId) { + setRandomUuid(); + this.provider = provider; + this.streamName = streamName; + this.isMessage = isMessage; + this.startDate = startDate; + this.messageId = messageId; + } + + public DataSource(String provider, String streamName, boolean isMessage) { + setRandomUuid(); + this.provider = provider; + this.streamName = streamName; + this.isMessage = isMessage; + this.startDate = new Date(); + } + + public DataSource(String provider, String streamName, boolean isMessage, String messageId) { + setRandomUuid(); + this.provider = provider; + this.streamName = streamName; + this.isMessage = isMessage; + this.startDate = new Date(); + this.messageId = messageId; + } + + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + public String getStreamName() { + return streamName; + } + + public void setStreamName(String streamName) { + this.streamName = streamName; + } + + public boolean isMessage() { + return isMessage; + } + + public void setMessage(boolean message) { + isMessage = message; + } + + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public String getMessageId() { + return messageId; + } + + public void setMessageId(String messageId) { + this.messageId = messageId; + } + + public UUID getUuid() { + return uuid; + } + + public void setUuid(UUID uuid) { + this.uuid = uuid; + } + + public void setRandomUuid(){ + this.uuid = UUIDUtil.getNextUUID(); + } +} diff --git a/src/main/java/org/leolo/nrdatad/model/Smart.java b/src/main/java/org/leolo/nrdatad/model/Smart.java index d098416..592d65c 100644 --- a/src/main/java/org/leolo/nrdatad/model/Smart.java +++ b/src/main/java/org/leolo/nrdatad/model/Smart.java @@ -20,6 +20,16 @@ public class Smart { private SmartStepType stepType; private String comment; + private DataSource dataSource; + + public DataSource getDataSource() { + return dataSource; + } + + public void setDataSource(DataSource dataSource) { + this.dataSource = dataSource; + } + public int getSmartId() { return smartId; } diff --git a/src/main/java/org/leolo/nrdatad/model/TrainSchedule.java b/src/main/java/org/leolo/nrdatad/model/TrainSchedule.java index 000d90c..826546f 100644 --- a/src/main/java/org/leolo/nrdatad/model/TrainSchedule.java +++ b/src/main/java/org/leolo/nrdatad/model/TrainSchedule.java @@ -24,6 +24,8 @@ public class TrainSchedule { private Date endDate; private TrainScheduleSector sector; + private String schedeuleType; + public String getSUID(){ TUIDDateFormat tuiddf = new TUIDDateFormat(); return trainUid+tuiddf.format(startDate)+tuiddf.format(endDate)+shortTermPlanningIndicator.getCode(); @@ -131,8 +133,23 @@ public class TrainSchedule { ts.startDate = DateUtil.parseDate(object.optString("schedule_start_date")); ts.endDate = DateUtil.parseDate(object.optString("schedule_end_date")); ts.sector = TrainScheduleSector.parseJSON(object.getJSONObject("schedule_segment")); + ts.trainStatus = object.optString("train_status"); return ts; } + public int getScheduleVersion() { + return scheduleVersion; + } + + public void setScheduleVersion(int scheduleVersion) { + this.scheduleVersion = scheduleVersion; + } + public String getSchedeuleType() { + return schedeuleType; + } + + public void setSchedeuleType(String schedeuleType) { + this.schedeuleType = schedeuleType; + } } diff --git a/src/main/java/org/leolo/nrdatad/util/UUIDUtil.java b/src/main/java/org/leolo/nrdatad/util/UUIDUtil.java index 995b771..62865a1 100644 --- a/src/main/java/org/leolo/nrdatad/util/UUIDUtil.java +++ b/src/main/java/org/leolo/nrdatad/util/UUIDUtil.java @@ -1,11 +1,26 @@ package org.leolo.nrdatad.util; +import com.fasterxml.uuid.EthernetAddress; +import com.fasterxml.uuid.Generators; +import org.leolo.nrdatad.ConfigurationManager; + import java.util.UUID; public class UUIDUtil { - + + private static EthernetAddress ethernetAddress; + public static UUID getNextUUID(){ - return null; + return Generators.timeBasedGenerator(getEthernetAddress()).generate(); + } + + private static synchronized EthernetAddress getEthernetAddress() { + if(ethernetAddress==null){ + //Get it from conf + String ethAddr = ConfigurationManager.getInstance().getEthAddress(); + ethernetAddress = new EthernetAddress(ethAddr); + } + return ethernetAddress; } } 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 7d7dc43..59ed495 100644 --- a/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java +++ b/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java @@ -38,6 +38,11 @@ public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager { } @Override + public TrainScheduleDao getTrainScheduleDao() { + return null; + } + + @Override public MetadataDao getMetadataDao() { return null; } @@ -47,5 +52,8 @@ public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager { return null; } - + @Override + public DataSourceDao getDataSourceDao() { + return null; + } } diff --git a/src/test/java/org/leolo/nrdatad/model/TrainScheduleTest.java b/src/test/java/org/leolo/nrdatad/model/TrainScheduleTest.java index c9da65c..0c1a9c4 100644 --- a/src/test/java/org/leolo/nrdatad/model/TrainScheduleTest.java +++ b/src/test/java/org/leolo/nrdatad/model/TrainScheduleTest.java @@ -26,6 +26,7 @@ public class TrainScheduleTest { assertEquals(sdf.parse("20230105"), ts.getEndDate()); assertEquals("0011000", ts.getRunsOn()); assertEquals("",ts.getRunsOnBankHoliday()); + assertEquals("1", ts.getSchedeuleType()); //Sector Info TrainScheduleSector tss = ts.getSector(); assertEquals("", tss.getServiceBranding()); @@ -122,6 +123,7 @@ public class TrainScheduleTest { assertEquals(sdf.parse("20230105"), ts.getEndDate()); assertEquals("0011000", ts.getRunsOn()); assertEquals("",ts.getRunsOnBankHoliday()); + assertEquals("1", ts.getSchedeuleType()); //Sector Info TrainScheduleSector tss = ts.getSector(); assertEquals("", tss.getServiceBranding());