From db317535729cde222bf73eca27553467213b1640 Mon Sep 17 00:00:00 2001 From: Jose Date: Thu, 13 Mar 2025 23:35:59 +0100 Subject: [PATCH] changes (there are bugs, this is unstable!) --- backend/src/main/java/Main.java | 2 - .../contaminus/common/ConfigManager.java | 32 ------ .../miarma/contaminus/common/Constants.java | 21 ++-- .../contaminus/database/DatabaseManager.java | 41 +++---- .../database/entities/Actuator.java | 88 +++++++++++++- .../contaminus/database/entities/COValue.java | 88 +++++++++++++- .../contaminus/database/entities/Device.java | 76 +++++++++++++ .../database/entities/GpsValue.java | 100 +++++++++++++++- .../contaminus/database/entities/Group.java | 64 +++++++++-- .../contaminus/database/entities/Sensor.java | 107 ++++++++++++++++++ .../database/entities/WeatherValue.java | 100 +++++++++++++++- .../server/DataLayerAPIVerticle.java | 2 +- .../server/LogicLayerAPIVerticle.java | 2 +- .../contaminus/server/MainVerticle.java | 90 ++++++++++++--- .../miarma/contaminus/util/SystemUtil.java | 74 ++++++------ 15 files changed, 753 insertions(+), 134 deletions(-) diff --git a/backend/src/main/java/Main.java b/backend/src/main/java/Main.java index 94b2bbf..a7cadc0 100644 --- a/backend/src/main/java/Main.java +++ b/backend/src/main/java/Main.java @@ -1,5 +1,3 @@ - - public class Main { public static void main(String[] args) { diff --git a/backend/src/main/java/net/miarma/contaminus/common/ConfigManager.java b/backend/src/main/java/net/miarma/contaminus/common/ConfigManager.java index cda7f71..212930d 100644 --- a/backend/src/main/java/net/miarma/contaminus/common/ConfigManager.java +++ b/backend/src/main/java/net/miarma/contaminus/common/ConfigManager.java @@ -11,21 +11,8 @@ public class ConfigManager { private ConfigManager() { this.configFile = new File(Constants.CONFIG_FILE); this.config = new Properties(); - - if (!configFile.exists()) { - try { - createFiles(); - } catch (IOException e) { - Constants.LOGGER.error("Error creating configuration files: ", e); - } - } - loadConfig(); } - - public static void init() { - ConfigManager.getInstance(); - } public static synchronized ConfigManager getInstance() { if (instance == null) { @@ -34,25 +21,6 @@ public class ConfigManager { 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() { try (FileInputStream fis = new FileInputStream(configFile)) { config.load(fis); diff --git a/backend/src/main/java/net/miarma/contaminus/common/Constants.java b/backend/src/main/java/net/miarma/contaminus/common/Constants.java index 454ef87..e016784 100644 --- a/backend/src/main/java/net/miarma/contaminus/common/Constants.java +++ b/backend/src/main/java/net/miarma/contaminus/common/Constants.java @@ -1,23 +1,18 @@ package net.miarma.contaminus.common; import io.vertx.core.impl.logging.Logger; -import io.vertx.core.impl.logging.LoggerFactory; -import net.miarma.contaminus.util.SystemUtil; +import net.miarma.contaminus.database.DatabaseManager; public class Constants { public static final String APP_NAME = "ContaminUS"; public static final int API_VERSION = 1; - public static final String API_PREFIX = "/api/v" + API_VERSION; - public static final String HOME_DIR = SystemUtil.getOS() == OSType.WINDOWS ? - "C:/Users/" + System.getProperty("user.name") + "/" : - System.getProperty("user.home").contains("root") ? "/root/" : - "/home/" + System.getProperty("user.name") + "/"; - public static final String BASE_DIR = HOME_DIR + - (SystemUtil.getOS() == OSType.WINDOWS ? ".contaminus" : - 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); + public static final String API_PREFIX = "/api/v" + Constants.API_VERSION; + public static String HOME_DIR; + public static String BASE_DIR; + public static String CONFIG_FILE; + public static ConfigManager CONFIG; + public static DatabaseManager DB; + public static Logger LOGGER; /* API Endpoints */ public static final String GET_GROUPS = API_PREFIX + "/groups"; diff --git a/backend/src/main/java/net/miarma/contaminus/database/DatabaseManager.java b/backend/src/main/java/net/miarma/contaminus/database/DatabaseManager.java index 4991120..f126c3c 100644 --- a/backend/src/main/java/net/miarma/contaminus/database/DatabaseManager.java +++ b/backend/src/main/java/net/miarma/contaminus/database/DatabaseManager.java @@ -8,39 +8,32 @@ import java.util.List; import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Vertx; -import io.vertx.jdbcclient.JDBCConnectOptions; +import io.vertx.core.json.JsonObject; import io.vertx.jdbcclient.JDBCPool; -import io.vertx.sqlclient.PoolOptions; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.RowSet; import net.miarma.contaminus.common.ConfigManager; import net.miarma.contaminus.common.Constants; public class DatabaseManager { - private final JDBCPool pool; - private final Vertx vertx = Vertx.vertx(); - - private static DatabaseManager instance; - - public static DatabaseManager getInstance() { - if (instance == null) { - instance = new DatabaseManager(); - } - return instance; - } - - private DatabaseManager() { + private final JDBCPool pool; + + @SuppressWarnings("deprecation") + public DatabaseManager(Vertx vertx) { ConfigManager config = ConfigManager.getInstance(); - pool = JDBCPool.pool(vertx, - new JDBCConnectOptions() - .setJdbcUrl(config.getJdbcUrl()) - .setUser(config.getStringProperty("db.user")) - .setPassword(config.getStringProperty("db.pwd")), - new PoolOptions() - .setMaxSize(5) - ); + + JsonObject dbConfig = new JsonObject() + .put("url", config.getStringProperty("db.protocol") + "//" + + config.getStringProperty("db.host") + ":" + + config.getStringProperty("db.port") + "/" + + config.getStringProperty("db.name")) + .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> testConnection() { return pool.query("SELECT 1").execute(); } diff --git a/backend/src/main/java/net/miarma/contaminus/database/entities/Actuator.java b/backend/src/main/java/net/miarma/contaminus/database/entities/Actuator.java index e50fe8f..9736302 100644 --- a/backend/src/main/java/net/miarma/contaminus/database/entities/Actuator.java +++ b/backend/src/main/java/net/miarma/contaminus/database/entities/Actuator.java @@ -1,5 +1,91 @@ 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 { -} + 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 + "]"; + } + + + +} \ No newline at end of file diff --git a/backend/src/main/java/net/miarma/contaminus/database/entities/COValue.java b/backend/src/main/java/net/miarma/contaminus/database/entities/COValue.java index c4e4cd7..26fcc02 100644 --- a/backend/src/main/java/net/miarma/contaminus/database/entities/COValue.java +++ b/backend/src/main/java/net/miarma/contaminus/database/entities/COValue.java @@ -1,5 +1,91 @@ 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 { -} + 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 + "]"; + } + + +} \ No newline at end of file diff --git a/backend/src/main/java/net/miarma/contaminus/database/entities/Device.java b/backend/src/main/java/net/miarma/contaminus/database/entities/Device.java index 8eaac93..db9f60e 100644 --- a/backend/src/main/java/net/miarma/contaminus/database/entities/Device.java +++ b/backend/src/main/java/net/miarma/contaminus/database/entities/Device.java @@ -1,5 +1,81 @@ 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 { + 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 + "]"; + } + + + } + diff --git a/backend/src/main/java/net/miarma/contaminus/database/entities/GpsValue.java b/backend/src/main/java/net/miarma/contaminus/database/entities/GpsValue.java index 31c12d3..b0db81b 100644 --- a/backend/src/main/java/net/miarma/contaminus/database/entities/GpsValue.java +++ b/backend/src/main/java/net/miarma/contaminus/database/entities/GpsValue.java @@ -1,5 +1,103 @@ 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 { -} + 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 + "]"; + } + + + +} \ No newline at end of file diff --git a/backend/src/main/java/net/miarma/contaminus/database/entities/Group.java b/backend/src/main/java/net/miarma/contaminus/database/entities/Group.java index 9a8d5bd..58f1e2a 100644 --- a/backend/src/main/java/net/miarma/contaminus/database/entities/Group.java +++ b/backend/src/main/java/net/miarma/contaminus/database/entities/Group.java @@ -1,17 +1,67 @@ package net.miarma.contaminus.database.entities; +import java.util.Objects; + +import io.vertx.sqlclient.Row; import net.miarma.contaminus.common.Table; @Table("groups") -@SuppressWarnings("unused") public class Group { - private int groupId; - private String groupName; - - public Group() {} - + + private int groupId; + private String groupName; + + public Group() {} + + public Group(Row row) { + this.groupId = row.getInteger("groupId"); + this.groupName = row.getString("groupName"); + } + public Group(int groupId, String groupName) { + super(); this.groupId = groupId; 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 + "]"; + } + + +} \ No newline at end of file diff --git a/backend/src/main/java/net/miarma/contaminus/database/entities/Sensor.java b/backend/src/main/java/net/miarma/contaminus/database/entities/Sensor.java index dc99853..9000a20 100644 --- a/backend/src/main/java/net/miarma/contaminus/database/entities/Sensor.java +++ b/backend/src/main/java/net/miarma/contaminus/database/entities/Sensor.java @@ -1,5 +1,112 @@ 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 { + 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 + "]"; + } + + } diff --git a/backend/src/main/java/net/miarma/contaminus/database/entities/WeatherValue.java b/backend/src/main/java/net/miarma/contaminus/database/entities/WeatherValue.java index 707f5a7..e69f485 100644 --- a/backend/src/main/java/net/miarma/contaminus/database/entities/WeatherValue.java +++ b/backend/src/main/java/net/miarma/contaminus/database/entities/WeatherValue.java @@ -1,5 +1,103 @@ 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 { -} + 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 + "]"; + } + + + +} \ No newline at end of file diff --git a/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java index 94aabc8..b68ac76 100644 --- a/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java +++ b/backend/src/main/java/net/miarma/contaminus/server/DataLayerAPIVerticle.java @@ -31,7 +31,7 @@ public class DataLayerAPIVerticle extends AbstractVerticle { configManager = ConfigManager.getInstance(); gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); - dbManager = DatabaseManager.getInstance(); + dbManager = new DatabaseManager(vertx); Router router = Router.router(vertx); Set allowedMethods = new HashSet<>( diff --git a/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java index a1a6de9..41efc38 100644 --- a/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java +++ b/backend/src/main/java/net/miarma/contaminus/server/LogicLayerAPIVerticle.java @@ -32,7 +32,7 @@ public class LogicLayerAPIVerticle extends AbstractVerticle { configManager = ConfigManager.getInstance(); gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); - dbManager = DatabaseManager.getInstance(); + dbManager = new DatabaseManager(vertx); Router router = Router.router(vertx); Set allowedMethods = new HashSet<>( diff --git a/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java b/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java index 83abb02..bb4daed 100644 --- a/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java +++ b/backend/src/main/java/net/miarma/contaminus/server/MainVerticle.java @@ -1,25 +1,81 @@ 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.DeploymentOptions; +import io.vertx.core.Launcher; import io.vertx.core.Promise; 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 { - - @Override - public void start(Promise startPromise) { - final DeploymentOptions options = new DeploymentOptions(); - options.setThreadingModel(ThreadingModel.WORKER); - - getVertx().deployVerticle(new DataLayerAPIVerticle(), options); - //getVertx().deployVerticle(new LogicLayerAPIVerticle(), options); - //getVertx().deployVerticle(new HttpServerVerticle()); - } - - @Override - public void stop(Promise stopPromise) throws Exception { - getVertx().deploymentIDs() - .forEach(v -> getVertx().undeploy(v)); - } -} \ No newline at end of file + + @Override + public void start(Promise startPromise) { + final DeploymentOptions options = new DeploymentOptions(); + options.setThreadingModel(ThreadingModel.WORKER); + + getVertx().deployVerticle(new DataLayerAPIVerticle(), options); + getVertx().deployVerticle(new LogicLayerAPIVerticle(), options); + getVertx().deployVerticle(new HttpServerVerticle()); + } + + @Override + public void stop(Promise stopPromise) throws Exception { + getVertx().deploymentIDs() + .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); + } + } + } +} diff --git a/backend/src/main/java/net/miarma/contaminus/util/SystemUtil.java b/backend/src/main/java/net/miarma/contaminus/util/SystemUtil.java index d69d3e5..62bb496 100644 --- a/backend/src/main/java/net/miarma/contaminus/util/SystemUtil.java +++ b/backend/src/main/java/net/miarma/contaminus/util/SystemUtil.java @@ -4,38 +4,46 @@ import net.miarma.contaminus.common.ConfigManager; import net.miarma.contaminus.common.OSType; public class SystemUtil { - static ConfigManager configManager = ConfigManager.getInstance(); - static String host = configManager.getStringProperty("inet.host"); - static String origin = configManager.getStringProperty("inet.origin"); - static int dataApiPort = 8081; - static int logicApiPort = 8082; - static int webserverPort = 8080; - - 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; - } - } + private static ConfigManager configManager; + + private static String host; + private static int dataApiPort; + private static int logicApiPort; + private static int webserverPort; + 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; + } + } }