first commit

This commit is contained in:
2025-06-16 08:47:38 +07:00
parent 9fd167c0f8
commit 501bca8487
9 changed files with 290 additions and 1 deletions

View File

@@ -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();

View 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
View 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;
}
}