//tasks
Collection tasks=projectData.getTasks();
Map taskNodeMap=new HashMap();
long projectId = project.getUniqueId();
NormalTask task;
if (tasks!=null){
//order by position parents don't matter
Collections.sort((List<TaskData>)tasks,new Comparator<TaskData>(){
public int compare(TaskData task1, TaskData task2) {
if (!task1.isExternal() && task2.isExternal()) return -1; //keep external tasks at the end
else if (task1.isExternal() && !task2.isExternal()) return 1;
else if (task1.getChildPosition()>task2.getChildPosition()) return 1;
else return -1;
}
});
//Set<Long> initialTaskIds=new HashSet<Long>();
//project.setInitialTaskIds(initialTaskIds);
for (Iterator i=tasks.iterator();i.hasNext();){
task = null;
TaskData taskData=(TaskData)i.next();
// initialTaskIds.add(taskData.getUniqueId());
if (taskData.isDirty()) fixCorruption=true; //recovers errors
// if (Environment.isAddSummaryTask()&&taskData.getUniqueId()==Task.SUMMARY_UNIQUE_ID&&taskData.getSerialized()==null){ //claur
// System.out.println("Fixing null binary summary task");
// task = new NormalTask(project);
// task.setName(taskData.getName());
// task.setUniqueId(taskData.getUniqueId());
// }else
if (taskData.getSerialized()==null) {
if (taskData.isTimesheetCreated()) {
task = new NormalTask(project);
task.setName(taskData.getName());
System.out.println("made new task in serializer " + task + " parent " + taskData.getParentTask().getName());
} else {
continue; // void node
}
} else {
try {
task = (NormalTask)deserialize(taskData,reindex);
} catch (Exception e) {
if (taskData.isSubproject()){ //For migration
try {
task = (NormalTask) Class.forName(Messages.getMetaString("Subproject")).getConstructor(new Class[]{Project.class,Long.class}).newInstance(project,taskData.getSubprojectId());
} catch (Exception e1) {
e1.printStackTrace();
}
// task=new Subproject(project,taskData.getSubprojectId());
task.setUniqueId(taskData.getUniqueId());
task.setName(taskData.getName());
((SubProj)task).setSubprojectFieldValues(taskData.getSubprojectFieldValues());
}
else{
e.printStackTrace();
throw new IOException("Subproject:"+e);
}
}
}
taskNodeMap.put(taskData,NodeFactory.getInstance().createNode(task));
task.setProject(project);
project.initializeId(task);
project.add(task);
if (taskData.isExternal()) {
task.setExternal(true);
task.setProjectId(taskData.getProjectId());
task.setAllSchedulesToCurrentDates();
project.addExternalTask(task);
} else {
task.setOwningProject(project);
task.setProjectId(projectId);
}
if (taskData.isSubproject()) {
SubProj sub = (SubProj)task;
sub.setSubprojectUniqueId(taskData.getSubprojectId());
sub.setSubprojectFieldValues(taskData.getSubprojectFieldValues());
sub.setSchedulesFromSubprojectFieldValues();
}
// if (task.isRoot()){ //claur
// project.setSummaryTaskEnabled(true);
// }
WorkingCalendar cal=(WorkingCalendar) task.getWorkCalendar();
if (cal!=null){ // use global one
WorkingCalendar newCal = (WorkingCalendar) CalendarService.findBaseCalendar(cal.getName());
if (newCal != null && newCal != cal)
task.setWorkCalendar(newCal);
}
//project.addToDefaultOutline(null,);
//assignments
List assignments=new ArrayList();
// if (Environment.isNoPodServer()&&task.getPersistedAssignments()!=null){ //claur
// assignments.addAll(task.getPersistedAssignments());
// }
if (taskData.getAssignments()!=null) assignments.addAll(taskData.getAssignments());
if (assignments.size()>0)
for (Iterator j=assignments.iterator();j.hasNext();){
Object obj=j.next();
AssignmentData assignmentData=null;
// if (loadResources!=null&&obj instanceof PersistedAssignment){ //claur
// }else{
assignmentData=(AssignmentData)obj;
if (assignmentData.getSerialized() == null) { // timesheet created
System.out.println("==== no cached start found " + task.getName());
if (assignments.size()==1)
assignmentData.setResourceId(-1L);
else j.remove();
}
// }
}
if (assignments.size()>0)
for (Iterator j=assignments.iterator();j.hasNext();){
Object obj=j.next();
AssignmentData assignmentData=null;
Assignment assignment=null;
Resource resource;
boolean assigned=true;
int s;
// if (loadResources!=null&&obj instanceof PersistedAssignment){ //claur
// PersistedAssignment pa=(PersistedAssignment)obj;
// assignment=pa.getAssignment();
// s=pa.getSnapshot();
//
// long resId=pa.getResourceId();
// Node node=(Node)resourceNodeMap.get(resId);
// resource=node==null?ResourceImpl.getUnassignedInstance():(Resource)node.getImpl();
//
// if (resource==null) assigned=false;
// }else{
assignmentData=(AssignmentData)obj;
if (loadResources==null){
EnterpriseResourceData r=assignmentData.getResource();
if (r==null) assigned=false;
resource=(r==null)?ResourceImpl.getUnassignedInstance():(Resource)((Node)resourceNodeMap.get(r)).getImpl();
}else{
long resId=assignmentData.getResourceId();
Node node=(Node)resourceNodeMap.get(resId);
resource=node==null?ResourceImpl.getUnassignedInstance():(Resource)node.getImpl();
}
if (assignmentData.getSerialized() != null){
try {
assignment=(Assignment)deserialize(assignmentData,reindex);
} catch (Exception e) {
e.printStackTrace();
}
}
if (assignmentData.getSerialized() == null||(assignmentData.getSerialized() != null&&assignment==null)) { // timesheet created
assignment = Assignment.getInstance(task,resource, 1.0, 0);
if (assignment.getCachedStart() == null) { //doesn't occur filtered above
System.out.println("==== no cached start found " + task.getName());
} else {
task.setActualStart(assignment.getCachedStart().getTime());
task.setActualFinish(assignment.getCachedEnd().getTime());
}
}
assignment.setCachedStart(assignmentData.getCachedStart());
assignment.setCachedEnd(assignmentData.getCachedEnd());
assignment.setTimesheetStatus(assignmentData.getTimesheetStatus());
long lastUpdate = (assignmentData.getLastTimesheetUpdate() == null) ? 0 : assignmentData.getLastTimesheetUpdate().getTime();
assignment.setLastTimesheetUpdate(lastUpdate);
assignment.setWorkflowState(assignmentData.getWorkflowState());
s=assignmentData.getSnapshotId();
// }
assignment.getDetail().setTask(task);
assignment.getDetail().setResource(resource);
Object snapshotId=new Integer(s);
TaskSnapshot snapshot=(TaskSnapshot)task.getSnapshot(snapshotId);
//TODO was commented but needed for loading because task.getSnapshot(snapshotId)==null
//for snapshots other than CURRENT
if (snapshot==null){
snapshot=new TaskSnapshot();
snapshot.setCurrentSchedule(task.getCurrentSchedule());
task.setSnapshot(snapshotId,snapshot);
}
if (Snapshottable.TIMESHEET.equals(snapshotId)) {
assignment.setTimesheetAssignment(true);
}
//
snapshot.addAssignment(assignment);
if (assigned&&Snapshottable.CURRENT.equals(snapshotId)) resource.addAssignment(assignment);
if (assignmentData!=null) assignmentData.emtpy();
//incremental.addAssignment(assignmentData);
}
// task.setPersistedAssignments(null);
}
// the collection which holds a list of corresponding subproject tasks for projects which include this project
// note that their task names have been transformed to hold the name of the project
Collection referringSubprojectTaskData=projectData.getReferringSubprojectTasks();
if (tasks!=null&&referringSubprojectTaskData!=null){
ArrayList referringSubprojectTasks = new ArrayList(referringSubprojectTaskData.size());
project.setReferringSubprojectTasks(referringSubprojectTasks);
for (Iterator i=referringSubprojectTaskData.iterator();i.hasNext();){
TaskData taskData=(TaskData)i.next();
String projectName = taskData.getName(); // it was set to the referrig project name by synchronizer
task = null;
try {
task = (NormalTask)deserialize(taskData,reindex);
} catch (Exception e) {
if (taskData.isSubproject()){ //For migration
task=(NormalTask) project.getSubprojectHandler().createSubProj(taskData.getSubprojectId());
task.setUniqueId(taskData.getUniqueId());
task.setName(taskData.getName());
((SubProj)task).setSubprojectFieldValues(taskData.getSubprojectFieldValues());
}
else throw new IOException("Subproject:"+e);
}
task.setName(projectName);
task.setProjectId(taskData.getProjectId());
referringSubprojectTasks.add(task);
}
}
//dependencies