diff --git a/core/src/main/java/de/srsoftware/umbrella/core/Constants.java b/core/src/main/java/de/srsoftware/umbrella/core/Constants.java index b94d08c..97712b3 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/Constants.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/Constants.java @@ -158,6 +158,7 @@ public class Constants { public static final String TABLE_SETTINGS = "settings"; public static final String TAGS = "tags"; + public static final String TAG_COLORS = "tag_colors"; public static final String TASK_IDS = "task_ids"; public static final String TAX = "tax"; public static final String TEMPLATE = "template"; diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java index 7b11340..21845f0 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java @@ -22,6 +22,7 @@ public class Project implements Mappable { private final long id; private String description; private final Set dirtyFields = new HashSet<>(); + private final Map tagColors = new HashMap<>(); public Project(long id, String name, String description, int status, Long companyId, boolean showClosed, Map members, Collection allowedStates) { this.id = id; @@ -113,6 +114,10 @@ public class Project implements Mappable { return status; } + public Map tagColors() { + return tagColors; + } + @Override public Map toMap() { var map = new HashMap(); @@ -130,6 +135,7 @@ public class Project implements Mappable { var stateMap = new HashMap(); for (var state : allowedStates) stateMap.put(state.code(),state.name()); map.put(ALLOWED_STATES,stateMap); + map.put(TAG_COLORS,tagColors); return map; } } diff --git a/project/src/main/java/de/srsoftware/umbrella/project/SqliteDb.java b/project/src/main/java/de/srsoftware/umbrella/project/SqliteDb.java index ae4191e..2bc499b 100644 --- a/project/src/main/java/de/srsoftware/umbrella/project/SqliteDb.java +++ b/project/src/main/java/de/srsoftware/umbrella/project/SqliteDb.java @@ -16,6 +16,8 @@ import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.model.Permission; import de.srsoftware.umbrella.core.model.Project; import de.srsoftware.umbrella.core.model.Status; +import org.json.JSONObject; + import java.sql.Connection; import java.sql.SQLException; import java.util.Collection; @@ -132,20 +134,33 @@ CREATE TABLE IF NOT EXISTS {0} ( public Project load(long projectId) throws UmbrellaException { try { var rs = select(ALL).from(TABLE_PROJECTS).where(ID, equal(projectId)).exec(db); - Project result = null; - if (rs.next()) result = Project.of(rs); + Project project = null; + if (rs.next()) project = Project.of(rs); rs.close(); - if (result == null) throw UmbrellaException.notFound("No project found for id {0}",projectId); + + if (project == null) throw UmbrellaException.notFound("No project found for id {0}",projectId); + rs = select(ALL).from(TABLE_CUSTOM_STATES).where(PROJECT_ID,equal(projectId)).exec(db); - var states = result.allowedStates(); + var states = project.allowedStates(); while (rs.next()) states.add(Status.of(rs)); rs.close(); - return result; + + rs = select(VALUE).from(TABLE_SETTINGS).where(KEY,equal(colorKey(projectId))).exec(db); + if (rs.next()) { + var map = project.tagColors(); + new JSONObject(rs.getString(VALUE)).toMap().forEach((k, v) -> map.put(k, v.toString())); + } + rs.close(); + return project; } catch (SQLException e) { throw new UmbrellaException("Failed to load project from database"); } } + private String colorKey(long projectId) { + return "tag_colors:"+projectId; + } + @Override public Map ofCompany(long companyId, boolean includeClosed) throws UmbrellaException { try {