Package org.projectforge.gantt

Source Code of org.projectforge.gantt.GanttChartData

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.gantt;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;

import org.projectforge.task.TaskDO;

public class GanttChartData implements Serializable
{
  private static final long serialVersionUID = 726187772438594384L;

  private GanttTask rootObject;

  private Collection<GanttTask> externalObjects;

  public void setRootObject(GanttTask rootObject)
  {
    this.rootObject = rootObject;
  }

  public GanttTask getRootObject()
  {
    return rootObject;
  }
 
  public GanttTask findById(final Serializable id) {
    if (rootObject == null) {
      return null;
    }
    return rootObject.findById(id);
  }

  /**
   * 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;
  }

  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 convertToGanttObject(final TaskDO task)
  {
    final GanttTask ganttObject = Task2GanttTaskConverter.convertToGanttObject(task);
    final TaskDO predecessorTask = task.getGanttPredecessor();
    if (predecessorTask != null) {
      ganttObject.setPredecessor(convertToGanttObject(predecessorTask));
    }
    return ganttObject;
  }

  public GanttTask getExternalObject(final Serializable id)
  {
    if (id == null || externalObjects == null) {
      return null;
    }
    for (final GanttTask task : externalObjects) {
      if (id.equals(task.getId()) == true) {
        return task;
      }
    }
    return null;
  }

  /**
   * For test cases.
   */
  Collection<GanttTask> getExternalObjects()
  {
    return externalObjects;
  }
}
TOP

Related Classes of org.projectforge.gantt.GanttChartData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.