From 3b25bed168edc1066109467c8c5f2f6e81a6d75e Mon Sep 17 00:00:00 2001
From: Fredrik Norberg <fnorbe@dsv.su.se>
Date: Mon, 25 Jul 2011 16:20:36 +0200
Subject: [PATCH 1/3] added daysOffset to projecteventtemplate

---
 .../data/dataobjects/ProjectEventTemplate.java    | 15 +++++++++++++++
 .../se/su/dsv/scipro/util/TemplateGenerator.java  |  7 ++-----
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEventTemplate.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEventTemplate.java
index 38811fcf5b..9e5f128247 100644
--- a/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEventTemplate.java
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEventTemplate.java
@@ -38,6 +38,9 @@ public class ProjectEventTemplate extends DomainObject implements Comparable<Pro
 	@Column(nullable=false)
 	private long estimatedTimeConsumption = 0;
 	
+	@Column(nullable=false)
+	private int daysOffset;
+	
 	@Column(nullable=false)
 	private boolean requireHandIn = false;
 	
@@ -46,6 +49,10 @@ public class ProjectEventTemplate extends DomainObject implements Comparable<Pro
 	
 	public ProjectEventTemplate(){}
 	
+	public ProjectEventTemplate(int daysOffset){
+		this.daysOffset = daysOffset;
+	}
+	
 	public Long getId() {
 		return id;
 	}
@@ -53,6 +60,14 @@ public class ProjectEventTemplate extends DomainObject implements Comparable<Pro
 	public void setId(Long id) {
 		this.id = id;
 	}
