diff --git a/build.gradle b/build.gradle index 80ca2ec..359521d 100644 --- a/build.gradle +++ b/build.gradle @@ -40,7 +40,7 @@ task run (type: JavaExec){ task createProperties(dependsOn: processResources) { doLast { - new File("$projectDir/src/resources/version.properties").withWriter { w -> + new File("$projectDir/src/resources/version.prop").withWriter { w -> Properties p = new Properties() p['version'] = project.version.toString() p['buildtime'] = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(new Date()) diff --git a/src/java/com/wasteinformationserver/Dateget.java b/src/java/com/wasteinformationserver/Dateget.java deleted file mode 100644 index c10c8da..0000000 --- a/src/java/com/wasteinformationserver/Dateget.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * dead code... - */ -package com.wasteinformationserver; - -import com.wasteinformationserver.basicutils.Log; - -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.text.DateFormat; -import java.util.ArrayList; -import java.util.GregorianCalendar; -import java.util.Scanner; - -public class Dateget { - private int index = 0; - ArrayList list = new ArrayList<>(); - ArrayList listnew = new ArrayList<>(); - public String nextDate; - - - public void getdata() { - - GregorianCalendar now = new GregorianCalendar(); - DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); - String datum = df.format(now.getTime()); - - URL url = null; - try { - url = new URL("https://www.steyr.at/system/web/kalender.aspx?vdatum=" + datum + "&bdatum=19.10.2019&typ=&typid=0&typids=225781950&detailonr=0&menuonr=225781812"); - Scanner scanner = new Scanner(new InputStreamReader(url.openStream())); - - int n = 0; - while (scanner.hasNext()) { - String temp = scanner.next(); - addList(temp); - } - - } catch (MalformedURLException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - Filter(); - } - - private void addList(String temp) { - list.add(index, temp); - } - - public void printList() { - for (int n = 0; n < list.size(); n++) { - Log.Log.debug(list.get(n)); - } - } - - public void printListnew() { - for (int n = 0; n < listnew.size(); n++) { - Log.Log.debug(listnew.get(n)); - } - } - - private void Filter() { - String temp = "href=\"/system/web/kalender.aspx?detailonr=225781954-6&menuonr=225781812\">Hausabfall"; - int counter = 0; - - for (int n = 0; n < list.size(); n++) { - if (list.get(n).equals(temp)) { - counter++; - - if (counter == 4) { - - int zaehler = 0; - - for (int v = n; v < list.size(); v++) { - listnew.add(zaehler, list.get(v)); - zaehler++; - } - - /* String string = "004-034556"; - String[] parts = string.split("-"); - String part1 = parts[0]; // 004 - String part2 = parts[1]; // 034556*/ - - splitter(); - - } - } - } - } - - private void splitter() { - String temp = "

"; - - for (int n = 0; n < listnew.size(); n++) { - - if (listnew.get(n).equals(temp)) { - - } - } - } - -} diff --git a/src/java/com/wasteinformationserver/Main.kt b/src/java/com/wasteinformationserver/Main.kt index cd82eb1..ef8bdfc 100644 --- a/src/java/com/wasteinformationserver/Main.kt +++ b/src/java/com/wasteinformationserver/Main.kt @@ -36,6 +36,7 @@ fun main() { Log.message("initial login to db") try { JDBC.init("ingproject", "Kb9Dxklumt76ieq6", "ingproject", "db.power4future.at", 3306) + // todo make dynamic with settings page //JDBC.init("users", "kOpaIJUjkgb9ur6S", "wasteinformation", "192.168.65.15", 3306); } catch (e: IOException) { //e.printStackTrace(); Log.error("no connection to db") @@ -50,6 +51,6 @@ fun main() { //startup mqtt service Log.message("starting mqtt service") - val m = MqttService("mqtt.heili.eu", "1883") + val m = MqttService("mqtt.heili.eu", "1883") // todo make dynamic with settings page m.startupService() } \ No newline at end of file diff --git a/src/java/com/wasteinformationserver/basicutils/Info.java b/src/java/com/wasteinformationserver/basicutils/Info.java index ecd6b2b..4612aeb 100644 --- a/src/java/com/wasteinformationserver/basicutils/Info.java +++ b/src/java/com/wasteinformationserver/basicutils/Info.java @@ -51,7 +51,7 @@ public class Info { starttime = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(new Date()); Properties prop = new Properties(); try { - URL url = Info.class.getResource("/version.properties"); + URL url = Info.class.getResource("/version.prop"); prop.load(url.openStream()); version = (String) prop.get("version"); @@ -75,10 +75,10 @@ public class Info { long allocatedMemory = runtime.totalMemory(); long freeMemory = runtime.freeMemory(); - sb.append("free memory: " + format.format(freeMemory / 1024) + "\n"); - sb.append("allocated memory: " + format.format(allocatedMemory / 1024) + "\n"); - sb.append("max memory: " + format.format(maxMemory / 1024) + "\n"); - sb.append("total free memory: " + format.format((freeMemory + (maxMemory - allocatedMemory)) / 1024) + "\n"); + sb.append("free memory: ").append(format.format(freeMemory / 1024)).append("\n"); + sb.append("allocated memory: ").append(format.format(allocatedMemory / 1024)).append("\n"); + sb.append("max memory: ").append(format.format(maxMemory / 1024)).append("\n"); + sb.append("total free memory: ").append(format.format((freeMemory + (maxMemory - allocatedMemory)) / 1024)).append("\n"); System.out.println(sb.toString()); } diff --git a/src/java/com/wasteinformationserver/basicutils/Log.kt b/src/java/com/wasteinformationserver/basicutils/Log.kt index e295766..306d41a 100644 --- a/src/java/com/wasteinformationserver/basicutils/Log.kt +++ b/src/java/com/wasteinformationserver/basicutils/Log.kt @@ -5,22 +5,22 @@ import java.util.* class Log { companion object Log{ - val CRITICAL_ERROR = 6 - val ERROR = 5 - val WARNING = 4 - val INFO = 3 - val MESSAGE = 2 - val DEBUG = 1 + const val CRITICAL_ERROR = 6 + const val ERROR = 5 + const val WARNING = 4 + const val INFO = 3 + const val MESSAGE = 2 + const val DEBUG = 1 - private val ANSI_RESET = "\u001B[0m" - private val ANSI_BLACK = "\u001B[30m" - private val ANSI_RED = "\u001B[31m" - private val ANSI_GREEN = "\u001B[32m" - private val ANSI_YELLOW = "\u001B[33m" - private val ANSI_BLUE = "\u001B[34m" - private val ANSI_PURPLE = "\u001B[35m" - private val ANSI_CYAN = "\u001B[36m" - private val ANSI_WHITE = "\u001B[37m" + private const val ANSI_RESET = "\u001B[0m" + private const val ANSI_BLACK = "\u001B[30m" + private const val ANSI_RED = "\u001B[31m" + private const val ANSI_GREEN = "\u001B[32m" + private const val ANSI_YELLOW = "\u001B[33m" + private const val ANSI_BLUE = "\u001B[34m" + private const val ANSI_PURPLE = "\u001B[35m" + private const val ANSI_CYAN = "\u001B[36m" + private const val ANSI_WHITE = "\u001B[37m" private var Loglevel = 0 @@ -126,14 +126,14 @@ class Log { fun setLevel(level: Int) { Loglevel = level } - private val colors = ArrayList(Arrays.asList("", "DEBUG", "MESSAGE", "INFO", "WARNING", "ERROR", "CRITICAL_ERROR")) + + private val colors = ArrayList(listOf("", "DEBUG", "MESSAGE", "INFO", "WARNING", "ERROR", "CRITICAL_ERROR")) - - private fun calcDate(millisecs: Long): String? { - val date_format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") - val resultdate = Date(millisecs) - return date_format.format(resultdate) + private fun calcDate(milliSecs: Long): String? { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") + val resultDate = Date(milliSecs) + return dateFormat.format(resultDate) } } } \ No newline at end of file diff --git a/src/java/com/wasteinformationserver/db/Database.java b/src/java/com/wasteinformationserver/db/Database.java deleted file mode 100755 index a7c1ebd..0000000 --- a/src/java/com/wasteinformationserver/db/Database.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.wasteinformationserver.db; - -import java.sql.Connection; -import java.sql.SQLException; - -abstract class Database { - - protected String user; - protected String password; - - protected String host; - protected int port; - - protected String dbName; - - public Database(String user, String password, String host, int port, String dbName) { - this.user = user; - this.password = password; - this.host = host; - this.port = port; - this.dbName = dbName; - } - - public abstract Connection getConnection() throws SQLException; -} diff --git a/src/java/com/wasteinformationserver/db/JDBC.java b/src/java/com/wasteinformationserver/db/JDBC.java index 4eb8d9a..07358aa 100644 --- a/src/java/com/wasteinformationserver/db/JDBC.java +++ b/src/java/com/wasteinformationserver/db/JDBC.java @@ -3,10 +3,7 @@ package com.wasteinformationserver.db; import com.wasteinformationserver.basicutils.Log; import java.io.IOException; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; +import java.sql.*; /** * basic connection class to a Database @@ -25,6 +22,21 @@ public class JDBC { private static String ipc; private static int portc; + private JDBC(String username, String password, String dbname, String ip, int port) throws IOException { + logintodb(username, password, dbname, ip, port); + } + + /** + * instance of JDBC driver + */ + static { + try { + Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance(); + } catch (Exception e) { + e.printStackTrace(); + } + } + /** * initialize database values * suggested on startup @@ -45,10 +57,6 @@ public class JDBC { JDBC = new JDBC(username, password, dbname, ip, port); } - private JDBC(String username, String password, String dbname, String ip, int port) throws IOException { - logintodb(username, password, dbname, ip, port); - } - /** * get instance of db object * logindata has to be set before! @@ -67,22 +75,28 @@ public class JDBC { return JDBC; } + /** + * initial login to db -- should be called only one time or for reconnect + * + * @param username username + * @param password password + * @param dbname Database name + * @param ip Host or ip address + * @param port Server port + * @throws IOException thrown if no connection to db is possible. + */ private static void logintodb(String username, String password, String dbname, String ip, int port) throws IOException { - Database db = new MySQLConnector( - username, - password, - ip, - port, - dbname); - try { - conn = db.getConnection(); + DriverManager.setLoginTimeout(1); + conn = DriverManager.getConnection( + "jdbc:mysql://" + ip + ":" + port + "/" + dbname + "?useSSL=false&serverTimezone=CET", + username, + password); loggedin = true; } catch (SQLException e) { throw new IOException("No connection to database"); // todo reconnect every 5mins or something } - } /** @@ -114,6 +128,11 @@ public class JDBC { return stmt.executeUpdate(); } + /** + * check if connection is still established + * + * @return connection state + */ public boolean isConnected() { return loggedin; } diff --git a/src/java/com/wasteinformationserver/db/MySQLConnector.java b/src/java/com/wasteinformationserver/db/MySQLConnector.java deleted file mode 100755 index 2cba204..0000000 --- a/src/java/com/wasteinformationserver/db/MySQLConnector.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.wasteinformationserver.db; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; - -class MySQLConnector extends Database { - - static { - try { - Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public MySQLConnector(String user, String password, String host, int port, String dbName) { - super(user, password, host, port, dbName); - } - - public Connection getConnection() throws SQLException { - DriverManager.setLoginTimeout(1); - return DriverManager.getConnection( - "jdbc:mysql://" + host + ":" + port + "/" + dbName + "?useSSL=false&serverTimezone=CET", - user, - password); - } - -} diff --git a/src/java/com/wasteinformationserver/mqtt/MqttService.kt b/src/java/com/wasteinformationserver/mqtt/MqttService.kt index fdde9d7..f2cd90c 100644 --- a/src/java/com/wasteinformationserver/mqtt/MqttService.kt +++ b/src/java/com/wasteinformationserver/mqtt/MqttService.kt @@ -4,9 +4,9 @@ import com.wasteinformationserver.basicutils.Log.Log.debug import com.wasteinformationserver.basicutils.Log.Log.error import com.wasteinformationserver.basicutils.Log.Log.info import com.wasteinformationserver.basicutils.Log.Log.message +import com.wasteinformationserver.basicutils.Log.Log.warning import com.wasteinformationserver.db.JDBC import org.eclipse.paho.client.mqttv3.* -import java.io.IOException import java.sql.SQLException import java.text.ParseException import java.text.SimpleDateFormat @@ -25,11 +25,7 @@ class MqttService(serverurl: String, port: String) { private var db: JDBC = JDBC.getInstance() /** - * init mqtt service - * JDBC has to be inited before - * - * @param serverurl mqtt server ip or hostname - * @param port mqtt server port + * initial login to db */ init { connectToDb() @@ -91,12 +87,19 @@ class MqttService(serverurl: String, port: String) { } } + /** + * Check if device is configured and zone infos are stored in db + * + * @param citywastezoneid zone/city id + * @param deviceid device id + */ private fun checkDatabase(citywastezoneid: Int, deviceid: Int) { var wastetype = -1 val set2 = db.executeQuery("SELECT * FROM cities WHERE `id`='$citywastezoneid'") try { set2.last() if (set2.row != 1) { //error + warning("multiple Rows with same city id found - DB Error") } else { val typ = set2.getString("wastetype") @@ -136,8 +139,11 @@ class MqttService(serverurl: String, port: String) { } } + /** + * send a mqtt message to predefined topic + */ private fun tramsmitMessage(temp: String) { - debug("sending message >>>$temp") + message("reply back to PCB: $temp") val message = MqttMessage(temp.toByteArray()) message.qos = 2 try { @@ -147,16 +153,9 @@ class MqttService(serverurl: String, port: String) { } } - private fun getTyp(number: Int): String? { - return when (number) { - 1 -> "Plastic" - 2 -> "Metal" - 3 -> "Residual waste" - 4 -> "Biowaste" - else -> null - } - } - + /** + * parse Type name to representing integer value + */ private fun getIntTyp(temp: String): Int { return when (temp) { "Plastic" -> 1 @@ -167,6 +166,9 @@ class MqttService(serverurl: String, port: String) { } } + /** + * receives connection object and initial connection to db + */ private fun connectToDb() { db = JDBC.getInstance() } diff --git a/src/java/com/wasteinformationserver/website/HttpTools.kt b/src/java/com/wasteinformationserver/website/HttpTools.kt index 8570df0..5ff265e 100644 --- a/src/java/com/wasteinformationserver/website/HttpTools.kt +++ b/src/java/com/wasteinformationserver/website/HttpTools.kt @@ -17,7 +17,7 @@ class HttpTools { * @param value input string * @return md5 hash */ - fun StringToMD5(value: String): String { + fun stringToMD5(value: String): String { return try { val md = MessageDigest.getInstance("MD5") val messageDigest = md.digest(value.toByteArray()) diff --git a/src/java/com/wasteinformationserver/website/datarequests/AdminRequests.java b/src/java/com/wasteinformationserver/website/datarequests/AdminRequests.java index 04bb4d4..f91f38d 100644 --- a/src/java/com/wasteinformationserver/website/datarequests/AdminRequests.java +++ b/src/java/com/wasteinformationserver/website/datarequests/AdminRequests.java @@ -42,7 +42,7 @@ public class AdminRequests extends PostRequest { Log.Log.warning("not jar --> cant restart"); /* Build command: java -jar application.jar */ - final ArrayList command = new ArrayList(); + final ArrayList command = new ArrayList<>(); command.add(javaBin); command.add("-jar"); command.add(currentJar.getPath()); diff --git a/src/java/com/wasteinformationserver/website/datarequests/DeviceRequest.kt b/src/java/com/wasteinformationserver/website/datarequests/DeviceRequest.kt index e3a000c..f8ea45d 100644 --- a/src/java/com/wasteinformationserver/website/datarequests/DeviceRequest.kt +++ b/src/java/com/wasteinformationserver/website/datarequests/DeviceRequest.kt @@ -74,7 +74,7 @@ class DeviceRequest : PostRequest() { var prev = "" while (deviceset.next()) { if (prev != deviceset.getString("name")) { - if (!deviceset.isFirst()) { + if (!deviceset.isFirst) { sb.append(",") } sb.append("\"").append(deviceset.getString("name")).append("\":\"").append(deviceset.getString("name")).append("\"") @@ -99,7 +99,7 @@ class DeviceRequest : PostRequest() { while (deviceset.next()) { if (prev != deviceset.getInt("zone")) { sb.append("\"").append(deviceset.getInt("zone")).append("\":\"").append(deviceset.getInt("zone")).append("\"") - if (!deviceset.isLast()) { + if (!deviceset.isLast) { sb.append(",") } } @@ -122,7 +122,7 @@ class DeviceRequest : PostRequest() { while (deviceset.next()) { if (prev != deviceset.getString("wastetype")) { sb.append("\"" + deviceset.getString("wastetype") + "\":\"" + deviceset.getString("wastetype") + "\"") - if (!deviceset.isLast()) { + if (!deviceset.isLast) { sb.append(",") } } @@ -171,7 +171,7 @@ class DeviceRequest : PostRequest() { try { val device = jdbc.executeQuery("SELECT * FROM cities WHERE name='" + params["cityname"] + "' AND wastetype='" + params["wastetype"] + "' AND zone='" + params["zonename"] + "'") device.first() - var cityid = device.getInt("id") + val cityid = device.getInt("id") jdbc.executeUpdate("INSERT INTO `device_city` (`DeviceID`, `CityID`) VALUES ('" + params["deviceid"] + "', '" + cityid + "');") } catch (e: SQLException) { e.printStackTrace() diff --git a/src/java/com/wasteinformationserver/website/datarequests/NewDateRequest.kt b/src/java/com/wasteinformationserver/website/datarequests/NewDateRequest.kt index 1b4114e..ab29ec1 100644 --- a/src/java/com/wasteinformationserver/website/datarequests/NewDateRequest.kt +++ b/src/java/com/wasteinformationserver/website/datarequests/NewDateRequest.kt @@ -30,9 +30,7 @@ class NewDateRequest : PostRequest() { try { var prev = "" while (set.next()) { - if (prev == set.getString("name")) { - } - else { + if (prev != set.getString("name")) { // not same --> new element if (!set.isFirst) { sb.append(",") } @@ -55,9 +53,7 @@ class NewDateRequest : PostRequest() { try { var prev = 42 while (set.next()) { - if (prev == set.getInt("zone")) { - } - else { + if (prev != set.getInt("zone")) { // not same --> append next sb.append("{\"zone\":\"" + set.getInt("zone") + "\"}") if (!set.isLast) { sb.append(",") @@ -79,9 +75,7 @@ class NewDateRequest : PostRequest() { try { var prev = "42" while (set.next()) { - if (prev === set.getString("wastetype")) { - } - else { + if (prev !== set.getString("wastetype")) { sb.append("{\"wastetype\":\"" + set.getString("wastetype") + "\"}") if (!set.isLast) { sb.append(",") diff --git a/src/java/com/wasteinformationserver/website/datarequests/RegisterRequest.kt b/src/java/com/wasteinformationserver/website/datarequests/RegisterRequest.kt index 52bda99..d1b697a 100644 --- a/src/java/com/wasteinformationserver/website/datarequests/RegisterRequest.kt +++ b/src/java/com/wasteinformationserver/website/datarequests/RegisterRequest.kt @@ -3,7 +3,7 @@ package com.wasteinformationserver.website.datarequests import com.wasteinformationserver.basicutils.Log import com.wasteinformationserver.basicutils.Log.Log.debug import com.wasteinformationserver.db.JDBC -import com.wasteinformationserver.website.HttpTools.Companion.StringToMD5 +import com.wasteinformationserver.website.HttpTools.Companion.stringToMD5 import com.wasteinformationserver.website.basicrequest.PostRequest import java.io.IOException import java.sql.SQLException @@ -12,15 +12,16 @@ import java.util.* class RegisterRequest : PostRequest() { override fun request(params: HashMap): String { debug(params.toString()) - val passhash = StringToMD5(params["password"]!!) - var reply: StringBuilder = StringBuilder("{") + val passhash = stringToMD5(params["password"]!!) + val reply: StringBuilder = StringBuilder("{") try { - var myjd: JDBC = JDBC.getInstance() + val myjd: JDBC = JDBC.getInstance() val status = myjd.executeUpdate("INSERT INTO `user` (`username`, `firstName`, `secondName`, `password`, `email`, `logindate`) VALUES ('" + params["username"] + "', '" + params["firstname"] + "', '" + params["lastname"] + "', '" + passhash + "', '" + params["email"] + "', current_timestamp());") if (status == 1) { reply.append("\"accept\": true") - } else { + } + else { reply.append("\"accept\": false") } diff --git a/src/java/com/wasteinformationserver/website/datarequests/UserInfoRequest.kt b/src/java/com/wasteinformationserver/website/datarequests/UserInfoRequest.kt index 09fb737..7c8f226 100644 --- a/src/java/com/wasteinformationserver/website/datarequests/UserInfoRequest.kt +++ b/src/java/com/wasteinformationserver/website/datarequests/UserInfoRequest.kt @@ -6,14 +6,14 @@ import java.util.* class UserInfoRequest : PostRequest() { override fun request(params: HashMap): String { //TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - when (params.get("action")) { + when (params["action"]) { "getlogins" -> { println("heyho") } - ""->{ + "" -> { //todo o } } - return "{}"; + return "{}" } } \ No newline at end of file diff --git a/src/java/com/wasteinformationserver/website/datarequests/login/LoginRequest.kt b/src/java/com/wasteinformationserver/website/datarequests/login/LoginRequest.kt index 47c1b27..a055c26 100644 --- a/src/java/com/wasteinformationserver/website/datarequests/login/LoginRequest.kt +++ b/src/java/com/wasteinformationserver/website/datarequests/login/LoginRequest.kt @@ -4,7 +4,7 @@ import com.wasteinformationserver.basicutils.Log.Log.debug import com.wasteinformationserver.basicutils.Log.Log.error import com.wasteinformationserver.basicutils.Log.Log.message import com.wasteinformationserver.db.JDBC -import com.wasteinformationserver.website.HttpTools.Companion.StringToMD5 +import com.wasteinformationserver.website.HttpTools.Companion.stringToMD5 import com.wasteinformationserver.website.basicrequest.PostRequest import java.io.IOException import java.sql.SQLException @@ -33,12 +33,13 @@ class LoginRequest : PostRequest() { try { s.last() if (s.row == 1) { //success - if (StringToMD5(password!!) == s.getString("password")) { + if (stringToMD5(password!!) == s.getString("password")) { debug("login success") LoginState.getObject().logIn() LoginState.getObject().setAccountData(username, s.getString("firstName"), s.getString("secondName"), s.getString("email"), s.getInt("permission")) response = "{\"accept\": true}" - } else { + } + else { debug("wrong password") } } else if (s.row == 0) { //user not found diff --git a/src/java/com/wasteinformationserver/website/datarequests/login/LoginState.java b/src/java/com/wasteinformationserver/website/datarequests/login/LoginState.java index c89b361..1147789 100644 --- a/src/java/com/wasteinformationserver/website/datarequests/login/LoginState.java +++ b/src/java/com/wasteinformationserver/website/datarequests/login/LoginState.java @@ -5,7 +5,7 @@ package com.wasteinformationserver.website.datarequests.login; */ public class LoginState { - private static LoginState mythis = new LoginState(); + private static final LoginState mythis = new LoginState(); /** * get object