|
|
|
|
@ -8,14 +8,18 @@ import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL;
@@ -8,14 +8,18 @@ import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL;
|
|
|
|
|
import static de.srsoftware.umbrella.core.Constants.*; |
|
|
|
|
import static de.srsoftware.umbrella.core.ResponseCode.HTTP_NOT_IMPLEMENTED; |
|
|
|
|
import static de.srsoftware.umbrella.core.ResponseCode.HTTP_SERVER_ERROR; |
|
|
|
|
import static de.srsoftware.umbrella.core.model.Status.OPEN; |
|
|
|
|
import static de.srsoftware.umbrella.project.Constants.*; |
|
|
|
|
import static de.srsoftware.umbrella.task.Constants.*; |
|
|
|
|
import static java.lang.System.Logger.Level.WARNING; |
|
|
|
|
import static java.lang.System.Logger.Level.*; |
|
|
|
|
import static java.lang.System.Logger.Level.ERROR; |
|
|
|
|
import static java.text.MessageFormat.format; |
|
|
|
|
|
|
|
|
|
import de.srsoftware.tools.jdbc.Query; |
|
|
|
|
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; |
|
|
|
|
import de.srsoftware.umbrella.core.model.*; |
|
|
|
|
import java.sql.Connection; |
|
|
|
|
import java.sql.ResultSet; |
|
|
|
|
import java.sql.SQLException; |
|
|
|
|
import java.util.Collection; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
@ -25,9 +29,87 @@ import java.util.Map;
@@ -25,9 +29,87 @@ import java.util.Map;
|
|
|
|
|
public class SqliteDb implements TaskDb { |
|
|
|
|
private static final System.Logger LOG = System.getLogger("TaskDb"); |
|
|
|
|
private final Connection db; |
|
|
|
|
private static final int INITIAL_DB_VERSION = 1; |
|
|
|
|
|
|
|
|
|
public SqliteDb(Connection connection) { |
|
|
|
|
db = connection; |
|
|
|
|
init(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private int createSettingsTable() { |
|
|
|
|
var createTable = """ |
|
|
|
|
CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255) NOT NULL); |
|
|
|
|
"""; |
|
|
|
|
try { |
|
|
|
|
var stmt = db.prepareStatement(format(createTable,TABLE_SETTINGS, KEY, VALUE)); |
|
|
|
|
stmt.execute(); |
|
|
|
|
stmt.close(); |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
LOG.log(ERROR,ERROR_FAILED_CREATE_TABLE,TABLE_SETTINGS,e); |
|
|
|
|
throw new RuntimeException(e); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Integer version = null; |
|
|
|
|
try { |
|
|
|
|
var rs = Query.select(VALUE).from(TABLE_SETTINGS).where(KEY, equal(DB_VERSION)).exec(db); |
|
|
|
|
if (rs.next()) version = rs.getInt(VALUE); |
|
|
|
|
rs.close(); |
|
|
|
|
if (version == null) { |
|
|
|
|
version = INITIAL_DB_VERSION; |
|
|
|
|
insertInto(TABLE_SETTINGS, KEY, VALUE).values(DB_VERSION,version).execute(db).close(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return version; |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
LOG.log(ERROR,ERROR_READ_TABLE,DB_VERSION,TABLE_SETTINGS,e); |
|
|
|
|
throw new RuntimeException(e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private int createTables() { |
|
|
|
|
createTaskTables(); |
|
|
|
|
return createSettingsTable(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void createTaskTables() { |
|
|
|
|
var createTable = """ |
|
|
|
|
CREATE TABLE IF NOT EXISTS "{0}" ( |
|
|
|
|
{1} INTEGER PRIMARY KEY, |
|
|
|
|
{2} INTEGER NOT NULL, |
|
|
|
|
{3} INTEGER DEFAULT NULL, |
|
|
|
|
{4} VARCHAR(255) NOT NULL, |
|
|
|
|
{5} TEXT, |
|
|
|
|
{6} INT DEFAULT {7}, |
|
|
|
|
{8} DOUBLE DEFAULT NULL, |
|
|
|
|
{9} DATE, |
|
|
|
|
{10} DATE, |
|
|
|
|
{11} BOOLEAN DEFAULT FALSE, |
|
|
|
|
{12} BOOLEAN DEFAULT FALSE |
|
|
|
|
)"""; |
|
|
|
|
try { |
|
|
|
|
var stmt = db.prepareStatement(format(createTable,TABLE_TASKS, ID, PROJECT_ID, PARENT_TASK_ID, NAME, DESCRIPTION,STATUS, OPEN.code(), EST_TIME, START_DATE,DUE_DATE,SHOW_CLOSED,NO_INDEX)); |
|
|
|
|
stmt.execute(); |
|
|
|
|
stmt.close(); |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
LOG.log(ERROR,ERROR_FAILED_CREATE_TABLE,TABLE_PROJECTS ,e); |
|
|
|
|
throw new RuntimeException(e); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
createTable = """ |
|
|
|
|
CREATE TABLE IF NOT EXISTS {0} ( |
|
|
|
|
{1} INT NOT NULL, |
|
|
|
|
{2} INT NOT NULL, |
|
|
|
|
{3} INT DEFAULT {3}, |
|
|
|
|
PRIMARY KEY ({1}, {2}) |
|
|
|
|
)"""; |
|
|
|
|
try { |
|
|
|
|
var stmt = db.prepareStatement(format(createTable,TABLE_TASKS_USERS, TASK_ID, USER_ID, PERMISSIONS)); |
|
|
|
|
stmt.execute(); |
|
|
|
|
stmt.close(); |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
LOG.log(ERROR,ERROR_FAILED_CREATE_TABLE,TABLE_PROJECT_USERS,e); |
|
|
|
|
throw new RuntimeException(e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
@ -43,6 +125,13 @@ public class SqliteDb implements TaskDb {
@@ -43,6 +125,13 @@ public class SqliteDb implements TaskDb {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void init(){ |
|
|
|
|
var version = createTables(); |
|
|
|
|
LOG.log(INFO,"Updated task db to version {0}",version); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public HashMap<Long, Task> listTasks(Collection<Long> projectIds) throws UmbrellaException { |
|
|
|
|
try { |
|
|
|
|
var tasks = new HashMap<Long,Task>(); |
|
|
|
|
|