diff --git a/pom.xml b/pom.xml
index 32cbc20..93118c7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,6 +36,11 @@
holidays
1.0.3
+
+ org.mariadb.jdbc
+ mariadb-java-client
+ 3.5.3
+
OebbApi
diff --git a/src/main/java/be/jaud/Main.java b/src/main/java/be/jaud/Main.java
index b4ea9b6..94fc433 100644
--- a/src/main/java/be/jaud/Main.java
+++ b/src/main/java/be/jaud/Main.java
@@ -11,12 +11,14 @@ import org.json.JSONObject;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
+import java.sql.ResultSet;
+import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
public class Main {
- private static final String version = "0.7";
- private static final HashMap data = new HashMap<>();
+ private static final String version = "0.8";
+ private static final HashMap> udata = new HashMap<>();
public static Settings conf;
static OebbCheck check = new OebbCheck();
static long time;
@@ -45,7 +47,7 @@ public class Main {
LOG.error("Error at Task: {}", e.toString());
}
};
- service.scheduleAtFixedRate(task, 60, conf.getInt("refreshTime"), TimeUnit.SECONDS);
+ service.scheduleAtFixedRate(task, 10, conf.getInt("refreshTime"), TimeUnit.SECONDS);
if (server != null) {
server.createContext("/oebbapi", new OebbHandler());
server.setExecutor(null); // creates a default executor
@@ -64,17 +66,35 @@ public class Main {
}
private static void refresh() throws IOException {
- data.put(conf.getString("monitors.monitor1.DepartureTime"),check.getStatus(conf.getString("monitors.monitor1.Station"),conf.getString("monitors.monitor1.DepartureTime"), conf.getString("monitors.monitor1.FinalStop"),conf.getString("monitors.monitor1.TrainType"),String.valueOf(conf.getInt("monitors.monitor1.maxjourneys")), conf.getStringList("monitors.monitor1.notRunningDays")));
- data.put(conf.getString("monitors.monitor2.DepartureTime"),check.getStatus(conf.getString("monitors.monitor2.Station"),conf.getString("monitors.monitor2.DepartureTime"), conf.getString("monitors.monitor2.FinalStop"),conf.getString("monitors.monitor2.TrainType"),String.valueOf(conf.getInt("monitors.monitor2.maxjourneys")), conf.getStringList("monitors.monitor2.notRunningDays")));
- data.put(conf.getString("monitors.monitor3.DepartureTime"),check.getStatus(conf.getString("monitors.monitor3.Station"),conf.getString("monitors.monitor3.DepartureTime"), conf.getString("monitors.monitor3.FinalStop"),conf.getString("monitors.monitor3.TrainType"),String.valueOf(conf.getInt("monitors.monitor3.maxjourneys")), conf.getStringList("monitors.monitor3.notRunningDays")));
- data.put(conf.getString("monitors.monitor4.DepartureTime"),check.getStatus(conf.getString("monitors.monitor4.Station"),conf.getString("monitors.monitor4.DepartureTime"), conf.getString("monitors.monitor4.FinalStop"),conf.getString("monitors.monitor4.TrainType"),String.valueOf(conf.getInt("monitors.monitor4.maxjourneys")), conf.getStringList("monitors.monitor4.notRunningDays")));
+ HashMap data = new HashMap<>();
+ try{
+ ResultSet rs = MariaDB.load_users();
+ if (rs != null) {
+ while (rs.next()) {
+ String user = rs.getString("user");
+ ResultSet rsu = MariaDB.load_user(user);
+ if (rsu != null) {
+ while (rsu.next()) {
+ List list = new ArrayList<>(Arrays.asList(rsu.getString("notRunningDays").split(",")));
+ data.put(rsu.getString("display"), check.getStatus(rsu.getString("Station"), rsu.getString("DepartureTime"), rsu.getString("FinalStop"), rsu.getString("TrainType"), String.valueOf(rsu.getInt("maxjourneys")), list));
+ }
+ }
+ udata.put(user,data);
+ rs.close();
+ }
+ }
+ }catch (SQLException e){
+ LOG.error("Update issue", e);
+ }
time = System.currentTimeMillis();
}
- static class OebbHandler implements HttpHandler {
+ static class OebbHandler implements HttpHandler {
@Override
public void handle(HttpExchange t){
- String response = createOutput();
+ String[] req = t.getRequestURI().toString().split("/");
+ String user = req[2];
+ String response = createOutput(user);
t.getResponseHeaders().put("Content-Type", Collections.singletonList("application/json"));
try {
t.sendResponseHeaders(200, response.getBytes().length);
@@ -87,7 +107,7 @@ public class Main {
}
}
- private static String createOutput(){
+ private static String createOutput(String user){
JSONObject dat = new JSONObject();
Date updatetime = new Date(time);
dat.put("interval",conf.getInt("refreshTime")*1000);
@@ -133,7 +153,7 @@ public class Main {
monitor2.put("label",conf.getString("monitors.monitor1.Title"));
monitor2.put("labelColor",conf.getString("labelcolor"));
monitor2.put("fullDraw",true);
- int zug1 = data.get(conf.getString("monitors.monitor1.DepartureTime"));
+ int zug1 = udata.get(user).get("1");
makeLabel(monitor2, zug1);
display.put(monitor2);
@@ -141,7 +161,7 @@ public class Main {
monitor3.put("label",conf.getString("monitors.monitor2.Title"));
monitor3.put("labelColor",conf.getString("labelcolor"));
monitor3.put("fullDraw",true);
- int zug2 = data.get(conf.getString("monitors.monitor2.DepartureTime"));
+ int zug2 = udata.get(user).get("2");
makeLabel(monitor3, zug2);
display.put(monitor3);
@@ -149,7 +169,7 @@ public class Main {
monitor4.put("label",conf.getString("monitors.monitor3.Title"));
monitor4.put("labelColor",conf.getString("labelcolor"));
monitor4.put("fullDraw",true);
- int zug3 = data.get(conf.getString("monitors.monitor3.DepartureTime"));
+ int zug3 = udata.get(user).get("3");
makeLabel(monitor4, zug3);
display.put(monitor4);
@@ -157,10 +177,11 @@ public class Main {
monitor5.put("label",conf.getString("monitors.monitor4.Title"));
monitor5.put("labelColor",conf.getString("labelcolor"));
monitor5.put("fullDraw",true);
- int zug4 = data.get(conf.getString("monitors.monitor4.DepartureTime"));
+ int zug4 = udata.get(user).get("4");
makeLabel(monitor5, zug4);
display.put(monitor5);
dat.put("displays",display);
+ System.out.println(display);
return dat.toString();
}
diff --git a/src/main/java/be/jaud/MariaDB.java b/src/main/java/be/jaud/MariaDB.java
new file mode 100644
index 0000000..ff826f0
--- /dev/null
+++ b/src/main/java/be/jaud/MariaDB.java
@@ -0,0 +1,126 @@
+package be.jaud;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.InvocationTargetException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.sql.*;
+
+public class MariaDB {
+
+ private static Connection conn = null;
+ private static MariaDB self = null;
+ private static Settings conf = Settings.getInstance();
+ public static final Logger LOG = LoggerFactory.getLogger(MariaDB.class);
+ private MariaDB(String Host,String db,String User,String Password) {
+ try {
+
+ // Datenbanktreiber fuer ODBC Schnittstellen laden.
+ // F<>r verschiedene ODBC-Datenbanken muss dieser Treiber
+ // nur einmal geladen werden.
+ Class.forName("org.mariadb.jdbc.Driver").getDeclaredConstructor().newInstance();
+
+ // Verbindung zur ODBC-Datenbank herstellen.
+ // Es wird die JDBC-ODBC-Bruecke verwendet.
+ // Port -- Standard: 3306
+ String dbPort = "3306";
+ conn = DriverManager.getConnection("jdbc:mariadb://" + Host + ":"
+ + dbPort + "/" + db + "?" + "user=" + URLEncoder.encode(User, StandardCharsets.UTF_8) + "&"
+ + "password=" + Password + "&useSSL=false&autoReconnect=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC");
+ } catch (ClassNotFoundException | SQLException | IllegalAccessException | InstantiationException |
+ NoSuchMethodException | InvocationTargetException e) {
+ LOG.error("SQLException: {}", e.getMessage(), e);
+ System.exit(1);
+ }
+ }
+
+ public static Connection getInstance()
+ {
+ try {
+ if(conn == null || !conn.isValid(0)){
+ self = new MariaDB(conf.getString("db.server") , conf.getString("db.database"), conf.getString("db.user"), conf.getString("db.password"));
+ }
+ } catch (SQLException e) {
+ LOG.error("SQLException: {}", e.getMessage(), e);
+ }
+ return conn;
+ }
+
+ /**
+ * Returns the Connection
+ * @return MySQLConnection
+ * @deprecated
+ */
+ public static MariaDB getDB()
+ {
+ try {
+ if(conn == null || !conn.isValid(0)){
+ self = new MariaDB(conf.getString("db.server") , conf.getString("db.database"), conf.getString("db.user"), conf.getString("db.password"));
+ }
+ } catch (SQLException e) {
+ LOG.error("SQLException: {}", e.getMessage(), e);
+ }
+ return self;
+ }
+
+ public static void close()
+ {
+ if(conn != null){
+ try {
+ conn.close();
+ } catch (SQLException e) {
+ LOG.error("SQLException: {}", e.getMessage(), e);
+ }
+ }
+
+ }
+ public static ResultSet load_users()
+ {
+ conn = getInstance();
+
+ if(conn != null)
+ {
+ // Anfrage-Statement erzeugen.
+ Statement query;
+ try {
+ query = conn.createStatement();
+
+ // Ergebnistabelle erzeugen und abholen.
+ String sql = "SELECT DISTINCT `user` FROM `"+ conf.getString("db.table")+"`";
+ return query.executeQuery(sql);
+ } catch (SQLException e) {
+ LOG.error("SQLException: {}", e.getMessage());
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Loads the data of a user
+ * @param id Userid
+ * @return ResultSet
+ */
+ public static ResultSet load_user(String id)
+ {
+ conn = getInstance();
+
+ if(conn != null)
+ {
+ // Anfrage-Statement erzeugen.
+ Statement query;
+ try {
+ query = conn.createStatement();
+
+ // Ergebnistabelle erzeugen und abholen.
+ String sql = "SELECT * FROM `"+ conf.getString("db.table")+"` WHERE `user`='"+id+"' ORDER BY `display`";
+ return query.executeQuery(sql);
+ } catch (SQLException e) {
+ LOG.error("SQLException: {}", e.getMessage());
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/main/resources/reference.conf b/src/main/resources/reference.conf
index 1946560..c6ac0ee 100644
--- a/src/main/resources/reference.conf
+++ b/src/main/resources/reference.conf
@@ -1,7 +1,13 @@
apiserver {
port = 8111 //Port to listen to
refreshTime = 60 //Refresh Time in Seconds
-
+ db{
+ server =
+ user =
+ password =
+ database =
+ table =
+ }
monitors {
monitor1 {
Title = ""