private GanttTask getGanttObject(final TaskTree taskTree, final GanttChartData ganttChartData, final Element el) { final String idString = el.attributeValue("id"); final Integer id = NumberHelper.parseInteger(idString); GanttTask ganttObject = ganttChartData.findById(id); if (ganttObject == null) { ganttObject = ganttChartData.ensureAndGetExternalGanttObject(taskTree.getTaskById(id)); } return ganttObject; }
@Override protected TreeTable<GanttTreeTableNode> buildTreeTable() { if (ganttChartData == null) { return null; } final GanttTreeTable ganttTreeTable = new GanttTreeTable(ganttChartData.getRootObject()); return ganttTreeTable; }
/** * The returned object represents a task of the ProjectForge's task tree which should be outside from the Gantt object tree. External * tasks are stored as external tasks. The GanttTask has no predecessor. The start date and end date will be set to the given or if not * given to the calculated values.<br/> * Default is false. <br/> */ public GanttTask ensureAndGetExternalGanttObject(final TaskDO task) { if (task == null || task.getId() == null) { return null; } if (externalObjects == null) { externalObjects = new ArrayList<GanttTask>(); } GanttTask ganttTask = getExternalObject(task.getId()); if (ganttTask == null) { ganttTask = getExternalGanttObject(task); externalObjects.add(ganttTask); } return ganttTask; }
/** * Maximum depth of predecessors for avoiding circular predecessor settings.. */ public static final GanttChartData convertToGanttObjectTree(final TaskTree taskTree, final TaskDO rootTask) { final GanttChartData ganttChartData = new GanttChartData(); convertToGanttObject(ganttChartData, taskTree, rootTask); processPredecessor(ganttChartData, taskTree, ganttChartData.getRootObject()); return ganttChartData; }
assertEquals("Two external objects (2.1 and 2.2) exptected.", 2, ganttChartData.getExternalObjects().size()); assertExternalTasks(ganttChartData, prefix); final GanttChartDO ganttChartDO = new GanttChartDO().setTask(getTask(prefix + "1")); ganttChartDao.writeGanttObjects(ganttChartDO, ganttChartData.getRootObject()); assertEquals("No output because there is no further information in the GanttObject tree.", "", ganttChartDO.getGanttObjectsAsXml()); GanttChartData data = ganttChartDao.readGanttObjects(ganttChartDO); assertExternalTasks(data, prefix); final GanttTask external2_1 = ganttChartData.getExternalObject(getTask(prefix + "2.1").getId()); .setPredecessor(ganttChartData.ensureAndGetExternalGanttObject(getTask(prefix + "2.3"))); findById(ganttChartData, prefix, "1.1.1").setPredecessor(null); findById(ganttChartData, prefix, "1.2.1").setPredecessor(external2_1); findById(ganttChartData, prefix, "1.1.2").setPredecessor(findById(ganttChartData, prefix, "1.2.2")); findById(ganttChartData, prefix, "1.2.2").setPredecessor(null); ganttChartDao.writeGanttObjects(ganttChartDO, ganttChartData.getRootObject()); final String xml = transform(prefix, "<ganttObject id='{1}'>" // + "<children>" assertEquals("Gantt objects as xml.", xml, ganttChartDO.getGanttObjectsAsXml()); data = ganttChartDao.readGanttObjects(ganttChartDO); ganttChartDao.writeGanttObjects(ganttChartDO, data.getRootObject()); assertEquals("Gantt objects as xml.", xml, ganttChartDO.getGanttObjectsAsXml()); assertNull("Predecessor was set to null.", findById(data, prefix, "1.2.2").getPredecessor());
return; if (ganttTask.equals(ganttChartData.getRootObject()) == false) { final TaskDO task = taskTree.getTaskById((Integer) ganttTask.getId()); final Integer predecessorId = task.getGanttPredecessorId(); if (predecessorId != null) { GanttTask predecessor = ganttChartData.getRootObject().findById(predecessorId); if (predecessor == null) { predecessor = ganttChartData.ensureAndGetExternalGanttObject(predecessortTask); } else { log.warn("Oups, task with id '" + predecessorId + "' not found.");
private static final GanttTask convertToGanttObject(final GanttChartData ganttChartData, final TaskTree taskTree, final TaskDO task) { if (task == null) { log.warn("Oups, task shouldn't be null."); return null; } final GanttTask ganttObject = convertToGanttObject(task); if (ganttChartData.getRootObject() == null) { ganttChartData.setRootObject(ganttObject); } final TaskNode taskNode = taskTree.getTaskNodeById(task.getId()); if (taskNode.hasChilds() == true) { for (final TaskNode childNode : taskNode.getChilds()) { if (childNode.isDeleted() == false) { ganttObject.addChild(convertToGanttObject(ganttChartData, taskTree, childNode.getTask())); } } } return ganttObject; }
log.error("Task not found: + " + property); } else { predecessor = ganttChartData.ensureAndGetExternalGanttObject(task); obj.setPredecessor(predecessor);
@Override protected boolean addCollectionEntry(final Collection<?> col, final Object obj, final Element el) { if (obj instanceof GanttTask == false) { return false; } final GanttTask ganttTask = (GanttTask) obj; if (ganttChartData.findById(ganttTask.getId()) != null) { // GanttTask already added to the Gantt object tree. return true; } if (taskTree.getTaskById((Integer) ganttTask.getId()) != null) { // External task, so ignore it: return true; } return false; }
private void assertExternalTasks(final GanttChartData ganttChartData, final String prefix) { GanttTask externalGanttTask = ganttChartData.getExternalObject(getTaskId(prefix + "2.1")); assertNull("Predecessor should be null.", externalGanttTask.getPredecessor()); assertDate("Start date unmodified.", 2010, Calendar.AUGUST, 16, externalGanttTask.getStartDate()); assertDate("End date should have been calculated and set.", 2010, Calendar.AUGUST, 30, externalGanttTask.getEndDate()); externalGanttTask = ganttChartData.getExternalObject(getTaskId(prefix + "2.2")); assertNull("Predecessor should be null.", externalGanttTask.getPredecessor()); assertDate("Start date should have been calculated and set.", 2010, Calendar.AUGUST, 30, externalGanttTask.getStartDate()); assertDate("End date should have been calculated and set.", 2010, Calendar.SEPTEMBER, 13, externalGanttTask.getEndDate()); }
private GanttTask convertToGanttObject(final TaskDO task) { final GanttTask ganttObject = Task2GanttTaskConverter.convertToGanttObject(task); final TaskDO predecessorTask = task.getGanttPredecessor(); if (predecessorTask != null) { ganttObject.setPredecessor(convertToGanttObject(predecessorTask)); } return ganttObject; }
private GanttTask findById(final GanttChartData ganttChartData, final String prefix, final String id) { return ganttChartData.findById(getTask(prefix + id).getId()); }
private GanttTask getExternalGanttObject(final TaskDO task) { final GanttTask ganttObject = convertToGanttObject(task); if (ganttObject.getStartDate() == null) { ganttObject.setStartDate(GanttUtils.getCalculatedStartDate(ganttObject)); } if (ganttObject.getEndDate() == null) { ganttObject.setEndDate(GanttUtils.getCalculatedEndDate(ganttObject)); } // Remove any existing predecessor chain: ganttObject.setPredecessor(null); return ganttObject; }
private GanttTask findById(final Serializable id) { if (id == null || ganttChartData == null) { return null; } final GanttTask root = ganttChartData.getRootObject(); if (root == null) { return null; } return root.findById(id); }
private GanttTask getIndexedGanttObject(final String property) { final Integer id = NumberHelper.parseInteger(property.substring(property.indexOf(':') + 1)); final GanttTask obj = ganttChartData.getRootObject().findById(id); if (obj == null) { log.error("Oups, can't find Gantt object with hash id: " + id); } return obj; }
private GanttChart createGanttChart() { if (ganttChartData == null) { return null; } ganttChartData.getRootObject().sortChildren(); final GanttChart ganttChart = new GanttChart(ganttChartData.getRootObject(), getGanttChartStyle(), getSettings(), getData().getName()); // chart.getRootObject().recalculate(); return ganttChart; }
@Override public AbstractSecuredBasePage onSaveOrUpdate() { getSettings().setOpenNodes(form.ganttChartEditTreeTablePanel.getOpenNodes()); getBaseDao().writeGanttObjects(getData(), ganttChartData.getRootObject()); return null; }
@Override public void select(final String property, final Object selectedValue) { if ("taskId".equals(property) == true) { final Integer id; if (selectedValue instanceof String) { id = NumberHelper.parseInteger((String) selectedValue); } else { id = (Integer) selectedValue; } if (ganttChartData == null || ObjectUtils.equals(id, ganttChartData.getRootObject().getId()) == false) { ganttChartData = null; // Force refresh. form.ganttChartEditTreeTablePanel.refreshTreeTable(); } getBaseDao().setTask(getData(), id); refresh(); } else if ("ownerId".equals(property) == true) { final Integer id; if (selectedValue instanceof String) { id = NumberHelper.parseInteger((String) selectedValue); } else { id = (Integer) selectedValue; } getBaseDao().setOwner(getData(), id); } else { log.error("Property '" + property + "' not supported for selection."); } }
protected void refresh() { if (ganttChartData == null && getData().getTaskId() != null) { ganttChartData = getBaseDao().readGanttObjects(getData()); final GanttTask rootObject = ganttChartData.getRootObject(); if (rootObject != null && CollectionUtils.isNotEmpty(rootObject.getChildren()) == true && isNew() == true) { // For new charts set all children on level one as visible. for (final GanttTask child : rootObject.getChildren()) { child.setVisible(true); } } } form.ganttChartEditTreeTablePanel.setGanttChartData(ganttChartData).refresh(); redraw(); }
final GanttTask rootObject = data.getRootObject(); final GanttChartDO ganttChartDO = new GanttChartDO().setTask(rootTask); findById(rootObject, id1).setDuration(new BigDecimal("10.000")).setProgress(10); // Modified. + "</ganttObject>"); assertEquals("check xml output.", xml, ganttChartDO.getGanttObjectsAsXml()); GanttTask ganttObject = ganttChartDao.readGanttObjects(ganttChartDO).getRootObject(); assertDurationAndProgress(ganttObject, id1, BigDecimal.TEN, 10); assertDurationAndProgress(ganttObject, id2, null, null);