changes (there are bugs, this is unstable!)
This commit is contained in:
@@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
|||||||
@@ -11,21 +11,8 @@ public class ConfigManager {
|
|||||||
private ConfigManager() {
|
private ConfigManager() {
|
||||||
this.configFile = new File(Constants.CONFIG_FILE);
|
this.configFile = new File(Constants.CONFIG_FILE);
|
||||||
this.config = new Properties();
|
this.config = new Properties();
|
||||||
|
|
||||||
if (!configFile.exists()) {
|
|
||||||
try {
|
|
||||||
createFiles();
|
|
||||||
} catch (IOException e) {
|
|
||||||
Constants.LOGGER.error("Error creating configuration files: ", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
loadConfig();
|
loadConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void init() {
|
|
||||||
ConfigManager.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static synchronized ConfigManager getInstance() {
|
public static synchronized ConfigManager getInstance() {
|
||||||
if (instance == null) {
|
if (instance == null) {
|
||||||
@@ -34,25 +21,6 @@ public class ConfigManager {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createFiles() throws IOException {
|
|
||||||
File baseDir = new File(Constants.BASE_DIR);
|
|
||||||
if (!baseDir.exists()) baseDir.mkdirs();
|
|
||||||
|
|
||||||
try (InputStream defaultConfigStream = getClass().getClassLoader().getResourceAsStream("default.properties");
|
|
||||||
FileOutputStream fos = new FileOutputStream(configFile)) {
|
|
||||||
|
|
||||||
if (defaultConfigStream != null) {
|
|
||||||
byte[] buffer = new byte[1024];
|
|
||||||
int bytesRead;
|
|
||||||
while ((bytesRead = defaultConfigStream.read(buffer)) != -1) {
|
|
||||||
fos.write(buffer, 0, bytesRead);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Constants.LOGGER.error("File not found: default.properties");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadConfig() {
|
private void loadConfig() {
|
||||||
try (FileInputStream fis = new FileInputStream(configFile)) {
|
try (FileInputStream fis = new FileInputStream(configFile)) {
|
||||||
config.load(fis);
|
config.load(fis);
|
||||||
|
|||||||
@@ -1,23 +1,18 @@
|
|||||||
package net.miarma.contaminus.common;
|
package net.miarma.contaminus.common;
|
||||||
|
|
||||||
import io.vertx.core.impl.logging.Logger;
|
import io.vertx.core.impl.logging.Logger;
|
||||||
import io.vertx.core.impl.logging.LoggerFactory;
|
import net.miarma.contaminus.database.DatabaseManager;
|
||||||
import net.miarma.contaminus.util.SystemUtil;
|
|
||||||
|
|
||||||
public class Constants {
|
public class Constants {
|
||||||
public static final String APP_NAME = "ContaminUS";
|
public static final String APP_NAME = "ContaminUS";
|
||||||
public static final int API_VERSION = 1;
|
public static final int API_VERSION = 1;
|
||||||
public static final String API_PREFIX = "/api/v" + API_VERSION;
|
public static final String API_PREFIX = "/api/v" + Constants.API_VERSION;
|
||||||
public static final String HOME_DIR = SystemUtil.getOS() == OSType.WINDOWS ?
|
public static String HOME_DIR;
|
||||||
"C:/Users/" + System.getProperty("user.name") + "/" :
|
public static String BASE_DIR;
|
||||||
System.getProperty("user.home").contains("root") ? "/root/" :
|
public static String CONFIG_FILE;
|
||||||
"/home/" + System.getProperty("user.name") + "/";
|
public static ConfigManager CONFIG;
|
||||||
public static final String BASE_DIR = HOME_DIR +
|
public static DatabaseManager DB;
|
||||||
(SystemUtil.getOS() == OSType.WINDOWS ? ".contaminus" :
|
public static Logger LOGGER;
|
||||||
SystemUtil.getOS() == OSType.LINUX ? ".config/contaminus" :
|
|
||||||
".contaminus");
|
|
||||||
public static final String CONFIG_FILE = BASE_DIR + "/" + "config.properties";
|
|
||||||
public static final Logger LOGGER = LoggerFactory.getLogger(APP_NAME);
|
|
||||||
|
|
||||||
/* API Endpoints */
|
/* API Endpoints */
|
||||||
public static final String GET_GROUPS = API_PREFIX + "/groups";
|
public static final String GET_GROUPS = API_PREFIX + "/groups";
|
||||||
|
|||||||
@@ -8,39 +8,32 @@ import java.util.List;
|
|||||||
import io.vertx.core.Future;
|
import io.vertx.core.Future;
|
||||||
import io.vertx.core.Handler;
|
import io.vertx.core.Handler;
|
||||||
import io.vertx.core.Vertx;
|
import io.vertx.core.Vertx;
|
||||||
import io.vertx.jdbcclient.JDBCConnectOptions;
|
import io.vertx.core.json.JsonObject;
|
||||||
import io.vertx.jdbcclient.JDBCPool;
|
import io.vertx.jdbcclient.JDBCPool;
|
||||||
import io.vertx.sqlclient.PoolOptions;
|
|
||||||
import io.vertx.sqlclient.Row;
|
import io.vertx.sqlclient.Row;
|
||||||
import io.vertx.sqlclient.RowSet;
|
import io.vertx.sqlclient.RowSet;
|
||||||
import net.miarma.contaminus.common.ConfigManager;
|
import net.miarma.contaminus.common.ConfigManager;
|
||||||
import net.miarma.contaminus.common.Constants;
|
import net.miarma.contaminus.common.Constants;
|
||||||
|
|
||||||
public class DatabaseManager {
|
public class DatabaseManager {
|
||||||
private final JDBCPool pool;
|
private final JDBCPool pool;
|
||||||
private final Vertx vertx = Vertx.vertx();
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
private static DatabaseManager instance;
|
public DatabaseManager(Vertx vertx) {
|
||||||
|
|
||||||
public static DatabaseManager getInstance() {
|
|
||||||
if (instance == null) {
|
|
||||||
instance = new DatabaseManager();
|
|
||||||
}
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private DatabaseManager() {
|
|
||||||
ConfigManager config = ConfigManager.getInstance();
|
ConfigManager config = ConfigManager.getInstance();
|
||||||
pool = JDBCPool.pool(vertx,
|
|
||||||
new JDBCConnectOptions()
|
JsonObject dbConfig = new JsonObject()
|
||||||
.setJdbcUrl(config.getJdbcUrl())
|
.put("url", config.getStringProperty("db.protocol") + "//" +
|
||||||
.setUser(config.getStringProperty("db.user"))
|
config.getStringProperty("db.host") + ":" +
|
||||||
.setPassword(config.getStringProperty("db.pwd")),
|
config.getStringProperty("db.port") + "/" +
|
||||||
new PoolOptions()
|
config.getStringProperty("db.name"))
|
||||||
.setMaxSize(5)
|
.put("user", config.getStringProperty("db.user"))
|
||||||
);
|
.put("password", config.getStringProperty("db.pwd"))
|
||||||
|
.put("max_pool_size", config.getStringProperty("db.poolSize"));
|
||||||
|
|
||||||
|
pool = JDBCPool.pool(vertx, dbConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Future<RowSet<Row>> testConnection() {
|
public Future<RowSet<Row>> testConnection() {
|
||||||
return pool.query("SELECT 1").execute();
|
return pool.query("SELECT 1").execute();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,91 @@
|
|||||||
package net.miarma.contaminus.database.entities;
|
package net.miarma.contaminus.database.entities;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import io.vertx.sqlclient.Row;
|
||||||
|
import net.miarma.contaminus.common.Table;
|
||||||
|
|
||||||
|
@Table("actuators")
|
||||||
public class Actuator {
|
public class Actuator {
|
||||||
|
|
||||||
}
|
private int actuatorId;
|
||||||
|
private int deviceId;
|
||||||
|
private int status;
|
||||||
|
private long timestamp;
|
||||||
|
|
||||||
|
public Actuator() {}
|
||||||
|
|
||||||
|
public Actuator(Row row) {
|
||||||
|
this.actuatorId = row.getInteger("actuatorId");
|
||||||
|
this.deviceId = row.getInteger("deviceId");
|
||||||
|
this.status = row.getInteger("status");
|
||||||
|
this.timestamp = row.getLong("timestamp");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Actuator(int actuatorId, int deviceId, int status, long timestamp) {
|
||||||
|
super();
|
||||||
|
this.actuatorId = actuatorId;
|
||||||
|
this.deviceId = deviceId;
|
||||||
|
this.status = status;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getActuatorId() {
|
||||||
|
return actuatorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActuatorId(int actuatorId) {
|
||||||
|
this.actuatorId = actuatorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDeviceId() {
|
||||||
|
return deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeviceId(int deviceId) {
|
||||||
|
this.deviceId = deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(int status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTimestamp() {
|
||||||
|
return timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimestamp(long timestamp) {
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(actuatorId, deviceId, status, timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
Actuator other = (Actuator) obj;
|
||||||
|
return actuatorId == other.actuatorId && deviceId == other.deviceId
|
||||||
|
&& status == other.status && timestamp == other.timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Actuator [actuatorId=" + actuatorId + ", deviceId=" + deviceId + ", status=" + status + ", timestamp="
|
||||||
|
+ timestamp + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,5 +1,91 @@
|
|||||||
package net.miarma.contaminus.database.entities;
|
package net.miarma.contaminus.database.entities;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import io.vertx.sqlclient.Row;
|
||||||
|
import net.miarma.contaminus.common.Table;
|
||||||
|
|
||||||
|
@Table("co_values")
|
||||||
public class COValue {
|
public class COValue {
|
||||||
|
|
||||||
}
|
private int valueId;
|
||||||
|
private int sensorId;
|
||||||
|
private float value;
|
||||||
|
private long timestamp;
|
||||||
|
|
||||||
|
public COValue() {}
|
||||||
|
|
||||||
|
public COValue(Row row) {
|
||||||
|
this.valueId = row.getInteger("valueId");
|
||||||
|
this.sensorId = row.getInteger("sensorId");
|
||||||
|
this.value = row.getFloat("value");
|
||||||
|
this.timestamp = row.getLong("timestamp");
|
||||||
|
}
|
||||||
|
|
||||||
|
public COValue(int valueId, int sensorId, float value, long timestamp) {
|
||||||
|
super();
|
||||||
|
this.valueId = valueId;
|
||||||
|
this.sensorId = sensorId;
|
||||||
|
this.value = value;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getValueId() {
|
||||||
|
return valueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValueId(int valueId) {
|
||||||
|
this.valueId = valueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSensorId() {
|
||||||
|
return sensorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSensorId(int sensorId) {
|
||||||
|
this.sensorId = sensorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(float value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTimestamp() {
|
||||||
|
return timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimestamp(long timestamp) {
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(sensorId, timestamp, value, valueId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
COValue other = (COValue) obj;
|
||||||
|
return sensorId == other.sensorId
|
||||||
|
&& Objects.equals(timestamp, other.timestamp)
|
||||||
|
&& Float.floatToIntBits(value) == Float.floatToIntBits(other.value) && valueId == other.valueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "COValue [valueId=" + valueId + ", sensorId=" + sensorId + ", value=" + value + ", timestamp="
|
||||||
|
+ timestamp + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,5 +1,81 @@
|
|||||||
package net.miarma.contaminus.database.entities;
|
package net.miarma.contaminus.database.entities;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import io.vertx.sqlclient.Row;
|
||||||
|
import net.miarma.contaminus.common.Table;
|
||||||
|
|
||||||
|
@Table("devices")
|
||||||
public class Device {
|
public class Device {
|
||||||
|
|
||||||
|
private int deviceId;
|
||||||
|
private int groupId;
|
||||||
|
private String deviceName;
|
||||||
|
|
||||||
|
public Device() {}
|
||||||
|
|
||||||
|
public Device(Row row) {
|
||||||
|
this.deviceId = row.getInteger("deviceId");
|
||||||
|
this.groupId = row.getInteger("groupId");
|
||||||
|
this.deviceName = row.getString("deviceName");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Device(int deviceId, int groupId, String deviceName) {
|
||||||
|
super();
|
||||||
|
this.deviceId = deviceId;
|
||||||
|
this.groupId = groupId;
|
||||||
|
this.deviceName = deviceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDeviceId() {
|
||||||
|
return deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeviceId(int deviceId) {
|
||||||
|
this.deviceId = deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getGroupId() {
|
||||||
|
return groupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupId(int groupId) {
|
||||||
|
this.groupId = groupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDeviceName() {
|
||||||
|
return deviceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeviceName(String deviceName) {
|
||||||
|
this.deviceName = deviceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(deviceId, deviceName, groupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
Device other = (Device) obj;
|
||||||
|
return deviceId == other.deviceId
|
||||||
|
&& Objects.equals(deviceName, other.deviceName)
|
||||||
|
&& groupId == other.groupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Device [deviceId=" + deviceId + ", groupId=" + groupId + ", deviceName=" + deviceName + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,103 @@
|
|||||||
package net.miarma.contaminus.database.entities;
|
package net.miarma.contaminus.database.entities;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import io.vertx.sqlclient.Row;
|
||||||
|
import net.miarma.contaminus.common.Table;
|
||||||
|
|
||||||
|
@Table("gps_values")
|
||||||
public class GpsValue {
|
public class GpsValue {
|
||||||
|
|
||||||
}
|
private int valueId;
|
||||||
|
private int sensorId;
|
||||||
|
private float lat;
|
||||||
|
private float lon;
|
||||||
|
private long timestamp;
|
||||||
|
|
||||||
|
public GpsValue() {}
|
||||||
|
|
||||||
|
public GpsValue(Row row) {
|
||||||
|
this.valueId = row.getInteger("valueId");
|
||||||
|
this.sensorId = row.getInteger("sensorId");
|
||||||
|
this.lat = row.getFloat("lat");
|
||||||
|
this.lon = row.getFloat("lon");
|
||||||
|
this.timestamp = row.getLong("timestamp");
|
||||||
|
}
|
||||||
|
|
||||||
|
public GpsValue(int valueId, int sensorId, float lat, float lon, long timestamp) {
|
||||||
|
super();
|
||||||
|
this.valueId = valueId;
|
||||||
|
this.sensorId = sensorId;
|
||||||
|
this.lat = lat;
|
||||||
|
this.lon = lon;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getValueId() {
|
||||||
|
return valueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValueId(int valueId) {
|
||||||
|
this.valueId = valueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSensorId() {
|
||||||
|
return sensorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSensorId(int sensorId) {
|
||||||
|
this.sensorId = sensorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getLat() {
|
||||||
|
return lat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLat(float lat) {
|
||||||
|
this.lat = lat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getLon() {
|
||||||
|
return lon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLon(float lon) {
|
||||||
|
this.lon = lon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTimestamp() {
|
||||||
|
return timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimestamp(long timestamp) {
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(lat, lon, sensorId, timestamp, valueId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
GpsValue other = (GpsValue) obj;
|
||||||
|
return Float.floatToIntBits(lat) == Float.floatToIntBits(other.lat)
|
||||||
|
&& Float.floatToIntBits(lon) == Float.floatToIntBits(other.lon)
|
||||||
|
&& sensorId == other.sensorId && timestamp == other.timestamp && valueId == other.valueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "GpsValue [valueId=" + valueId + ", sensorId=" + sensorId + ", lat=" + lat + ", lon=" + lon
|
||||||
|
+ ", timestamp=" + timestamp + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,17 +1,67 @@
|
|||||||
package net.miarma.contaminus.database.entities;
|
package net.miarma.contaminus.database.entities;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import io.vertx.sqlclient.Row;
|
||||||
import net.miarma.contaminus.common.Table;
|
import net.miarma.contaminus.common.Table;
|
||||||
|
|
||||||
@Table("groups")
|
@Table("groups")
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public class Group {
|
public class Group {
|
||||||
private int groupId;
|
|
||||||
private String groupName;
|
private int groupId;
|
||||||
|
private String groupName;
|
||||||
public Group() {}
|
|
||||||
|
public Group() {}
|
||||||
|
|
||||||
|
public Group(Row row) {
|
||||||
|
this.groupId = row.getInteger("groupId");
|
||||||
|
this.groupName = row.getString("groupName");
|
||||||
|
}
|
||||||
|
|
||||||
public Group(int groupId, String groupName) {
|
public Group(int groupId, String groupName) {
|
||||||
|
super();
|
||||||
this.groupId = groupId;
|
this.groupId = groupId;
|
||||||
this.groupName = groupName;
|
this.groupName = groupName;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public int getGroupId() {
|
||||||
|
return groupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupId(int groupId) {
|
||||||
|
this.groupId = groupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroupName() {
|
||||||
|
return groupName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupName(String groupName) {
|
||||||
|
this.groupName = groupName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(groupId, groupName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
Group other = (Group) obj;
|
||||||
|
return groupId == other.groupId
|
||||||
|
&& Objects.equals(groupName, other.groupName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Group [groupId=" + groupId + ", groupName=" + groupName + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,5 +1,112 @@
|
|||||||
package net.miarma.contaminus.database.entities;
|
package net.miarma.contaminus.database.entities;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import io.vertx.sqlclient.Row;
|
||||||
|
import net.miarma.contaminus.common.Table;
|
||||||
|
|
||||||
|
@Table("sensors")
|
||||||
public class Sensor {
|
public class Sensor {
|
||||||
|
|
||||||
|
private int sensorId;
|
||||||
|
private int deviceId;
|
||||||
|
private String sensorType;
|
||||||
|
private String unit;
|
||||||
|
private int status;
|
||||||
|
private long timestamp;
|
||||||
|
|
||||||
|
public Sensor() {}
|
||||||
|
|
||||||
|
public Sensor(Row row) {
|
||||||
|
this.sensorId = row.getInteger("sensorId");
|
||||||
|
this.deviceId = row.getInteger("deviceId");
|
||||||
|
this.sensorType = row.getString("sensorType");
|
||||||
|
this.unit = row.getString("unit");
|
||||||
|
this.status = row.getInteger("status");
|
||||||
|
this.timestamp = row.getLong("timestamp");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sensor(int sensorId, int deviceId, String sensorType, String unit, int status, long timestamp) {
|
||||||
|
super();
|
||||||
|
this.sensorId = sensorId;
|
||||||
|
this.deviceId = deviceId;
|
||||||
|
this.sensorType = sensorType;
|
||||||
|
this.unit = unit;
|
||||||
|
this.status = status;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSensorId() {
|
||||||
|
return sensorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSensorId(int sensorId) {
|
||||||
|
this.sensorId = sensorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDeviceId() {
|
||||||
|
return deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeviceId(int deviceId) {
|
||||||
|
this.deviceId = deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSensorType() {
|
||||||
|
return sensorType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSensorType(String sensorType) {
|
||||||
|
this.sensorType = sensorType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUnit() {
|
||||||
|
return unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUnit(String unit) {
|
||||||
|
this.unit = unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(int status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTimestamp() {
|
||||||
|
return timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimestamp(long timestamp) {
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(deviceId, sensorId, sensorType, status, timestamp, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
Sensor other = (Sensor) obj;
|
||||||
|
return deviceId == other.deviceId && sensorId == other.sensorId && Objects.equals(sensorType, other.sensorType)
|
||||||
|
&& status == other.status && timestamp == other.timestamp && Objects.equals(unit, other.unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Sensor [sensorId=" + sensorId + ", deviceId=" + deviceId + ", sensorType=" + sensorType + ", unit="
|
||||||
|
+ unit + ", status=" + status + ", timestamp=" + timestamp + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,103 @@
|
|||||||
package net.miarma.contaminus.database.entities;
|
package net.miarma.contaminus.database.entities;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import io.vertx.sqlclient.Row;
|
||||||
|
import net.miarma.contaminus.common.Table;
|
||||||
|
|
||||||
|
@Table("weather_values")
|
||||||
public class WeatherValue {
|
public class WeatherValue {
|
||||||
|
|
||||||
}
|
private int valueId;
|
||||||
|
private int sensorId;
|
||||||
|
private float temperature;
|
||||||
|
private float humidity;
|
||||||
|
private long timestamp;
|
||||||
|
|
||||||
|
public WeatherValue() {}
|
||||||
|
|
||||||
|
public WeatherValue(Row row) {
|
||||||
|
this.valueId = row.getInteger("valueId");
|
||||||
|
this.sensorId = row.getInteger("sensorId");
|
||||||
|
this.temperature = row.getFloat("temperature");
|
||||||
|
this.humidity = row.getFloat("humidity");
|
||||||
|
this.timestamp = row.getLong("timestamp");
|
||||||
|
}
|
||||||
|
|
||||||
|
public WeatherValue(int valueId, int sensorId, float temperature, float humidity, long timestamp) {
|
||||||
|
super();
|
||||||
|
this.valueId = valueId;
|
||||||
|
this.sensorId = sensorId;
|
||||||
|
this.temperature = temperature;
|
||||||
|
this.humidity = humidity;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getValueId() {
|
||||||
|
return valueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValueId(int valueId) {
|
||||||
|
this.valueId = valueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSensorId() {
|
||||||
|
return sensorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSensorId(int sensorId) {
|
||||||
|
this.sensorId = sensorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getTemperature() {
|
||||||
|
return temperature;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTemperature(float temperature) {
|
||||||
|
this.temperature = temperature;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getHumidity() {
|
||||||
|
return humidity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHumidity(float humidity) {
|
||||||
|
this.humidity = humidity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTimestamp() {
|
||||||
|
return timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimestamp(long timestamp) {
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(humidity, sensorId, temperature, timestamp, valueId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
WeatherValue other = (WeatherValue) obj;
|
||||||
|
return Float.floatToIntBits(humidity) == Float.floatToIntBits(other.humidity) && sensorId == other.sensorId
|
||||||
|
&& Float.floatToIntBits(temperature) == Float.floatToIntBits(other.temperature)
|
||||||
|
&& timestamp == other.timestamp && valueId == other.valueId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "WeatherValue [valueId=" + valueId + ", sensorId=" + sensorId + ", temperature=" + temperature
|
||||||
|
+ ", humidity=" + humidity + ", timestamp=" + timestamp + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -31,7 +31,7 @@ public class DataLayerAPIVerticle extends AbstractVerticle {
|
|||||||
|
|
||||||
configManager = ConfigManager.getInstance();
|
configManager = ConfigManager.getInstance();
|
||||||
gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
|
gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
|
||||||
dbManager = DatabaseManager.getInstance();
|
dbManager = new DatabaseManager(vertx);
|
||||||
|
|
||||||
Router router = Router.router(vertx);
|
Router router = Router.router(vertx);
|
||||||
Set<HttpMethod> allowedMethods = new HashSet<>(
|
Set<HttpMethod> allowedMethods = new HashSet<>(
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class LogicLayerAPIVerticle extends AbstractVerticle {
|
|||||||
|
|
||||||
configManager = ConfigManager.getInstance();
|
configManager = ConfigManager.getInstance();
|
||||||
gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
|
gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
|
||||||
dbManager = DatabaseManager.getInstance();
|
dbManager = new DatabaseManager(vertx);
|
||||||
|
|
||||||
Router router = Router.router(vertx);
|
Router router = Router.router(vertx);
|
||||||
Set<HttpMethod> allowedMethods = new HashSet<>(
|
Set<HttpMethod> allowedMethods = new HashSet<>(
|
||||||
|
|||||||
@@ -1,25 +1,81 @@
|
|||||||
package net.miarma.contaminus.server;
|
package net.miarma.contaminus.server;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
|
|
||||||
import io.vertx.core.AbstractVerticle;
|
import io.vertx.core.AbstractVerticle;
|
||||||
import io.vertx.core.DeploymentOptions;
|
import io.vertx.core.DeploymentOptions;
|
||||||
|
import io.vertx.core.Launcher;
|
||||||
import io.vertx.core.Promise;
|
import io.vertx.core.Promise;
|
||||||
import io.vertx.core.ThreadingModel;
|
import io.vertx.core.ThreadingModel;
|
||||||
|
import io.vertx.core.impl.logging.LoggerFactory;
|
||||||
|
import net.miarma.contaminus.common.Constants;
|
||||||
|
import net.miarma.contaminus.common.OSType;
|
||||||
|
import net.miarma.contaminus.util.SystemUtil;
|
||||||
|
|
||||||
public class MainVerticle extends AbstractVerticle {
|
public class MainVerticle extends AbstractVerticle {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Promise<Void> startPromise) {
|
public void start(Promise<Void> startPromise) {
|
||||||
final DeploymentOptions options = new DeploymentOptions();
|
final DeploymentOptions options = new DeploymentOptions();
|
||||||
options.setThreadingModel(ThreadingModel.WORKER);
|
options.setThreadingModel(ThreadingModel.WORKER);
|
||||||
|
|
||||||
getVertx().deployVerticle(new DataLayerAPIVerticle(), options);
|
getVertx().deployVerticle(new DataLayerAPIVerticle(), options);
|
||||||
//getVertx().deployVerticle(new LogicLayerAPIVerticle(), options);
|
getVertx().deployVerticle(new LogicLayerAPIVerticle(), options);
|
||||||
//getVertx().deployVerticle(new HttpServerVerticle());
|
getVertx().deployVerticle(new HttpServerVerticle());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stop(Promise<Void> stopPromise) throws Exception {
|
public void stop(Promise<Void> stopPromise) throws Exception {
|
||||||
getVertx().deploymentIDs()
|
getVertx().deploymentIDs()
|
||||||
.forEach(v -> getVertx().undeploy(v));
|
.forEach(v -> getVertx().undeploy(v));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
initializeConstants();
|
||||||
|
initializeDirectories();
|
||||||
|
copyDefaultConfig();
|
||||||
|
Launcher.executeCommand("run", MainVerticle.class.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void initializeConstants() {
|
||||||
|
Constants.HOME_DIR = SystemUtil.getOS() == OSType.WINDOWS ?
|
||||||
|
"C:/Users/" + System.getProperty("user.name") + "/" :
|
||||||
|
System.getProperty("user.home").contains("root") ? "/root/" :
|
||||||
|
"/home/" + System.getProperty("user.name") + "/";
|
||||||
|
|
||||||
|
Constants.BASE_DIR = Constants.HOME_DIR +
|
||||||
|
(SystemUtil.getOS() == OSType.WINDOWS ? ".contaminus" :
|
||||||
|
SystemUtil.getOS() == OSType.LINUX ? ".config/contaminus" :
|
||||||
|
".contaminus");
|
||||||
|
|
||||||
|
Constants.CONFIG_FILE = Constants.BASE_DIR + "/config.properties";
|
||||||
|
System.setProperty("java.util.logging.manager", "org.jboss.logmanager.LogManager");
|
||||||
|
Constants.LOGGER = LoggerFactory.getLogger(Constants.APP_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void initializeDirectories() {
|
||||||
|
File baseDir = new File(Constants.BASE_DIR);
|
||||||
|
if (!baseDir.exists()) {
|
||||||
|
baseDir.mkdirs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void copyDefaultConfig() {
|
||||||
|
File configFile = new File(Constants.CONFIG_FILE);
|
||||||
|
if (!configFile.exists()) {
|
||||||
|
try (InputStream in = MainVerticle.class.getClassLoader().getResourceAsStream("default.properties")) {
|
||||||
|
if (in != null) {
|
||||||
|
Files.copy(in, configFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
} else {
|
||||||
|
Constants.LOGGER.error("Default config file not found in resources");
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
Constants.LOGGER.error("Failed to copy default config file", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,38 +4,46 @@ import net.miarma.contaminus.common.ConfigManager;
|
|||||||
import net.miarma.contaminus.common.OSType;
|
import net.miarma.contaminus.common.OSType;
|
||||||
|
|
||||||
public class SystemUtil {
|
public class SystemUtil {
|
||||||
static ConfigManager configManager = ConfigManager.getInstance();
|
private static ConfigManager configManager;
|
||||||
static String host = configManager.getStringProperty("inet.host");
|
|
||||||
static String origin = configManager.getStringProperty("inet.origin");
|
private static String host;
|
||||||
static int dataApiPort = 8081;
|
private static int dataApiPort;
|
||||||
static int logicApiPort = 8082;
|
private static int logicApiPort;
|
||||||
static int webserverPort = 8080;
|
private static int webserverPort;
|
||||||
|
|
||||||
public static String getHost() {
|
|
||||||
return host;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getDataApiPort() {
|
|
||||||
return dataApiPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getLogicApiPort() {
|
|
||||||
return logicApiPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getWebserverPort() {
|
|
||||||
return webserverPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static OSType getOS() {
|
|
||||||
String os = System.getProperty("os.name").toLowerCase();
|
|
||||||
if (os.contains("win")) {
|
|
||||||
return OSType.WINDOWS;
|
|
||||||
} else if (os.contains("nix") || os.contains("nux")) {
|
|
||||||
return OSType.LINUX;
|
|
||||||
} else {
|
|
||||||
return OSType.INVALID_OS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
configManager = ConfigManager.getInstance();
|
||||||
|
|
||||||
|
host = configManager.getStringProperty("inet.host");
|
||||||
|
dataApiPort = configManager.getIntProperty("data-api.port");
|
||||||
|
logicApiPort = configManager.getIntProperty("logic-api.port");
|
||||||
|
webserverPort = configManager.getIntProperty("web.port");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getHost() {
|
||||||
|
return host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getDataApiPort() {
|
||||||
|
return dataApiPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getLogicApiPort() {
|
||||||
|
return logicApiPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getWebserverPort() {
|
||||||
|
return webserverPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static OSType getOS() {
|
||||||
|
String os = System.getProperty("os.name").toLowerCase();
|
||||||
|
if (os.contains("win")) {
|
||||||
|
return OSType.WINDOWS;
|
||||||
|
} else if (os.contains("nix") || os.contains("nux")) {
|
||||||
|
return OSType.LINUX;
|
||||||
|
} else {
|
||||||
|
return OSType.INVALID_OS;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user