first commit
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import database.Database;
|
||||
import gpio.NanopiGpio;
|
||||
import mqtt.MqttClient;
|
||||
import org.tinylog.Logger;
|
||||
@@ -8,11 +9,13 @@ public class Main {
|
||||
private static config config;
|
||||
private static MqttClient mqttClient;
|
||||
private static NanopiGpio gpio;
|
||||
|
||||
private static Database db;
|
||||
// Application entry point
|
||||
public static void main(String[] args) {
|
||||
Logger.info("Application started");
|
||||
config = new config();
|
||||
db = new Database();
|
||||
//db.contactInputDataList.forEach(System.out::println);
|
||||
|
||||
// Initialize the GPIO pins
|
||||
gpio = new NanopiGpio();
|
||||
|
||||
19
src/database/ContactInputData.java
Normal file
19
src/database/ContactInputData.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package database;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter @Setter @ToString
|
||||
public class ContactInputData {
|
||||
private int ContactID;
|
||||
private String Description;
|
||||
private boolean EnableEmail;
|
||||
private String EmailRecipient;
|
||||
private boolean EnableMQTT;
|
||||
private boolean EnableModbus;
|
||||
private int ModbusRegister;
|
||||
private boolean EnableVX3K;
|
||||
private int VX3KFrameID;
|
||||
private int VX3KContactID;
|
||||
}
|
||||
234
src/database/Database.java
Normal file
234
src/database/Database.java
Normal file
@@ -0,0 +1,234 @@
|
||||
package database;
|
||||
|
||||
import org.tinylog.Logger;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.Statement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This class connects to SQLite database, creates tables, and manages data.
|
||||
*/
|
||||
public class Database {
|
||||
|
||||
private static final String DB_NAME = "jdbc:sqlite:database.sqlite";
|
||||
private final int maxContactInputData = 16; // Maximum number of contact input data
|
||||
public final List<ContactInputData> contactInputDataList = new ArrayList<>();
|
||||
public Database(){
|
||||
CreateContactInputDataTable();
|
||||
List<ContactInputData> loadedData = GetContactInputData();
|
||||
LoadContactInputDataList(loadedData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the ContactInputData table in the SQLite database.
|
||||
*/
|
||||
private void CreateContactInputDataTable() {
|
||||
String sql = "CREATE TABLE IF NOT EXISTS ContactInputData ("
|
||||
+ "ContactID INTEGER PRIMARY KEY AUTOINCREMENT,"
|
||||
+ "Description TEXT NOT NULL,"
|
||||
+ "EnableEmail BOOLEAN NOT NULL DEFAULT 0,"
|
||||
+ "EmailRecipient TEXT,"
|
||||
+ "EnableMQTT BOOLEAN NOT NULL DEFAULT 0,"
|
||||
+ "EnableModbus BOOLEAN NOT NULL DEFAULT 0,"
|
||||
+ "ModbusRegister INTEGER,"
|
||||
+ "EnableVX3K BOOLEAN NOT NULL DEFAULT 0,"
|
||||
+ "VX3KFrameID INTEGER,"
|
||||
+ "VX3KContactID INTEGER"
|
||||
+ ");";
|
||||
// Execute SQL to create table
|
||||
try(Connection conn = DriverManager.getConnection(DB_NAME)){
|
||||
Statement stmt = conn.createStatement();
|
||||
stmt.execute(sql);
|
||||
} catch (Exception e){
|
||||
Logger.error("Error creating ContactInputData table: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ContactInputData from the database.
|
||||
* @return List of ContactInputData objects loaded from the database.
|
||||
*/
|
||||
private List<ContactInputData> GetContactInputData() {
|
||||
List<ContactInputData> loadedData = new ArrayList<>();
|
||||
try(Connection connection = DriverManager.getConnection(DB_NAME)) {
|
||||
String sql = "SELECT * FROM ContactInputData";
|
||||
|
||||
Statement statement = connection.createStatement();
|
||||
ResultSet resultSet = statement.executeQuery(sql);
|
||||
|
||||
while (resultSet.next()) {
|
||||
ContactInputData contactInputData = new ContactInputData();
|
||||
contactInputData.setContactID(resultSet.getInt("ContactID"));
|
||||
contactInputData.setDescription(resultSet.getString("Description"));
|
||||
contactInputData.setEnableEmail(resultSet.getBoolean("EnableEmail"));
|
||||
contactInputData.setEmailRecipient(resultSet.getString("EmailRecipient"));
|
||||
contactInputData.setEnableMQTT(resultSet.getBoolean("EnableMQTT"));
|
||||
contactInputData.setEnableModbus(resultSet.getBoolean("EnableModbus"));
|
||||
contactInputData.setModbusRegister(resultSet.getInt("ModbusRegister"));
|
||||
contactInputData.setEnableVX3K(resultSet.getBoolean("EnableVX3K"));
|
||||
contactInputData.setVX3KFrameID(resultSet.getInt("VX3KFrameID"));
|
||||
contactInputData.setVX3KContactID(resultSet.getInt("VX3KContactID"));
|
||||
loadedData.add(contactInputData);
|
||||
}
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
Logger.error("Error loading Contact Input Data: {}", e.getMessage());
|
||||
}
|
||||
|
||||
return loadedData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load ContactInputData into the contactInputDataList.
|
||||
* @param loadedData List of ContactInputData objects loaded from the database.
|
||||
*/
|
||||
@SuppressWarnings("ExtractMethodRecommender")
|
||||
private void LoadContactInputDataList(List<ContactInputData> loadedData){
|
||||
contactInputDataList.clear();
|
||||
for (int i = 1; i <= maxContactInputData; i++){
|
||||
final int contactID = i;
|
||||
ContactInputData cid = loadedData.stream()
|
||||
.filter(x -> x.getContactID() == contactID)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (cid != null){
|
||||
contactInputDataList.add(cid);
|
||||
} else {
|
||||
// Create default ContactInputData if not exists
|
||||
ContactInputData newContactInputData = new ContactInputData();
|
||||
newContactInputData.setContactID(contactID);
|
||||
newContactInputData.setDescription("Contact " + contactID);
|
||||
newContactInputData.setEnableEmail(false);
|
||||
newContactInputData.setEmailRecipient("");
|
||||
newContactInputData.setEnableMQTT(false);
|
||||
newContactInputData.setEnableModbus(false);
|
||||
newContactInputData.setModbusRegister(0);
|
||||
newContactInputData.setEnableVX3K(false);
|
||||
newContactInputData.setVX3KFrameID(0);
|
||||
newContactInputData.setVX3KContactID(0);
|
||||
|
||||
contactInputDataList.add(newContactInputData);
|
||||
Create_ContactInputData(newContactInputData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new ContactInputData entry in the database.
|
||||
* @param contactInputData The ContactInputData object to be created.
|
||||
* @return true if the entry was created successfully, false otherwise.
|
||||
*/
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
private boolean Create_ContactInputData(ContactInputData contactInputData) {
|
||||
String sql = "INSERT INTO ContactInputData (Description, EnableEmail, EmailRecipient, EnableMQTT, EnableModbus, ModbusRegister, EnableVX3K, VX3KFrameID, VX3KContactID) "
|
||||
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
try (Connection conn = DriverManager.getConnection(DB_NAME)) {
|
||||
var pstmt = conn.prepareStatement(sql);
|
||||
pstmt.setString(1, contactInputData.getDescription());
|
||||
pstmt.setBoolean(2, contactInputData.isEnableEmail());
|
||||
pstmt.setString(3, contactInputData.getEmailRecipient());
|
||||
pstmt.setBoolean(4, contactInputData.isEnableMQTT());
|
||||
pstmt.setBoolean(5, contactInputData.isEnableModbus());
|
||||
pstmt.setInt(6, contactInputData.getModbusRegister());
|
||||
pstmt.setBoolean(7, contactInputData.isEnableVX3K());
|
||||
pstmt.setInt(8, contactInputData.getVX3KFrameID());
|
||||
pstmt.setInt(9, contactInputData.getVX3KContactID());
|
||||
|
||||
int rowsAffected = pstmt.executeUpdate();
|
||||
if (rowsAffected>0){
|
||||
Logger.info("Successfully created Contact Input Data {}", contactInputData);
|
||||
return true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Logger.error("Error creating Contact Input Data: {}", e.getMessage());
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the content of a specific ContactInputData entry in the database.
|
||||
* @param contactID The ID of the ContactInputData entry to be cleared.
|
||||
* @return true if the entry was cleared successfully, false otherwise.
|
||||
*/
|
||||
public boolean ClearContent_ContactInputData(int contactID){
|
||||
String sql = "UPDATE ContactInputData SET "
|
||||
+ "Description = '', "
|
||||
+ "EnableEmail = 0, "
|
||||
+ "EmailRecipient = '', "
|
||||
+ "EnableMQTT = 0, "
|
||||
+ "EnableModbus = 0, "
|
||||
+ "ModbusRegister = 0, "
|
||||
+ "EnableVX3K = 0, "
|
||||
+ "VX3KFrameID = 0, "
|
||||
+ "VX3KContactID = 0 "
|
||||
+ "WHERE ContactID = ?";
|
||||
try (Connection conn = DriverManager.getConnection(DB_NAME)) {
|
||||
var pstmt = conn.prepareStatement(sql);
|
||||
pstmt.setInt(1, contactID);
|
||||
|
||||
int rowsAffected = pstmt.executeUpdate();
|
||||
if (rowsAffected>0){
|
||||
Logger.info("Successfully cleared Contact Input Data with ID {}", contactID);
|
||||
// Reload the contactInputDataList after clearing
|
||||
LoadContactInputDataList(GetContactInputData());
|
||||
return true;
|
||||
} else {
|
||||
Logger.error("No Contact Input Data found with ID {}", contactID);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Logger.error("Error clearing Contact Input Data: {}", e.getMessage());
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
public boolean Update_ContactInputData(ContactInputData contactInputData) {
|
||||
String sql = "UPDATE ContactInputData SET "
|
||||
+ "Description = ?, "
|
||||
+ "EnableEmail = ?, "
|
||||
+ "EmailRecipient = ?, "
|
||||
+ "EnableMQTT = ?, "
|
||||
+ "EnableModbus = ?, "
|
||||
+ "ModbusRegister = ?, "
|
||||
+ "EnableVX3K = ?, "
|
||||
+ "VX3KFrameID = ?, "
|
||||
+ "VX3KContactID = ? "
|
||||
+ "WHERE ContactID = ?";
|
||||
try (Connection conn = DriverManager.getConnection(DB_NAME)) {
|
||||
var pstmt = conn.prepareStatement(sql);
|
||||
pstmt.setString(1, contactInputData.getDescription());
|
||||
pstmt.setBoolean(2, contactInputData.isEnableEmail());
|
||||
pstmt.setString(3, contactInputData.getEmailRecipient());
|
||||
pstmt.setBoolean(4, contactInputData.isEnableMQTT());
|
||||
pstmt.setBoolean(5, contactInputData.isEnableModbus());
|
||||
pstmt.setInt(6, contactInputData.getModbusRegister());
|
||||
pstmt.setBoolean(7, contactInputData.isEnableVX3K());
|
||||
pstmt.setInt(8, contactInputData.getVX3KFrameID());
|
||||
pstmt.setInt(9, contactInputData.getVX3KContactID());
|
||||
pstmt.setInt(10, contactInputData.getContactID());
|
||||
|
||||
int rowsAffected = pstmt.executeUpdate();
|
||||
if (rowsAffected>0){
|
||||
Logger.info("Successfully updated Contact Input Data {}", contactInputData);
|
||||
// Reload the contactInputDataList after updating
|
||||
LoadContactInputDataList(GetContactInputData());
|
||||
return true;
|
||||
} else {
|
||||
Logger.error("No Contact Input Data found with ID {}", contactInputData.getContactID());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Logger.error("Error updating Contact Input Data: {}", e.getMessage());
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user