diff --git a/src/org/kar/archidata/db/DBEntry.java b/src/org/kar/archidata/db/DBEntry.java index 1355c37..bd399dd 100644 --- a/src/org/kar/archidata/db/DBEntry.java +++ b/src/org/kar/archidata/db/DBEntry.java @@ -17,7 +17,7 @@ public class DBEntry implements Closeable { public Connection connection; private static List stored = new ArrayList<>(); - private DBEntry(DBConfig config, boolean root) throws IOException { + private DBEntry(final DBConfig config, final boolean root) throws IOException { this.config = config; if (root) { connectRoot(); @@ -26,13 +26,13 @@ public class DBEntry implements Closeable { } } - public static DBEntry createInterface(DBConfig config) throws IOException { + public static DBEntry createInterface(final DBConfig config) throws IOException { return createInterface(config, false); } - public static DBEntry createInterface(DBConfig config, boolean root) throws IOException { + public static DBEntry createInterface(final DBConfig config, final boolean root) throws IOException { if (config.getKeepConnected()) { - for (DBEntry elem : stored) { + for (final DBEntry elem : stored) { if (elem == null) { continue; } @@ -40,7 +40,7 @@ public class DBEntry implements Closeable { return elem; } } - DBEntry tmp = new DBEntry(config, root); + final DBEntry tmp = new DBEntry(config, root); stored.add(tmp); return tmp; } else { @@ -50,8 +50,8 @@ public class DBEntry implements Closeable { public void connectRoot() throws IOException { try { - connection = DriverManager.getConnection(config.getUrl(true), config.getLogin(), config.getPassword()); - } catch (SQLException ex) { + this.connection = DriverManager.getConnection(this.config.getUrl(true), this.config.getLogin(), this.config.getPassword()); + } catch (final SQLException ex) { throw new IOException("Connection db fail: " + ex.getMessage()); } @@ -59,8 +59,8 @@ public class DBEntry implements Closeable { public void connect() throws IOException { try { - connection = DriverManager.getConnection(config.getUrl(), config.getLogin(), config.getPassword()); - } catch (SQLException ex) { + this.connection = DriverManager.getConnection(this.config.getUrl(), this.config.getLogin(), this.config.getPassword()); + } catch (final SQLException ex) { throw new IOException("Connection db fail: " + ex.getMessage()); } @@ -68,15 +68,24 @@ public class DBEntry implements Closeable { @Override public void close() throws IOException { - if (config.getKeepConnected()) { + if (this.config.getKeepConnected()) { return; } + closeForce(); + } + + public void closeForce() throws IOException { try { //connection.commit(); - connection.close(); - } catch (SQLException ex) { + this.connection.close(); + } catch (final SQLException ex) { throw new IOException("Dis-connection db fail: " + ex.getMessage()); } - + } + + public static void closeAllForceMode() throws IOException { + for (final DBEntry entry : stored) { + entry.closeForce(); + } } } diff --git a/src/org/kar/archidata/model/GenericTable.java b/src/org/kar/archidata/model/GenericTable.java index 226363f..380c210 100644 --- a/src/org/kar/archidata/model/GenericTable.java +++ b/src/org/kar/archidata/model/GenericTable.java @@ -14,7 +14,6 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -//@SQLWhere(clause = "deleted=false") public class GenericTable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/org/kar/archidata/model/GenericTableHardDelete.java b/src/org/kar/archidata/model/GenericTableHardDelete.java new file mode 100644 index 0000000..d7f9b9a --- /dev/null +++ b/src/org/kar/archidata/model/GenericTableHardDelete.java @@ -0,0 +1,31 @@ +package org.kar.archidata.model; + +import java.sql.Timestamp; + +import org.kar.archidata.annotation.CreationTimestamp; +import org.kar.archidata.annotation.SQLComment; +import org.kar.archidata.annotation.SQLNotRead; +import org.kar.archidata.annotation.UpdateTimestamp; + +import jakarta.persistence.Column; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +public class GenericTableHardDelete { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(nullable = false, unique = true) + @SQLComment("Primary key of the base") + public Long id = null; + @SQLNotRead + @CreationTimestamp + @Column(nullable = false) + @SQLComment("Create time of the object") + public Timestamp createdAt = null; + @SQLNotRead + @UpdateTimestamp + @Column(nullable = false) + @SQLComment("When update the object") + public Timestamp updatedAt = null; +} diff --git a/src/org/kar/archidata/util/ConfigBaseVariable.java b/src/org/kar/archidata/util/ConfigBaseVariable.java index e3f1275..2f83a65 100644 --- a/src/org/kar/archidata/util/ConfigBaseVariable.java +++ b/src/org/kar/archidata/util/ConfigBaseVariable.java @@ -1,19 +1,39 @@ package org.kar.archidata.util; public class ConfigBaseVariable { - static public String tmpDataFolder = System.getenv("DATA_TMP_FOLDER"); - static public String dataFolder = System.getenv("DATA_FOLDER"); - static public String dbType = System.getenv("DB_TYPE"); - static public String dbHost = System.getenv("DB_HOST"); - static public String dbPort = System.getenv("DB_PORT"); - static public String dbUser = System.getenv("DB_USER"); - static public String dbKeepConnected = System.getenv("DB_KEEP_CONNECTED"); - static public String dbPassword = System.getenv("DB_PASSWORD"); - static public String bdDatabase = System.getenv("DB_DATABASE"); - static public String apiAdress = System.getenv("API_ADDRESS"); - static public String ssoAdress = System.getenv("SSO_ADDRESS"); - static public String ssoToken = System.getenv("SSO_TOKEN"); + static public String tmpDataFolder; + static public String dataFolder; + static public String dbType; + static public String dbHost; + static public String dbPort; + static public String dbUser; + static public String dbKeepConnected; + static public String dbPassword; + static public String bdDatabase; + static public String apiAdress; + static public String ssoAdress; + static public String ssoToken; + // For test only + public static void clearAllValue() { + tmpDataFolder = System.getenv("DATA_TMP_FOLDER"); + dataFolder = System.getenv("DATA_FOLDER"); + dbType = System.getenv("DB_TYPE"); + dbHost = System.getenv("DB_HOST"); + dbPort = System.getenv("DB_PORT"); + dbUser = System.getenv("DB_USER"); + dbKeepConnected = System.getenv("DB_KEEP_CONNECTED"); + dbPassword = System.getenv("DB_PASSWORD"); + bdDatabase = System.getenv("DB_DATABASE"); + apiAdress = System.getenv("API_ADDRESS"); + ssoAdress = System.getenv("SSO_ADDRESS"); + ssoToken = System.getenv("SSO_TOKEN"); + } + + static { + clearAllValue(); + } + public static String getTmpDataFolder() { if (tmpDataFolder == null) { return "/application/data/tmp"; diff --git a/test/src/test/kar/archidata/TestBase.java b/test/src/test/kar/archidata/TestBase.java index 0e03170..7c704ad 100644 --- a/test/src/test/kar/archidata/TestBase.java +++ b/test/src/test/kar/archidata/TestBase.java @@ -1,5 +1,7 @@ package test.kar.archidata; +import java.io.IOException; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -7,35 +9,40 @@ import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; -import org.kar.archidata.sqlWrapper.SqlWrapper; -import org.kar.archidata.util.RESTApi; +import org.kar.archidata.db.DBEntry; +import org.kar.archidata.util.ConfigBaseVariable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class TestBase { - final static Logger logger = LoggerFactory.getLogger(TestBase.class); - - static RESTApi api = null; - + final static private Logger LOGGER = LoggerFactory.getLogger(TestBase.class); + @BeforeAll public static void configureWebServer() throws Exception { - logger.info("Create DB"); + /*LOGGER.info("Create DB"); final String dbName = "sdfsdfsdfsfsdfsfsfsfsdfsdfsd"; boolean data = SqlWrapper.isDBExist(dbName); - logger.error("exist: {}", data); + LOGGER.error("exist: {}", data); data = SqlWrapper.createDB(dbName); - logger.error("create: {}", data); + LOGGER.error("create: {}", data); data = SqlWrapper.isDBExist(dbName); - logger.error("exist: {}", data); - } - - @AfterAll - public static void stopWebServer() throws InterruptedException { - logger.info("Kill the web server"); - // TODO: do it better... + LOGGER.error("exist: {}", data); + */ + ConfigBaseVariable.dbType = "sqlite"; + ConfigBaseVariable.dbHost = "memory"; + // for test we need to connect all time the DB + ConfigBaseVariable.dbKeepConnected = "true"; + } + @AfterAll + public static void removeDataBase() throws IOException { + LOGGER.info("Remove the test db"); + DBEntry.closeAllForceMode(); + ConfigBaseVariable.clearAllValue(); + } + @Order(1) @Test public void checkSimpleTestError() throws Exception {