Browse Source

Basic operation on SMART

develop
LO Kam Tao Leo 3 years ago
parent
commit
be38739c23
  1. 1
      src/main/java/org/leolo/nrdatad/Constants.java
  2. 22
      src/main/java/org/leolo/nrdatad/cron/ReferenceDataJob.java
  3. 2
      src/main/java/org/leolo/nrdatad/db/DatabaseManager.java
  4. 2
      src/main/java/org/leolo/nrdatad/db/SmartDao.java
  5. 6
      src/main/java/org/leolo/nrdatad/db/mariadb/DatabaseManager.java
  6. 11
      src/main/java/org/leolo/nrdatad/db/mariadb/SmartDao.java
  7. 11
      src/main/java/org/leolo/nrdatad/model/SmartEvent.java
  8. 10
      src/main/java/org/leolo/nrdatad/model/SmartStepType.java
  9. 29
      src/test/java/org/leolo/nrdatad/SmartEnumTest.java
  10. 8
      src/test/java/org/leolo/nrdatad/db/test/DatabaseManager.java

1
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";
}
}

22
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(){

2
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();
}

2
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<Smart> smarts) throws SQLException{
for(Smart smart: smarts){
add(smart);

6
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);
}
}

11
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");
}
}
}

11
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;
}
}

10
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;
}
}

29
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(""));
}
}

8
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;
}
}

Loading…
Cancel
Save