/** * Get the next free id for new Gantt tasks to insert (starting with -1). Positive values are reserved for Gantt tasks related to tasks * (of ProjectForge's TaskTree) (the id is equals to the task id). * @return */ public int getNextId() { final Integer id = getNextId(this, -1); return id != null ? id : -1; }
private Integer getNextId(final GanttTask node, final int id) { Integer result = null; if (node == null) { return null; } if (node.getId() != null && ((Integer) node.getId()) <= id) { result = ((Integer) node.getId()) - 1; } final List<GanttTask> children = node.getChildren(); if (children == null) { return result; } for (final GanttTask child : children) { final Integer i = getNextId(child, id); if (i == null) { continue; } if (result != null && i <= result || result == null && i <= id) { result = i; } } return result; } }
@Test public void getNextId() { GanttTaskImpl root = new GanttTaskImpl(); root.addChild(new GanttTaskImpl(5)); assertEquals(-1, root.getNextId()); root.addChild(new GanttTaskImpl(-1)); assertEquals(-2, root.getNextId()); root.addChild(new GanttTaskImpl(-5)); assertEquals(-6, root.getNextId()); root.addChild(new GanttTaskImpl(-6)); assertEquals(-7, root.getNextId()); } }