} 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
//Set<DependencyKey> initialLinkIds=null;
for (Iterator i=projectData.getTasks().iterator();i.hasNext();){
TaskData successorssorData=(TaskData)i.next();
if (successorssorData.getPredecessors()!=null){
final Task successor=(Task)((Node)taskNodeMap.get(successorssorData)).getImpl();
for (Iterator j=successorssorData.getPredecessors().iterator();j.hasNext();){
LinkData linkData=(LinkData)j.next();
// if (initialLinkIds==null){
// initialLinkIds=new HashSet<DependencyKey>();
// project.setInitialLinkIds(initialLinkIds);
// }
// initialLinkIds.add(new DependencyKey(linkData.getPredecessorId(),linkData.getSuccessorId()/*,externalId*/));
Dependency dependency=(Dependency)deserialize(linkData,reindex);
if (linkData.getPredecessor() == null) {
System.out.println("null pred - this shouldn't happen. skipping"); // todo treat it
continue;
}
final Task predecessor=(Task)((Node)taskNodeMap.get(linkData.getPredecessor())).getImpl();
connectDependency(dependency,predecessor,successor);
linkData.emtpy(); //why is this there?
}
}
}
}
//task outline
if (tasks!=null){
//add missing summary task
Node summaryNode=null;
// if (Environment.isAddSummaryTask()&&!project.isSummaryTaskEnabled() //needed for import, add other conditions? //claur
// && (tasks.size()==0||((TaskData)tasks.iterator().next()).getUniqueId()!=Task.SUMMARY_UNIQUE_ID)){
// NormalTask projityTask = project.newNormalTaskInstance(false);
// projityTask.setName(Messages.getString("Text.DefaultSummaryTaskName"));
// projityTask.setUniqueId(DataObject.SUMMARY_UNIQUE_ID);
// projityTask.setOwningProject(project);
// projityTask.setProjectId(project.getUniqueId());
// summaryNode = NodeFactory.getInstance().createNode(projityTask); // get a node for this task
// project.addToDefaultOutline(null,summaryNode);
// project.setSummaryTaskEnabled(true);
// }
Map<Long, Node> subprojectsMap=new HashMap<Long, Node>();
for (Iterator i=tasks.iterator();i.hasNext();){
TaskData taskData=(TaskData)i.next();
TaskData parentData=taskData.getParentTask();
// if (taskData.isTimesheetCreated())
// System.out.println("timesheet created parent is " + parentData == null ? null : parentData.getName());
Node node;
if (taskData.getSerialized()==null /*&& taskData.getUniqueId()!=Task.SUMMARY_UNIQUE_ID*/ &&!taskData.isTimesheetCreated()) //void node //claur
node=NodeFactory.getInstance().createVoidNode();
else node=(Node)taskNodeMap.get(taskData);
Node parentNode=null;
int position=-1;
if (taskData.isExternal()){
Node previous=subprojectsMap.get(taskData.getProjectId());
if (previous!=null) parentNode=(Node)previous.getParent();
if (parentNode!=null){
position=parentNode.getIndex(previous)+1;
if (parentNode.isRoot()) parentNode=null;
}
}
if (position==-1){
if (parentData==null&&summaryNode!=null)
parentNode=summaryNode;
else
parentNode=(parentData==null)?
null:
((Node)taskNodeMap.get(parentData));
position=(int)taskData.getChildPosition();
}
if (taskData.isTimesheetCreated())
System.out.println("new task " + node + "parent node is " + parentNode);
if (node.getImpl() instanceof SubProj){
SubProj sub=(SubProj)node.getImpl();
subprojectsMap.put(sub.getSubprojectUniqueId(), node);
}
project.addToDefaultOutline(parentNode,node,position,false);
taskData.emtpy();