+	
+	public void setdaysOffset(int daysOffset){
+		this.daysOffset = daysOffset;
+	}
+	
+	public int getDaysOffset(){
+		return daysOffset;
+	}
 
 	public String getTitle() {
 		return title;
diff --git a/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java b/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java
index 5ef62a4209..88b60484a9 100644
--- a/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java
+++ b/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java
@@ -38,6 +38,7 @@ public class TemplateGenerator { //based on ScheduleGenerator
 	
 	private int templateEstimatedDays = 0;
 	private int durationInDays = 0;
+	private int daysOffset;
 	
 	private DateMidnight startDate;
 	
@@ -58,10 +59,6 @@ public class TemplateGenerator { //based on ScheduleGenerator
 		}else{
 			this.startDate = new DateMidnight(projectEvents.first().getDueDate());
 		}
-		
-		
-		
-		
 	}
 	
 	public ScheduleTemplate generate(){
@@ -93,7 +90,7 @@ public class TemplateGenerator { //based on ScheduleGenerator
 				 pet.setNumberInOrder(counter);
 				 pet.setRequireHandIn(pe.isRequireHandIn());
 				 pet.setScheduleTemplate(template);
-				 
+				 måste få in daysOffset i projectEventTemplate
 				
 				datePointer = datePointer.plusDays(durationInDays);
 				templateEstimatedDays += durationInDays;

From 3a7314ed61481eae5d8cfa9af9ee69cb94744671 Mon Sep 17 00:00:00 2001
From: Fredrik Norberg <fnorbe@dsv.su.se>
Date: Tue, 26 Jul 2011 17:24:26 +0200
Subject: [PATCH 2/3] started to add paralell schedule events

---
 .../su/dsv/scipro/data/dataobjects/Event.java | 10 +++++--
 .../su/dsv/scipro/util/ScheduleGenerator.java | 18 +++++++++++++
 .../su/dsv/scipro/util/TemplateGenerator.java | 26 ++++++++++++++++---
 3 files changed, 49 insertions(+), 5 deletions(-)

diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java
index de3d93992e..ca75e3d9f3 100644
--- a/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java
@@ -155,9 +155,15 @@ public abstract class Event extends LazyDeletableDomainObject
 	@Override
 	public int compareTo(Event other) {
 		int dcomp = dueDate.compareTo(other.dueDate);
-		if(dcomp == 0)
+		if(dcomp == 0){
+			/*if(id == null){
+				return -1;
+			}
+			else if (other.id == null){
+				return 1;
+		}*/
 			return id.compareTo(other.id);
-		else
+		}else
 			return dcomp;
 	}
 	
diff --git a/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java b/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java
index 527ba60e47..90c11c461a 100644
--- a/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java
+++ b/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java
@@ -11,7 +11,10 @@ import org.joda.time.DateMidnight;
 import org.joda.time.DateTimeConstants;
 import org.joda.time.Days;
 
+import se.su.dsv.scipro.SciProSession;
+import se.su.dsv.scipro.data.dao.interfaces.EventDao;
 import se.su.dsv.scipro.data.dao.interfaces.ProjectDao;
+import se.su.dsv.scipro.data.dao.interfaces.ProjectEventDao;
 import se.su.dsv.scipro.data.dao.interfaces.ScheduleTemplateDao;
 import se.su.dsv.scipro.data.dataobjects.Project;
 import se.su.dsv.scipro.data.dataobjects.ProjectEvent;
@@ -27,6 +30,9 @@ public class ScheduleGenerator {
 	@SpringBean
 	private ProjectDao projectDao;
 	
+	@SpringBean
+	private ProjectEventDao projectEventDao;
+	
 	private Project project;
 	private ScheduleTemplate template;
 	private List<ProjectEventTemplate> eventTemplates;
@@ -72,11 +78,16 @@ public class ScheduleGenerator {
 		
 		List<ProjectEvent> events = new ArrayList<ProjectEvent>();
 		DateMidnight datePointer = new DateMidnight(startDate);
+		DateMidnight tempPointer;
 
 		int totalDuration = 0;
 		for(ProjectEventTemplate e : eventTemplates){
+			tempPointer = datePointer;
 			ProjectEvent event = e.createEventFromTemplate();
 			event.setParticipants(project.getProjectParticipants());
+			if(e.getEstimatedTimeConsumption() < 1){
+				datePointer = new DateMidnight(startDate).plusDays(e.getDaysOffset());
+			}
 			double duration = (double) e.getEstimatedTimeConsumption() * ratio;
 			if(duration < 1.0)
 				duration = 1.0;
@@ -93,7 +104,14 @@ public class ScheduleGenerator {
 				}
 			}
 			event.setDueDate(datePointer.toDate());
+			event.setCreator(SciProSession.get().getUser());
+			event.setProjectSchedule(projectSchedule);
+			event = projectEventDao.save(event);
 			events.add(event);
+			
+			
+			datePointer = tempPointer;
+			System.out.println(event);
 		}
 		return new ScheduleGeneratorResult(template, events, totalDuration, templateEstimatedDays, startDate.toDate(), endDate.toDate());
 	}
diff --git a/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java b/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java
index 88b60484a9..b493c4068d 100644
--- a/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java
+++ b/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java
@@ -57,7 +57,8 @@ public class TemplateGenerator { //based on ScheduleGenerator
 		if(schedule.getStartDate() != null){
 			this.startDate = new DateMidnight(schedule.getStartDate());
 		}else{
-			this.startDate = new DateMidnight(projectEvents.first().getDueDate());
+			int days = (new DateMidnight(projectEvents.first().getDueDate()).getDayOfYear() - new DateMidnight(schedule.getStartDate()).getDayOfYear());
+			this.startDate = new DateMidnight(projectEvents.first().getDueDate()).minusDays(days);
 		}
 	}
 	
@@ -90,10 +91,13 @@ public class TemplateGenerator { //based on ScheduleGenerator
 				 pet.setNumberInOrder(counter);
 				 pet.setRequireHandIn(pe.isRequireHandIn());
 				 pet.setScheduleTemplate(template);
-				 måste få in daysOffset i projectEventTemplate
+				 
+				 int daysOffset = (new DateMidnight(pe.getDueDate()).getDayOfYear() - startDate.getDayOfYear());
+				 
+				 pet.setdaysOffset(daysOffset);
 				
 				datePointer = datePointer.plusDays(durationInDays);
-				templateEstimatedDays += durationInDays;
+				setTemplateEstimatedDays(getTemplateEstimatedDays() + durationInDays);
 				projectEventTemplate.add(pet);
 			}
 			
@@ -155,5 +159,21 @@ public class TemplateGenerator { //based on ScheduleGenerator
 		this.startDate = new DateMidnight(startDate);
 	}
 
+	public int getTemplateEstimatedDays() {
+		return templateEstimatedDays;
+	}
+
+	public void setTemplateEstimatedDays(int templateEstimatedDays) {
+		this.templateEstimatedDays = templateEstimatedDays;
+	}
+
+	public int getDaysOffset() {
+		return daysOffset;
+	}
+
+	public void setDaysOffset(int daysOffset) {
+		this.daysOffset = daysOffset;
+	}
+
 	
 }

From 2bcb9d03ba5479441848bad7e48c709ba79833ac Mon Sep 17 00:00:00 2001
From: Fredrik Norberg <fnorbe@dsv.su.se>
Date: Wed, 27 Jul 2011 11:29:55 +0200
Subject: [PATCH 3/3] a new version of saving schedules as templates that
 supports simultaneus events

---
 .../su/dsv/scipro/data/dataobjects/Event.java  | 12 +-----------
 .../su/dsv/scipro/util/ScheduleGenerator.java  | 18 ++++++------------
 2 files changed, 7 insertions(+), 23 deletions(-)

diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java
index ca75e3d9f3..413633c472 100644
--- a/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java
@@ -154,17 +154,7 @@ public abstract class Event extends LazyDeletableDomainObject
 
 	@Override
 	public int compareTo(Event other) {
-		int dcomp = dueDate.compareTo(other.dueDate);
-		if(dcomp == 0){
-			/*if(id == null){
-				return -1;
-			}
-			else if (other.id == null){
-				return 1;
-		}*/
-			return id.compareTo(other.id);
-		}else
-			return dcomp;
+		return (int) (dueDate.getTime() - other.dueDate.getTime());
 	}
 	
 	public Panel getDisplayPanel(String id){
diff --git a/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java b/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java
index 90c11c461a..29252357f4 100644
--- a/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java
+++ b/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java
@@ -82,15 +82,13 @@ public class ScheduleGenerator {
 
 		int totalDuration = 0;
 		for(ProjectEventTemplate e : eventTemplates){
-			tempPointer = datePointer;
+			tempPointer = new DateMidnight(datePointer);
 			ProjectEvent event = e.createEventFromTemplate();
-			event.setParticipants(project.getProjectParticipants());
-			if(e.getEstimatedTimeConsumption() < 1){
+			event.setParticipants(project.getProjectParticipants());//might have to remove this
+			if(e.getEstimatedTimeConsumption() <= 1){
 				datePointer = new DateMidnight(startDate).plusDays(e.getDaysOffset());
 			}
 			double duration = (double) e.getEstimatedTimeConsumption() * ratio;
-			if(duration < 1.0)
-				duration = 1.0;
 			
 			datePointer = datePointer.plusDays((int) duration);
 			totalDuration += (int)duration;
@@ -104,14 +102,10 @@ public class ScheduleGenerator {
 				}
 			}
 			event.setDueDate(datePointer.toDate());
-			event.setCreator(SciProSession.get().getUser());
-			event.setProjectSchedule(projectSchedule);
-			event = projectEventDao.save(event);
 			events.add(event);
-			
-			
-			datePointer = tempPointer;
-			System.out.println(event);
+			if(e.getEstimatedTimeConsumption() <= 1){	
+				datePointer = tempPointer;
+			}
 		}
 		return new ScheduleGeneratorResult(template, events, totalDuration, templateEstimatedDays, startDate.toDate(), endDate.toDate());
 	}