From 32fdd0e4ae4016bc6b140acbeae096e11d93fb36 Mon Sep 17 00:00:00 2001 From: LO Kam Tao Leo Date: Thu, 27 Oct 2022 19:48:05 +0100 Subject: [PATCH] Refactor code and adding SMART data --- src/main/java/org/leolo/nrdatad/App.java | 10 +- .../org/leolo/nrdatad/cron/ReferenceDataJob.java | 10 +- src/main/java/org/leolo/nrdatad/db/BaseDao.java | 4 + src/main/java/org/leolo/nrdatad/db/CORPUSDao.java | 147 -------- src/main/java/org/leolo/nrdatad/db/CorpusDao.java | 146 ++++++++ .../java/org/leolo/nrdatad/db/DatabaseManager.java | 3 +- src/main/java/org/leolo/nrdatad/db/SmartDao.java | 23 ++ .../org/leolo/nrdatad/db/mariadb/CORPUSDao.java | 379 --------------------- .../org/leolo/nrdatad/db/mariadb/CorpusDao.java | 379 +++++++++++++++++++++ .../leolo/nrdatad/db/mariadb/DatabaseManager.java | 6 +- .../org/leolo/nrdatad/db/mariadb/SmartDao.java | 75 ++++ src/main/java/org/leolo/nrdatad/model/CORPUS.java | 97 ------ src/main/java/org/leolo/nrdatad/model/Corpus.java | 97 ++++++ src/main/java/org/leolo/nrdatad/model/Smart.java | 131 +++++++ .../java/org/leolo/nrdatad/model/SmartEvent.java | 20 ++ .../org/leolo/nrdatad/model/SmartStepType.java | 53 +++ .../org/leolo/nrdatad/db/test/DatabaseManager.java | 4 +- 17 files changed, 944 insertions(+), 640 deletions(-) delete mode 100644 src/main/java/org/leolo/nrdatad/db/CORPUSDao.java create mode 100644 src/main/java/org/leolo/nrdatad/db/CorpusDao.java create mode 100644 src/main/java/org/leolo/nrdatad/db/SmartDao.java delete mode 100644 src/main/java/org/leolo/nrdatad/db/mariadb/CORPUSDao.java create mode 100644 src/main/java/org/leolo/nrdatad/db/mariadb/CorpusDao.java create mode 100644 src/main/java/org/leolo/nrdatad/db/mariadb/SmartDao.java delete mode 100644 src/main/java/org/leolo/nrdatad/model/CORPUS.java create mode 100644 src/main/java/org/leolo/nrdatad/model/Corpus.java create mode 100644 src/main/java/org/leolo/nrdatad/model/Smart.java create mode 100644 src/main/java/org/leolo/nrdatad/model/SmartEvent.java create mode 100644 src/main/java/org/leolo/nrdatad/model/SmartStepType.java diff --git a/src/main/java/org/leolo/nrdatad/App.java b/src/main/java/org/leolo/nrdatad/App.java index 96d70aa..dce246b 100644 --- a/src/main/java/org/leolo/nrdatad/App.java +++ b/src/main/java/org/leolo/nrdatad/App.java @@ -4,10 +4,10 @@ package org.leolo.nrdatad; import org.apache.commons.cli.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.leolo.nrdatad.db.CORPUSDao; +import org.leolo.nrdatad.db.CorpusDao; import org.leolo.nrdatad.db.DatabaseManager; import org.leolo.nrdatad.cron.ReferenceDataJob; -import org.leolo.nrdatad.model.CORPUS; +import org.leolo.nrdatad.model.Corpus; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; @@ -101,13 +101,13 @@ public class App { private void testRefData() { log.atInfo().log("Testing reference data"); ConfigurationManager conf = ConfigurationManager.getInstance(); - CORPUSDao.Query query = new CORPUSDao.QueryBuilder() + CorpusDao.Query query = new CorpusDao.QueryBuilder() .addCrsCode("ECR").addCrsCode("VIC") .addDescription("croydon").build(); try { - Collection list = conf.getDatabaseManager().getCORPUSDao().executeQuery(query); + Collection list = conf.getDatabaseManager().getCORPUSDao().executeQuery(query); log.atDebug().log("{} entries found", list.size()); - for(CORPUS corpus:list){ + for(Corpus corpus:list){ log.atDebug().log("Found entry : {}", corpus); } } catch (SQLException e) { diff --git a/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java b/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java index bfa46ff..1e800cd 100644 --- a/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java +++ b/src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java @@ -6,8 +6,8 @@ import org.json.JSONArray; import org.json.JSONObject; 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.db.CorpusDao; +import org.leolo.nrdatad.model.Corpus; import org.leolo.nrdatad.util.HttpUtil; import org.quartz.Job; import org.quartz.JobExecutionContext; @@ -46,10 +46,10 @@ public class ReferenceDataJob implements Job { JSONObject rootObj = new JSONObject(json); JSONArray rootArray = rootObj.getJSONArray("TIPLOCDATA"); log.atInfo().log("{} entries found", rootArray.length()); - ArrayList corpusList = new ArrayList<>(); + ArrayList corpusList = new ArrayList<>(); for(int i=0;i stanox = new HashSet<>(); - private Set uicCode = new HashSet<>(); - private Set crsCode = new HashSet<>(); - private Set tiplocCode = new HashSet<>(); - private Set nlcCode = new HashSet<>(); - private Set description = new HashSet<>(); - SearchMode searchMode = SearchMode.MATCH_ALL_GROUP; - - public QueryBuilder setSearchMode(SearchMode searchMode) { - this.searchMode = searchMode; - return this; - } - - public QueryBuilder addStanox(String stanox){ - this.stanox.add(stanox); - return this; - } - - public QueryBuilder addUicCode(String uicCode){ - this.uicCode.add(uicCode); - return this; - } - - public QueryBuilder addCrsCode(String crsCode){ - this.crsCode.add(crsCode); - return this; - } - - public QueryBuilder addTiplocCode(String tiplocCode){ - this.tiplocCode.add(tiplocCode); - return this; - } - - public QueryBuilder addNlcCode(String nlcCode){ - this.nlcCode.add(nlcCode); - return this; - } - - public QueryBuilder addDescription(String description){ - this.description.add(description); - return this; - } - - public Query build(){ - return new Query(stanox, uicCode, crsCode, tiplocCode, nlcCode, description, searchMode); - } - } - - public static class Query{ - private Set stanox = new HashSet<>(); - private Set uicCode = new HashSet<>(); - private Set crsCode = new HashSet<>(); - private Set tiplocCode = new HashSet<>(); - private Set nlcCode = new HashSet<>(); - private Set description = new HashSet<>(); - SearchMode searchMode = SearchMode.MATCH_ALL_GROUP; - - private Query(Set stanox, Set uicCode, Set crsCode, Set tiplocCode, Set nlcCode, Set description, SearchMode searchMode) { - this.stanox = Collections.unmodifiableSet(stanox); - this.uicCode = Collections.unmodifiableSet(uicCode); - this.crsCode = Collections.unmodifiableSet(crsCode); - this.tiplocCode = Collections.unmodifiableSet(tiplocCode); - this.nlcCode = Collections.unmodifiableSet(nlcCode); - this.description = Collections.unmodifiableSet(description); - this.searchMode = searchMode; - } - - public Set getStanox() { - return stanox; - } - - public Set getUicCode() { - return uicCode; - } - - public Set getCrsCode() { - return crsCode; - } - - public Set getTiplocCode() { - return tiplocCode; - } - - public Set getNlcCode() { - return nlcCode; - } - - public Set getDescription() { - return description; - } - - public SearchMode getSearchMode() { - return searchMode; - } - } - - public abstract Collection executeQuery(Query query) throws SQLException; - - public abstract void add(CORPUS corpus) throws SQLException; - - public void addAll(Collection datas) throws SQLException { - for(CORPUS corpus: datas){ - add(corpus); - } - } - - public abstract void truncateTable() throws SQLException; - public abstract boolean hasNlcCode(String nlcCode) throws SQLException; - public abstract void update(CORPUS corpus) throws SQLException; - public void replace(CORPUS corpus) throws SQLException{ - if(corpus.getNlcCode()==null || !hasNlcCode(corpus.getNlcCode())){ - add(corpus); - }else{ - update(corpus); - } - } - - public void replaceAll(Collection datas) throws SQLException{ - for(CORPUS corpus: datas){ - replace(corpus); - } - } - - public abstract Collection searchCORPUSByStanoxCode(String stanoxCode) throws SQLException; - public abstract Collection searchCORPUSByUicCode(String uicCode) throws SQLException; - public abstract Collection searchCORPUSByCrsCode(String crsCode) throws SQLException; - public abstract Collection searchCORPUSByTiplocCode(String tiplocCode) throws SQLException; - public abstract CORPUS searchCORPUSByNlcCode(String nlcCode) throws SQLException; - public abstract List searchCORPUSByName(String name) throws SQLException; - - public abstract CORPUS delete(String nlcCode) throws SQLException; -} diff --git a/src/main/java/org/leolo/nrdatad/db/CorpusDao.java b/src/main/java/org/leolo/nrdatad/db/CorpusDao.java new file mode 100644 index 0000000..0daa02a --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/db/CorpusDao.java @@ -0,0 +1,146 @@ +package org.leolo.nrdatad.db; + +import org.leolo.nrdatad.model.Corpus; + +import java.sql.SQLException; +import java.util.*; + +public abstract class CorpusDao extends BaseDao{ + + public CorpusDao(DatabaseManager manager) { + super(manager); + } + + public static class QueryBuilder{ + private Set stanox = new HashSet<>(); + private Set uicCode = new HashSet<>(); + private Set crsCode = new HashSet<>(); + private Set tiplocCode = new HashSet<>(); + private Set nlcCode = new HashSet<>(); + private Set description = new HashSet<>(); + SearchMode searchMode = SearchMode.MATCH_ALL_GROUP; + + public QueryBuilder setSearchMode(SearchMode searchMode) { + this.searchMode = searchMode; + return this; + } + + public QueryBuilder addStanox(String stanox){ + this.stanox.add(stanox); + return this; + } + + public QueryBuilder addUicCode(String uicCode){ + this.uicCode.add(uicCode); + return this; + } + + public QueryBuilder addCrsCode(String crsCode){ + this.crsCode.add(crsCode); + return this; + } + + public QueryBuilder addTiplocCode(String tiplocCode){ + this.tiplocCode.add(tiplocCode); + return this; + } + + public QueryBuilder addNlcCode(String nlcCode){ + this.nlcCode.add(nlcCode); + return this; + } + + public QueryBuilder addDescription(String description){ + this.description.add(description); + return this; + } + + public Query build(){ + return new Query(stanox, uicCode, crsCode, tiplocCode, nlcCode, description, searchMode); + } + } + + public static class Query{ + private Set stanox = new HashSet<>(); + private Set uicCode = new HashSet<>(); + private Set crsCode = new HashSet<>(); + private Set tiplocCode = new HashSet<>(); + private Set nlcCode = new HashSet<>(); + private Set description = new HashSet<>(); + SearchMode searchMode = SearchMode.MATCH_ALL_GROUP; + + private Query(Set stanox, Set uicCode, Set crsCode, Set tiplocCode, Set nlcCode, Set description, SearchMode searchMode) { + this.stanox = Collections.unmodifiableSet(stanox); + this.uicCode = Collections.unmodifiableSet(uicCode); + this.crsCode = Collections.unmodifiableSet(crsCode); + this.tiplocCode = Collections.unmodifiableSet(tiplocCode); + this.nlcCode = Collections.unmodifiableSet(nlcCode); + this.description = Collections.unmodifiableSet(description); + this.searchMode = searchMode; + } + + public Set getStanox() { + return stanox; + } + + public Set getUicCode() { + return uicCode; + } + + public Set getCrsCode() { + return crsCode; + } + + public Set getTiplocCode() { + return tiplocCode; + } + + public Set getNlcCode() { + return nlcCode; + } + + public Set getDescription() { + return description; + } + + public SearchMode getSearchMode() { + return searchMode; + } + } + + public abstract Collection executeQuery(Query query) throws SQLException; + + public abstract void add(Corpus corpus) throws SQLException; + + public void addAll(Collection datas) throws SQLException { + for(Corpus corpus: datas){ + add(corpus); + } + } + + public abstract void truncateTable() throws SQLException; + public abstract boolean hasNlcCode(String nlcCode) throws SQLException; + public abstract void update(Corpus corpus) throws SQLException; + public void replace(Corpus corpus) throws SQLException{ + if(corpus.getNlcCode()==null || !hasNlcCode(corpus.getNlcCode())){ + add(corpus); + }else{ + update(corpus); + } + } + + public void replaceAll(Collection datas) throws SQLException{ + for(Corpus corpus: datas){ + replace(corpus); + } + } + + public abstract Collection searchCORPUSByStanoxCode(String stanoxCode) throws SQLException; + public abstract Collection searchCORPUSByUicCode(String uicCode) throws SQLException; + public abstract Collection searchCORPUSByCrsCode(String crsCode) throws SQLException; + public abstract Collection searchCORPUSByTiplocCode(String tiplocCode) throws SQLException; + public abstract Corpus searchCORPUSByNlcCode(String nlcCode) throws SQLException; + public abstract List searchCORPUSByName(String name) throws SQLException; + + public abstract Corpus delete(String nlcCode) throws SQLException; +} diff --git a/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java b/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java index f9b99bf..3a6684d 100644 --- a/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java +++ b/src/main/java/org/leolo/nrdatad/db/DatabaseManager.java @@ -2,7 +2,6 @@ package org.leolo.nrdatad.db; import java.sql.Connection; import java.sql.SQLException; -import java.util.function.BiConsumer; public interface DatabaseManager { @@ -14,5 +13,5 @@ public interface DatabaseManager { public MetadataDao getMetadataDao(); - public CORPUSDao getCORPUSDao(); + public CorpusDao getCORPUSDao(); } diff --git a/src/main/java/org/leolo/nrdatad/db/SmartDao.java b/src/main/java/org/leolo/nrdatad/db/SmartDao.java new file mode 100644 index 0000000..8105adf --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/db/SmartDao.java @@ -0,0 +1,23 @@ +package org.leolo.nrdatad.db; + +import org.leolo.nrdatad.model.Smart; + +import java.sql.SQLException; +import java.util.Collection; + +public abstract class SmartDao extends BaseDao{ + + public SmartDao(DatabaseManager manager) { + super(manager); + } + + public abstract void add(Smart smart) 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/CORPUSDao.java b/src/main/java/org/leolo/nrdatad/db/mariadb/CORPUSDao.java deleted file mode 100644 index 9e26daf..0000000 --- a/src/main/java/org/leolo/nrdatad/db/mariadb/CORPUSDao.java +++ /dev/null @@ -1,379 +0,0 @@ -package org.leolo.nrdatad.db.mariadb; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.jetbrains.annotations.NotNull; -import org.leolo.nrdatad.db.DatabaseManager; -import org.leolo.nrdatad.db.ParameterStore; -import org.leolo.nrdatad.db.SearchMode; -import org.leolo.nrdatad.model.CORPUS; - -import java.sql.*; -import java.util.*; - -public class CORPUSDao extends org.leolo.nrdatad.db.CORPUSDao { - - Logger log = LogManager.getLogger(); - - public CORPUSDao(DatabaseManager manager) { - super(manager); - } - - @Override - public Collection executeQuery(org.leolo.nrdatad.db.CORPUSDao.Query query) throws SQLException { - Vector corpuses = new Vector<>(); - ParameterStore params = new ParameterStore(); - StringBuilder sql = new StringBuilder(); - if(query.getSearchMode()== SearchMode.MATCH_ALL_GROUP || query.getSearchMode()==SearchMode.MATCH_ANY){ - sql.append("SELECT * FROM corpus WHERE "); - String keyWord; - if(query.getSearchMode() == SearchMode.MATCH_ALL_GROUP){ - sql.append("1=1 "); - keyWord = "AND "; - }else{ - sql.append("1=0 "); - keyWord = "OR "; - } - if(query.getStanox().size()>0){ - sql.append(keyWord).append("stanox IN (") - .append(getQueryParams(query.getStanox().size())).append(") "); - params.addAll(query.getStanox()); - } - if(query.getUicCode().size()>0){ - sql.append(keyWord).append("uic_code IN (") - .append(getQueryParams(query.getUicCode().size())).append(") "); - params.addAll(query.getUicCode()); - } - if(query.getCrsCode().size()>0){ - sql.append(keyWord).append("crs_code IN (") - .append(getQueryParams(query.getCrsCode().size())).append(") "); - params.addAll(query.getCrsCode()); - } - if(query.getTiplocCode().size()>0){ - sql.append(keyWord).append("tiploc_code IN (") - .append(getQueryParams(query.getTiplocCode().size())).append(") "); - params.addAll(query.getTiplocCode()); - } - if(query.getNlcCode().size()>0){ - sql.append(keyWord).append("nlc_code IN(") - .append(getQueryParams(query.getNlcCode().size())).append(") "); - params.addAll(query.getNlcCode()); - } - if(query.getDescription().size()>0){ - sql.append(keyWord).append("("); - boolean hasDesc = false; - for(String str:query.getDescription()){ - if(hasDesc){ - sql.append("OR "); - } - sql.append("(`desc` LIKE ? OR short_desc LIKE ? ) "); - hasDesc = true; - params.add("%"+str+"%"); - params.add("%"+str+"%"); - } - sql.append(") "); - } - log.atDebug().log("SQL={}",sql); - }else{ - log.always().log("Search mode {} is yet to be implemented.", query.getSearchMode()); - } - try( - Connection conn = getConnection(); - PreparedStatement pstmt = conn.prepareStatement(sql.toString()) - ){ - for(int i=1;i<=params.size();i++){ - log.atDebug().log("Param {} = {}", i, params.get(i)); - setString(pstmt, i, params.get(i)); - } - try(ResultSet rs = pstmt.executeQuery()){ - while(rs.next()){ - corpuses.add(parseCORPUS(rs)); - } - } - } - return corpuses; - } - - @Override - public void add(@NotNull CORPUS corpus) throws SQLException { - try( - Connection conn = getConnection(); - PreparedStatement pstmt = conn.prepareStatement( - "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, nlc_code, `desc`, short_desc) " + - "VALUES (?,?,?,?,?,?,?)") - ){ - setString(pstmt, 1, corpus.getStanoxCode()); - setString(pstmt, 2, corpus.getUicCode()); - setString(pstmt, 3, corpus.getCrsCode()); - setString(pstmt, 4, corpus.getTiplocCode()); - setString(pstmt, 5, corpus.getNlcCode()); - setString(pstmt, 6, corpus.getLongDescription()); - setString(pstmt, 7, corpus.getShortDescription()); - pstmt.executeUpdate(); - conn.commit(); - } - } - - @Override - public void addAll(@NotNull Collection datas) throws SQLException { - try( - Connection conn = getConnection(); - PreparedStatement pstmt = conn.prepareStatement( - "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, nlc_code, `desc`, short_desc) " + - "VALUES (?,?,?,?,?,?,?)") - ){ - for(CORPUS corpus:datas) { - setString(pstmt, 1, corpus.getStanoxCode()); - setString(pstmt, 2, corpus.getUicCode()); - setString(pstmt, 3, corpus.getCrsCode()); - setString(pstmt, 4, corpus.getTiplocCode()); - setString(pstmt, 5, corpus.getNlcCode()); - setString(pstmt, 6, corpus.getLongDescription()); - setString(pstmt, 7, corpus.getShortDescription()); - pstmt.addBatch(); - } - pstmt.executeBatch(); - conn.commit(); - } - } - - - @Override - public void replaceAll(@NotNull Collection datas) throws SQLException { - int totalCount = 0, insertCount = 0, updateCount = 0; - HashSet pendingInsert = new HashSet<>(); - try( - Connection conn = getConnection(); - PreparedStatement psIns = conn.prepareStatement( - "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, `desc`, short_desc, nlc_code) " + - "VALUES (?,?,?,?,?,?,?)"); - PreparedStatement psUpd = conn.prepareStatement( - "UPDATE corpus " + - "SET stanox=?, uic_code=?, crs_code=?, tiploc_code=?, `desc`=?, short_desc=? " + - "WHERE nlc_code = ?" - ) - ){ - for(CORPUS corpus:datas){ - totalCount++; - CORPUS existing = searchCORPUSByNlcCode(corpus.getNlcCode()); - PreparedStatement stmt = null; - if(corpus.equals(existing)){ - continue; - }else if(existing==null){ - if(pendingInsert.contains(corpus.getNlcCode())){ - continue; - } - pendingInsert.add(corpus.getNlcCode()); - stmt = psIns; - insertCount++; - }else{ - stmt = psUpd; - updateCount++; - } - setString(stmt, 1, corpus.getStanoxCode()); - setString(stmt, 2, corpus.getUicCode()); - setString(stmt, 3, corpus.getCrsCode()); - setString(stmt, 4, corpus.getTiplocCode()); - setString(stmt, 5, corpus.getLongDescription()); - setString(stmt, 6, corpus.getShortDescription()); - setString(stmt, 7, corpus.getNlcCode()); - stmt.addBatch(); - } - if(insertCount>0){ - psIns.executeBatch(); - log.atInfo().log("Inserted {} CORPUS records", insertCount); - } - if(updateCount>0){ - psUpd.executeBatch(); - log.atInfo().log("Updated {} CORPUS records", updateCount); - } - if(insertCount==0 && updateCount==0){ - log.atInfo().log("CORPUS data already up to date. "); - }else{ - conn.commit(); - log.atInfo().log("Done committing CORPUS data"); - } - } - } - - @Override - public void truncateTable() throws SQLException { - try( - Connection conn = getConnection(); - Statement stmt = conn.createStatement() - ){ - stmt.executeQuery("TRUNCATE TABLE corpus"); - } - } - - @Override - public boolean hasNlcCode(String nlcCode) throws SQLException { - try( - Connection conn = getConnection(); - PreparedStatement pstmt = conn.prepareStatement("SELECT 1 FROM corpus WHERE nlc_code = ?") - ){ - pstmt.setString(1, nlcCode); - try(ResultSet rs = pstmt.executeQuery()){ - return rs.next(); - } - } - } - - @Override - public void update(CORPUS corpus) throws SQLException { - try( - Connection conn = getConnection(); - PreparedStatement pstmt = conn.prepareStatement( - "UPDATE corpus " + - "SET stanox=?, uic_code=?, crs_code=?, tiploc_code=?, `desc`=?, short_desc=? " + - "WHERE nlc_code = ?" - ) - ){ - setString(pstmt, 1, corpus.getStanoxCode()); - setString(pstmt, 2, corpus.getUicCode()); - setString(pstmt, 3, corpus.getCrsCode()); - setString(pstmt, 4, corpus.getTiplocCode()); - setString(pstmt, 5, corpus.getLongDescription()); - setString(pstmt, 6, corpus.getShortDescription()); - setString(pstmt, 7, corpus.getNlcCode()); - pstmt.executeUpdate(); - } - } - - @Override - public Collection searchCORPUSByStanoxCode(String stanoxCode) throws SQLException { - Collection corpuses = new Vector<>(); - try( - Connection conn = getConnection(); - PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM corpus WHERE stanox = ?") - ){ - pstmt.setString(1, stanoxCode); - try(ResultSet rs = pstmt.executeQuery()){ - while(rs.next()){ - corpuses.add(parseCORPUS(rs)); - } - } - } - return corpuses; - } - - @Override - public Collection searchCORPUSByUicCode(String uicCode) throws SQLException { - Collection corpuses = new Vector<>(); - try( - Connection conn = getConnection(); - PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM corpus WHERE uic_code = ?") - ){ - pstmt.setString(1, uicCode); - try(ResultSet rs = pstmt.executeQuery()){ - while(rs.next()){ - corpuses.add(parseCORPUS(rs)); - } - } - } - return corpuses; - } - - @Override - public Collection searchCORPUSByCrsCode(String crsCode) throws SQLException { - Collection corpuses = new Vector<>(); - try( - Connection conn = getConnection(); - PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM corpus WHERE crs_code = ?") - ){ - pstmt.setString(1, crsCode); - try(ResultSet rs = pstmt.executeQuery()){ - while(rs.next()){ - corpuses.add(parseCORPUS(rs)); - } - } - } - return corpuses; - } - - @Override - public Collection searchCORPUSByTiplocCode(String tiplocCode) throws SQLException { - Collection corpuses = new Vector<>(); - try( - Connection conn = getConnection(); - PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM corpus WHERE tiploc_code = ?") - ){ - pstmt.setString(1, tiplocCode); - try(ResultSet rs = pstmt.executeQuery()){ - while(rs.next()){ - corpuses.add(parseCORPUS(rs)); - } - } - } - return corpuses; - } - - @Override - public CORPUS searchCORPUSByNlcCode(String nlcCode) throws SQLException { - try( - Connection conn = getConnection(); - PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM corpus WHERE nlc_code = ?") - ){ - pstmt.setString(1, nlcCode); - try(ResultSet rs = pstmt.executeQuery()){ - if(rs.next()){ - return parseCORPUS(rs); - } - } - } - return null; - } - - @Override - public List searchCORPUSByName(String name) throws SQLException { - - List corpuses = new Vector<>(); - try( - Connection conn = getConnection(); - PreparedStatement pstmt = conn.prepareStatement( - "SELECT * FROM corpus WHERE " + - "match(`desc`) against (?) OR " + - "match(short_desc) against (?) " + - "ORDER BY match(`desc`) against (?)+match(short_desc) against (?)" - ) - ){ - pstmt.setString(1, name); - pstmt.setString(2, name); - pstmt.setString(3, name); - pstmt.setString(4, name); - try(ResultSet rs = pstmt.executeQuery()){ - while(rs.next()){ - corpuses.add(parseCORPUS(rs)); - } - } - } - return corpuses; - } - - private CORPUS parseCORPUS(ResultSet rs) throws SQLException{ - CORPUS corpus = new CORPUS(); - corpus.setStanoxCode(rs.getString("stanox")); - corpus.setUicCode(rs.getString("uic_code")); - corpus.setCrsCode(rs.getString("crs_code")); - corpus.setTiplocCode(rs.getString("tiploc_code")); - corpus.setNlcCode(rs.getString("nlc_code")); - corpus.setLongDescription(rs.getString("desc")); - corpus.setShortDescription(rs.getString("short_desc")); - return corpus; - } - - @Override - public CORPUS delete(String nlcCode) throws SQLException { - CORPUS deletedEntry = searchCORPUSByNlcCode(nlcCode); - if(deletedEntry!=null){ - try( - Connection conn = getConnection(); - PreparedStatement stmt = conn.prepareStatement("DELETE FROM corpus WHERE nlc_code = ?") - ){ - stmt.setString(1, nlcCode); - stmt.executeUpdate(); - } - } - return deletedEntry; - } -} diff --git a/src/main/java/org/leolo/nrdatad/db/mariadb/CorpusDao.java b/src/main/java/org/leolo/nrdatad/db/mariadb/CorpusDao.java new file mode 100644 index 0000000..31092b7 --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/db/mariadb/CorpusDao.java @@ -0,0 +1,379 @@ +package org.leolo.nrdatad.db.mariadb; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.NotNull; +import org.leolo.nrdatad.db.DatabaseManager; +import org.leolo.nrdatad.db.ParameterStore; +import org.leolo.nrdatad.db.SearchMode; +import org.leolo.nrdatad.model.Corpus; + +import java.sql.*; +import java.util.*; + +public class CorpusDao extends org.leolo.nrdatad.db.CorpusDao { + + Logger log = LogManager.getLogger(); + + public CorpusDao(DatabaseManager manager) { + super(manager); + } + + @Override + public Collection executeQuery(org.leolo.nrdatad.db.CorpusDao.Query query) throws SQLException { + Vector corpuses = new Vector<>(); + ParameterStore params = new ParameterStore(); + StringBuilder sql = new StringBuilder(); + if(query.getSearchMode()== SearchMode.MATCH_ALL_GROUP || query.getSearchMode()==SearchMode.MATCH_ANY){ + sql.append("SELECT * FROM corpus WHERE "); + String keyWord; + if(query.getSearchMode() == SearchMode.MATCH_ALL_GROUP){ + sql.append("1=1 "); + keyWord = "AND "; + }else{ + sql.append("1=0 "); + keyWord = "OR "; + } + if(query.getStanox().size()>0){ + sql.append(keyWord).append("stanox IN (") + .append(getQueryParams(query.getStanox().size())).append(") "); + params.addAll(query.getStanox()); + } + if(query.getUicCode().size()>0){ + sql.append(keyWord).append("uic_code IN (") + .append(getQueryParams(query.getUicCode().size())).append(") "); + params.addAll(query.getUicCode()); + } + if(query.getCrsCode().size()>0){ + sql.append(keyWord).append("crs_code IN (") + .append(getQueryParams(query.getCrsCode().size())).append(") "); + params.addAll(query.getCrsCode()); + } + if(query.getTiplocCode().size()>0){ + sql.append(keyWord).append("tiploc_code IN (") + .append(getQueryParams(query.getTiplocCode().size())).append(") "); + params.addAll(query.getTiplocCode()); + } + if(query.getNlcCode().size()>0){ + sql.append(keyWord).append("nlc_code IN(") + .append(getQueryParams(query.getNlcCode().size())).append(") "); + params.addAll(query.getNlcCode()); + } + if(query.getDescription().size()>0){ + sql.append(keyWord).append("("); + boolean hasDesc = false; + for(String str:query.getDescription()){ + if(hasDesc){ + sql.append("OR "); + } + sql.append("(`desc` LIKE ? OR short_desc LIKE ? ) "); + hasDesc = true; + params.add("%"+str+"%"); + params.add("%"+str+"%"); + } + sql.append(") "); + } + log.atDebug().log("SQL={}",sql); + }else{ + log.always().log("Search mode {} is yet to be implemented.", query.getSearchMode()); + } + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql.toString()) + ){ + for(int i=1;i<=params.size();i++){ + log.atDebug().log("Param {} = {}", i, params.get(i)); + setString(pstmt, i, params.get(i)); + } + try(ResultSet rs = pstmt.executeQuery()){ + while(rs.next()){ + corpuses.add(parseCORPUS(rs)); + } + } + } + return corpuses; + } + + @Override + public void add(@NotNull Corpus corpus) throws SQLException { + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement( + "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, nlc_code, `desc`, short_desc) " + + "VALUES (?,?,?,?,?,?,?)") + ){ + setString(pstmt, 1, corpus.getStanoxCode()); + setString(pstmt, 2, corpus.getUicCode()); + setString(pstmt, 3, corpus.getCrsCode()); + setString(pstmt, 4, corpus.getTiplocCode()); + setString(pstmt, 5, corpus.getNlcCode()); + setString(pstmt, 6, corpus.getLongDescription()); + setString(pstmt, 7, corpus.getShortDescription()); + pstmt.executeUpdate(); + conn.commit(); + } + } + + @Override + public void addAll(@NotNull Collection datas) throws SQLException { + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement( + "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, nlc_code, `desc`, short_desc) " + + "VALUES (?,?,?,?,?,?,?)") + ){ + for(Corpus corpus:datas) { + setString(pstmt, 1, corpus.getStanoxCode()); + setString(pstmt, 2, corpus.getUicCode()); + setString(pstmt, 3, corpus.getCrsCode()); + setString(pstmt, 4, corpus.getTiplocCode()); + setString(pstmt, 5, corpus.getNlcCode()); + setString(pstmt, 6, corpus.getLongDescription()); + setString(pstmt, 7, corpus.getShortDescription()); + pstmt.addBatch(); + } + pstmt.executeBatch(); + conn.commit(); + } + } + + + @Override + public void replaceAll(@NotNull Collection datas) throws SQLException { + int totalCount = 0, insertCount = 0, updateCount = 0; + HashSet pendingInsert = new HashSet<>(); + try( + Connection conn = getConnection(); + PreparedStatement psIns = conn.prepareStatement( + "INSERT INTO corpus (stanox, uic_code, crs_code, tiploc_code, `desc`, short_desc, nlc_code) " + + "VALUES (?,?,?,?,?,?,?)"); + PreparedStatement psUpd = conn.prepareStatement( + "UPDATE corpus " + + "SET stanox=?, uic_code=?, crs_code=?, tiploc_code=?, `desc`=?, short_desc=? " + + "WHERE nlc_code = ?" + ) + ){ + for(Corpus corpus:datas){ + totalCount++; + Corpus existing = searchCORPUSByNlcCode(corpus.getNlcCode()); + PreparedStatement stmt = null; + if(corpus.equals(existing)){ + continue; + }else if(existing==null){ + if(pendingInsert.contains(corpus.getNlcCode())){ + continue; + } + pendingInsert.add(corpus.getNlcCode()); + stmt = psIns; + insertCount++; + }else{ + stmt = psUpd; + updateCount++; + } + setString(stmt, 1, corpus.getStanoxCode()); + setString(stmt, 2, corpus.getUicCode()); + setString(stmt, 3, corpus.getCrsCode()); + setString(stmt, 4, corpus.getTiplocCode()); + setString(stmt, 5, corpus.getLongDescription()); + setString(stmt, 6, corpus.getShortDescription()); + setString(stmt, 7, corpus.getNlcCode()); + stmt.addBatch(); + } + if(insertCount>0){ + psIns.executeBatch(); + log.atInfo().log("Inserted {} CORPUS records", insertCount); + } + if(updateCount>0){ + psUpd.executeBatch(); + log.atInfo().log("Updated {} CORPUS records", updateCount); + } + if(insertCount==0 && updateCount==0){ + log.atInfo().log("CORPUS data already up to date. "); + }else{ + conn.commit(); + log.atInfo().log("Done committing CORPUS data"); + } + } + } + + @Override + public void truncateTable() throws SQLException { + try( + Connection conn = getConnection(); + Statement stmt = conn.createStatement() + ){ + stmt.executeQuery("TRUNCATE TABLE corpus"); + } + } + + @Override + public boolean hasNlcCode(String nlcCode) throws SQLException { + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement("SELECT 1 FROM corpus WHERE nlc_code = ?") + ){ + pstmt.setString(1, nlcCode); + try(ResultSet rs = pstmt.executeQuery()){ + return rs.next(); + } + } + } + + @Override + public void update(Corpus corpus) throws SQLException { + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement( + "UPDATE corpus " + + "SET stanox=?, uic_code=?, crs_code=?, tiploc_code=?, `desc`=?, short_desc=? " + + "WHERE nlc_code = ?" + ) + ){ + setString(pstmt, 1, corpus.getStanoxCode()); + setString(pstmt, 2, corpus.getUicCode()); + setString(pstmt, 3, corpus.getCrsCode()); + setString(pstmt, 4, corpus.getTiplocCode()); + setString(pstmt, 5, corpus.getLongDescription()); + setString(pstmt, 6, corpus.getShortDescription()); + setString(pstmt, 7, corpus.getNlcCode()); + pstmt.executeUpdate(); + } + } + + @Override + public Collection searchCORPUSByStanoxCode(String stanoxCode) throws SQLException { + Collection corpuses = new Vector<>(); + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM corpus WHERE stanox = ?") + ){ + pstmt.setString(1, stanoxCode); + try(ResultSet rs = pstmt.executeQuery()){ + while(rs.next()){ + corpuses.add(parseCORPUS(rs)); + } + } + } + return corpuses; + } + + @Override + public Collection searchCORPUSByUicCode(String uicCode) throws SQLException { + Collection corpuses = new Vector<>(); + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM corpus WHERE uic_code = ?") + ){ + pstmt.setString(1, uicCode); + try(ResultSet rs = pstmt.executeQuery()){ + while(rs.next()){ + corpuses.add(parseCORPUS(rs)); + } + } + } + return corpuses; + } + + @Override + public Collection searchCORPUSByCrsCode(String crsCode) throws SQLException { + Collection corpuses = new Vector<>(); + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM corpus WHERE crs_code = ?") + ){ + pstmt.setString(1, crsCode); + try(ResultSet rs = pstmt.executeQuery()){ + while(rs.next()){ + corpuses.add(parseCORPUS(rs)); + } + } + } + return corpuses; + } + + @Override + public Collection searchCORPUSByTiplocCode(String tiplocCode) throws SQLException { + Collection corpuses = new Vector<>(); + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM corpus WHERE tiploc_code = ?") + ){ + pstmt.setString(1, tiplocCode); + try(ResultSet rs = pstmt.executeQuery()){ + while(rs.next()){ + corpuses.add(parseCORPUS(rs)); + } + } + } + return corpuses; + } + + @Override + public Corpus searchCORPUSByNlcCode(String nlcCode) throws SQLException { + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM corpus WHERE nlc_code = ?") + ){ + pstmt.setString(1, nlcCode); + try(ResultSet rs = pstmt.executeQuery()){ + if(rs.next()){ + return parseCORPUS(rs); + } + } + } + return null; + } + + @Override + public List searchCORPUSByName(String name) throws SQLException { + + List corpuses = new Vector<>(); + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement( + "SELECT * FROM corpus WHERE " + + "match(`desc`) against (?) OR " + + "match(short_desc) against (?) " + + "ORDER BY match(`desc`) against (?)+match(short_desc) against (?)" + ) + ){ + pstmt.setString(1, name); + pstmt.setString(2, name); + pstmt.setString(3, name); + pstmt.setString(4, name); + try(ResultSet rs = pstmt.executeQuery()){ + while(rs.next()){ + corpuses.add(parseCORPUS(rs)); + } + } + } + return corpuses; + } + + private Corpus parseCORPUS(ResultSet rs) throws SQLException{ + Corpus corpus = new Corpus(); + corpus.setStanoxCode(rs.getString("stanox")); + corpus.setUicCode(rs.getString("uic_code")); + corpus.setCrsCode(rs.getString("crs_code")); + corpus.setTiplocCode(rs.getString("tiploc_code")); + corpus.setNlcCode(rs.getString("nlc_code")); + corpus.setLongDescription(rs.getString("desc")); + corpus.setShortDescription(rs.getString("short_desc")); + return corpus; + } + + @Override + public Corpus delete(String nlcCode) throws SQLException { + Corpus deletedEntry = searchCORPUSByNlcCode(nlcCode); + if(deletedEntry!=null){ + try( + Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement("DELETE FROM corpus WHERE nlc_code = ?") + ){ + stmt.setString(1, nlcCode); + stmt.executeUpdate(); + } + } + return deletedEntry; + } +} 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 0b88ba4..a990f42 100644 --- a/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java +++ b/src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java @@ -3,7 +3,7 @@ package org.leolo.nrdatad.db.mariadb; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.leolo.nrdatad.ConfigurationManager; -import org.leolo.nrdatad.db.CORPUSDao; +import org.leolo.nrdatad.db.CorpusDao; import org.leolo.nrdatad.db.MetadataDao; import org.mariadb.jdbc.MariaDbPoolDataSource; @@ -68,7 +68,7 @@ public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager{ } @Override - public CORPUSDao getCORPUSDao() { - return new org.leolo.nrdatad.db.mariadb.CORPUSDao(this); + public CorpusDao getCORPUSDao() { + return new org.leolo.nrdatad.db.mariadb.CorpusDao(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 new file mode 100644 index 0000000..bc651df --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/db/mariadb/SmartDao.java @@ -0,0 +1,75 @@ +package org.leolo.nrdatad.db.mariadb; + +import org.leolo.nrdatad.db.DatabaseManager; +import org.leolo.nrdatad.model.Smart; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.Collection; + +public class SmartDao extends org.leolo.nrdatad.db.SmartDao { + + public SmartDao(DatabaseManager manager) { + super(manager); + } + + @Override + public void add(Smart smart) throws SQLException { + try( + Connection conn = getConnection(); + 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 (?,?,?,?,?,?,?,?,?,?,?,?,?)") + ){ + setString(pstmt, 1, smart.getTd()); + setString(pstmt, 2, smart.getFromBerth()); + setString(pstmt, 3, smart.getToBerth()); + setString(pstmt, 4, smart.getFromLine()); + setString(pstmt, 5, smart.getToLine()); + setInt (pstmt, 6, smart.getBerthOffset()); + setString(pstmt, 7, smart.getPlatform()); + setString(pstmt, 8, smart.getEvent().getCode()); + setString(pstmt, 9, smart.getRoute()); + setString(pstmt, 10, smart.getStanox()); + setString(pstmt, 11, smart.getStationName()); + setString(pstmt, 12, smart.getStepType().getCode()); + setString(pstmt, 13, smart.getComment()); + pstmt.executeUpdate(); + conn.commit(); + } + } + + @Override + public void addAll(Collection smarts) throws SQLException { + try( + Connection conn = getConnection(); + 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 (?,?,?,?,?,?,?,?,?,?,?,?,?)") + ){ + for(Smart smart:smarts){ + setString(pstmt, 1, smart.getTd()); + setString(pstmt, 2, smart.getFromBerth()); + setString(pstmt, 3, smart.getToBerth()); + setString(pstmt, 4, smart.getFromLine()); + setString(pstmt, 5, smart.getToLine()); + setInt (pstmt, 6, smart.getBerthOffset()); + setString(pstmt, 7, smart.getPlatform()); + setString(pstmt, 8, smart.getEvent().getCode()); + setString(pstmt, 9, smart.getRoute()); + setString(pstmt, 10, smart.getStanox()); + setString(pstmt, 11, smart.getStationName()); + setString(pstmt, 12, smart.getStepType().getCode()); + setString(pstmt, 13, smart.getComment()); + pstmt.addBatch(); + } + pstmt.executeBatch(); + conn.commit(); + } + } +} diff --git a/src/main/java/org/leolo/nrdatad/model/CORPUS.java b/src/main/java/org/leolo/nrdatad/model/CORPUS.java deleted file mode 100644 index 5663f1a..0000000 --- a/src/main/java/org/leolo/nrdatad/model/CORPUS.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.leolo.nrdatad.model; - -import java.util.Objects; - -public class CORPUS { - - private String stanoxCode; - private String uicCode; - private String crsCode; - private String tiplocCode; - private String nlcCode; - - private String longDescription; - private String shortDescription; - - public String getStanoxCode() { - return stanoxCode; - } - - public void setStanoxCode(String stanoxCode) { - this.stanoxCode = stanoxCode; - } - - public String getUicCode() { - return uicCode; - } - - public void setUicCode(String uicCode) { - this.uicCode = uicCode; - } - - public String getCrsCode() { - return crsCode; - } - - public void setCrsCode(String crsCode) { - this.crsCode = crsCode; - } - - public String getTiplocCode() { - return tiplocCode; - } - - public void setTiplocCode(String tiplocCode) { - this.tiplocCode = tiplocCode; - } - - public String getNlcCode() { - return nlcCode; - } - - public void setNlcCode(String nlcCode) { - this.nlcCode = nlcCode; - } - - public String getLongDescription() { - return longDescription; - } - - public void setLongDescription(String longDescription) { - this.longDescription = longDescription; - } - - public String getShortDescription() { - return shortDescription; - } - - public void setShortDescription(String shortDescription) { - this.shortDescription = shortDescription; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CORPUS corpus = (CORPUS) o; - return Objects.equals(stanoxCode, corpus.stanoxCode) && Objects.equals(uicCode, corpus.uicCode) && Objects.equals(crsCode, corpus.crsCode) && Objects.equals(tiplocCode, corpus.tiplocCode) && Objects.equals(nlcCode, corpus.nlcCode) && Objects.equals(longDescription, corpus.longDescription) && Objects.equals(shortDescription, corpus.shortDescription); - } - - @Override - public int hashCode() { - return Objects.hash(stanoxCode, uicCode, crsCode, tiplocCode, nlcCode, longDescription, shortDescription); - } - - @Override - public String toString() { - return "CORPUS{" + - "stanoxCode='" + stanoxCode + '\'' + - ", uicCode='" + uicCode + '\'' + - ", crsCode='" + crsCode + '\'' + - ", tiplocCode='" + tiplocCode + '\'' + - ", nlcCode='" + nlcCode + '\'' + - ", longDescription='" + longDescription + '\'' + - ", shortDescription='" + shortDescription + '\'' + - '}'; - } -} diff --git a/src/main/java/org/leolo/nrdatad/model/Corpus.java b/src/main/java/org/leolo/nrdatad/model/Corpus.java new file mode 100644 index 0000000..e18979a --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/model/Corpus.java @@ -0,0 +1,97 @@ +package org.leolo.nrdatad.model; + +import java.util.Objects; + +public class Corpus { + + private String stanoxCode; + private String uicCode; + private String crsCode; + private String tiplocCode; + private String nlcCode; + + private String longDescription; + private String shortDescription; + + public String getStanoxCode() { + return stanoxCode; + } + + public void setStanoxCode(String stanoxCode) { + this.stanoxCode = stanoxCode; + } + + public String getUicCode() { + return uicCode; + } + + public void setUicCode(String uicCode) { + this.uicCode = uicCode; + } + + public String getCrsCode() { + return crsCode; + } + + public void setCrsCode(String crsCode) { + this.crsCode = crsCode; + } + + public String getTiplocCode() { + return tiplocCode; + } + + public void setTiplocCode(String tiplocCode) { + this.tiplocCode = tiplocCode; + } + + public String getNlcCode() { + return nlcCode; + } + + public void setNlcCode(String nlcCode) { + this.nlcCode = nlcCode; + } + + public String getLongDescription() { + return longDescription; + } + + public void setLongDescription(String longDescription) { + this.longDescription = longDescription; + } + + public String getShortDescription() { + return shortDescription; + } + + public void setShortDescription(String shortDescription) { + this.shortDescription = shortDescription; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Corpus corpus = (Corpus) o; + return Objects.equals(stanoxCode, corpus.stanoxCode) && Objects.equals(uicCode, corpus.uicCode) && Objects.equals(crsCode, corpus.crsCode) && Objects.equals(tiplocCode, corpus.tiplocCode) && Objects.equals(nlcCode, corpus.nlcCode) && Objects.equals(longDescription, corpus.longDescription) && Objects.equals(shortDescription, corpus.shortDescription); + } + + @Override + public int hashCode() { + return Objects.hash(stanoxCode, uicCode, crsCode, tiplocCode, nlcCode, longDescription, shortDescription); + } + + @Override + public String toString() { + return "CORPUS{" + + "stanoxCode='" + stanoxCode + '\'' + + ", uicCode='" + uicCode + '\'' + + ", crsCode='" + crsCode + '\'' + + ", tiplocCode='" + tiplocCode + '\'' + + ", nlcCode='" + nlcCode + '\'' + + ", longDescription='" + longDescription + '\'' + + ", shortDescription='" + shortDescription + '\'' + + '}'; + } +} diff --git a/src/main/java/org/leolo/nrdatad/model/Smart.java b/src/main/java/org/leolo/nrdatad/model/Smart.java new file mode 100644 index 0000000..82801bf --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/model/Smart.java @@ -0,0 +1,131 @@ +package org.leolo.nrdatad.model; + +public class Smart { + + private int smartId; + private String td; + private String fromBerth; + private String toBerth; + private String fromLine; + private String toLine; + private int berthOffset; + private String platform; + private SmartEvent event; + private String route; + private String stanox; + private String stationName; + private SmartStepType stepType; + private String comment; + + public int getSmartId() { + return smartId; + } + + public void setSmartId(int smartId) { + this.smartId = smartId; + } + + public String getTd() { + return td; + } + + public void setTd(String td) { + this.td = td; + } + + public String getFromBerth() { + return fromBerth; + } + + public void setFromBerth(String fromBerth) { + this.fromBerth = fromBerth; + } + + public String getToBerth() { + return toBerth; + } + + public void setToBerth(String toBerth) { + this.toBerth = toBerth; + } + + public String getFromLine() { + return fromLine; + } + + public void setFromLine(String fromLine) { + this.fromLine = fromLine; + } + + public String getToLine() { + return toLine; + } + + public void setToLine(String toLine) { + this.toLine = toLine; + } + + public int getBerthOffset() { + return berthOffset; + } + + public void setBerthOffset(int berthOffset) { + this.berthOffset = berthOffset; + } + + public String getPlatform() { + return platform; + } + + public void setPlatform(String platform) { + this.platform = platform; + } + + public SmartEvent getEvent() { + return event; + } + + public void setEvent(SmartEvent event) { + this.event = event; + } + + public String getRoute() { + return route; + } + + public void setRoute(String route) { + this.route = route; + } + + public String getStanox() { + return stanox; + } + + public void setStanox(String stanox) { + this.stanox = stanox; + } + + public String getStationName() { + return stationName; + } + + public void setStationName(String stationName) { + this.stationName = stationName; + } + + public SmartStepType getStepType() { + return stepType; + } + + public void setStepType(SmartStepType stepType) { + this.stepType = stepType; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } +} diff --git a/src/main/java/org/leolo/nrdatad/model/SmartEvent.java b/src/main/java/org/leolo/nrdatad/model/SmartEvent.java new file mode 100644 index 0000000..977e4a5 --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/model/SmartEvent.java @@ -0,0 +1,20 @@ +package org.leolo.nrdatad.model; + +public enum SmartEvent { + ARRIVE_UP ("A"), + DEPART_UP ("B"), + ARRIVE_DOWN("C"), + DEPART_DOWN("D"); + + + private String code; + + private SmartEvent(String code){ + this.code = code; + } + + public String getCode() { + return code; + } + +} diff --git a/src/main/java/org/leolo/nrdatad/model/SmartStepType.java b/src/main/java/org/leolo/nrdatad/model/SmartStepType.java new file mode 100644 index 0000000..3e67e76 --- /dev/null +++ b/src/main/java/org/leolo/nrdatad/model/SmartStepType.java @@ -0,0 +1,53 @@ +package org.leolo.nrdatad.model; + +public enum SmartStepType { + /** + * This is a move between directly adjacent berths, and is the preferred type of movement. The time reported to + * TRUST is the time that the train enters the 'to' berth. + */ + BETWEEN("B"), + /** + * This is used to record a time for a train going in either direction (up or down) from the specified berth to any + * other berth. The time reported to TRUST is the time that the train leaves the 'from' berth. + */ + FROM("F"), + /** + * This is the opposite of the 'F' step type. It is used to record a time for a train from any berth to the + * specified berth. The time reported to TRUST is the time that the train enters the 'to' berth. + */ + TO("T"), + /** + * This is used to specify the route a train is taking, usually when departing a station or junction. + * + * For example, if a 'D' move is specified as 0101 to 0407, and a train moves between berths 0101, 0203, 0305 and + * 0407, the move will be reported for the time the train left the first berth. + */ + INTERMEDIATE_FIRST("D"), + /** + * This is used to report on a movement where the only indication is a cancel message. For example, when a train + * leaves Network Rail infrastructure and moves in to a siding or area not covered by a train describer, the only + * message that will be received is a Clearout (CB) message. + */ + CLEAROUT("C"), + /** + * This is the opposite of the 'C' step type. It is used to report on a movement where the only indication is + * an interpose message. For example, when a train arrives on Network Rail infrastructure from a siding. The time + * reported to TRUST is the time that the interpose happened. + */ + INTERPOSE("I"), + /** + * This is similar to the 'D' move, but usually used for arrivals. The time reported to TRUST is the time the last + * berth step was made. + */ + INTERMEDIATE("E"); + + private String code; + + private SmartStepType(String code){ + this.code = code; + } + + public String getCode() { + return code; + } +} 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 b7e5e45..5ce8b2a 100644 --- a/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java +++ b/src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java @@ -1,6 +1,6 @@ package org.leolo.nrdatad.db.test; -import org.leolo.nrdatad.db.CORPUSDao; +import org.leolo.nrdatad.db.CorpusDao; import org.leolo.nrdatad.db.MetadataDao; import java.sql.Connection; @@ -28,7 +28,7 @@ public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager { } @Override - public CORPUSDao getCORPUSDao() { + public CorpusDao getCORPUSDao() { return null; } }