implemented selector for parent task
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
package de.srsoftware.umbrella.task;
|
||||
|
||||
|
||||
import static de.srsoftware.tools.Optionals.is0;
|
||||
import static de.srsoftware.tools.jdbc.Condition.*;
|
||||
import static de.srsoftware.tools.jdbc.Query.*;
|
||||
import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL;
|
||||
@@ -236,7 +237,7 @@ CREATE TABLE IF NOT EXISTS {0} (
|
||||
public Map<Long, Task> listProjectTasks(Long projectId, Long parentTaskId, boolean noIndex) throws UmbrellaException {
|
||||
try {
|
||||
var query = select(ALL).from(TABLE_TASKS).where(PROJECT_ID,equal(projectId));
|
||||
if (parentTaskId != 0) query.where(PARENT_TASK_ID,equal(parentTaskId));
|
||||
if (!is0(parentTaskId)) query.where(PARENT_TASK_ID,equal(parentTaskId));
|
||||
if (!noIndex) query.where(NO_INDEX,notIn(1));
|
||||
var tasks = new HashMap<Long,Task>();
|
||||
var rs = query.exec(db);
|
||||
|
||||
@@ -32,6 +32,7 @@ import de.srsoftware.tools.SessionToken;
|
||||
import de.srsoftware.umbrella.core.BaseHandler;
|
||||
import de.srsoftware.umbrella.core.ModuleRegistry;
|
||||
import de.srsoftware.umbrella.core.api.*;
|
||||
import de.srsoftware.umbrella.core.constants.Field;
|
||||
import de.srsoftware.umbrella.core.constants.Text;
|
||||
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
|
||||
import de.srsoftware.umbrella.core.model.*;
|
||||
@@ -110,8 +111,11 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
case null -> getUserTasks(user.get(), ex);
|
||||
default -> {
|
||||
var taskId = Long.parseLong(head);
|
||||
head = path.pop();
|
||||
yield head == null ? getTask(ex, taskId, user.get()) : super.doGet(path, ex);
|
||||
yield switch (path.pop()){
|
||||
case null -> getTask(ex,taskId,user.get());
|
||||
case PARENT_CANDIDATES -> getParentCandidates(ex,taskId, user.get());
|
||||
default -> super.doGet(path,ex);
|
||||
};
|
||||
}
|
||||
};
|
||||
} catch (UmbrellaException e) {
|
||||
@@ -188,6 +192,33 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
return sendContent(ex, result);
|
||||
}
|
||||
|
||||
private boolean getParentCandidates(HttpExchange ex, long taskId, UmbrellaUser user) throws IOException {
|
||||
var task = taskDb.load(taskId);
|
||||
var project = projectService().load(task.projectId());
|
||||
var projectTasks = taskDb.listProjectTasks(project.id(),null, false);
|
||||
var mapped = projectTasks.values().stream().collect(Collectors.toMap(Task::id,Task::toMap));
|
||||
var roots = new HashMap<Long,Map<String,Object>>();
|
||||
for (var map : mapped.values()){
|
||||
if (!(map.get(ID) instanceof Long id)) continue;
|
||||
if (id == taskId) continue;
|
||||
if (map.get(PARENT_TASK_ID) instanceof Long parentId) {
|
||||
var parent = mapped.get(parentId);
|
||||
if (parent != null) {
|
||||
var o = parent.get(Field.CHILDREN);
|
||||
Map<Long,Object> children;
|
||||
if (o == null) {
|
||||
children = new HashMap<>();
|
||||
parent.put(Field.CHILDREN,children);
|
||||
} else children = (Map<Long, Object>) o;
|
||||
children.put(id, map);
|
||||
}
|
||||
} else {
|
||||
roots.put(id, map);
|
||||
}
|
||||
}
|
||||
return sendContent(ex,roots);
|
||||
}
|
||||
|
||||
private boolean getPermissionList(HttpExchange ex) throws IOException {
|
||||
var map = new HashMap<Integer, String>();
|
||||
for (var permission : Permission.values()) map.put(permission.code(),permission.name());
|
||||
@@ -293,7 +324,7 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
Task parent = taskMap.get(task.parentTaskId());
|
||||
var trunk = placeInTree(parent, taskTree, taskMap);
|
||||
@SuppressWarnings("unchecked")
|
||||
ArrayList<Object> children = (ArrayList<Object>) trunk.computeIfAbsent(CHILDREN, k -> new ArrayList<>());
|
||||
ArrayList<Object> children = (ArrayList<Object>) trunk.computeIfAbsent(Field.CHILDREN, k -> new ArrayList<>());
|
||||
children.add(mappedTask);
|
||||
return mappedTask;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user