daily commit

This commit is contained in:
Fredrik Norberg 2011-07-19 16:56:15 +02:00
parent d222f0c4cd
commit 85480e30f2

@ -0,0 +1,114 @@
package se.su.dsv.scipro.util;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import org.apache.wicket.injection.web.InjectorHolder;
import org.apache.wicket.spring.injection.annot.SpringBean;
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.ProjectDao;
import se.su.dsv.scipro.data.dao.interfaces.ProjectScheduleDao;
import se.su.dsv.scipro.data.dataobjects.Project;
import se.su.dsv.scipro.data.dataobjects.ProjectEvent;
import se.su.dsv.scipro.data.dataobjects.ProjectEventTemplate;
import se.su.dsv.scipro.data.dataobjects.ProjectSchedule;
import se.su.dsv.scipro.data.dataobjects.ScheduleTemplate;
public class TemplateGenerator { //shamelessly taken alot from ScheduleGenerator
@SpringBean
private ProjectScheduleDao scheduleTemplateDao;
@SpringBean
private ProjectDao projectDao;
private Project project;
private ProjectSchedule schedule;
private Set<ProjectEvent> projectEvents;
private List<ProjectEventTemplate> projectEventTemplate;
private int templateEstimatedDays = 0;
private int durationInDays = 0;
private DateMidnight startDate;
private DateMidnight endDate;
public TemplateGenerator(Long templateId, Long projectId, Date startDate, Date endDate){
InjectorHolder.getInjector().inject(this);
this.startDate = new DateMidnight(startDate);
this.endDate = new DateMidnight(endDate);
project = projectDao.load(projectId);
if(project == null){
throw new IllegalArgumentException("The template generator did not find the provided project from db");
}
schedule = project.getProjectSchedule();
projectEvents = schedule.getProjectEvents();
}
public ScheduleTemplate generate(){
ScheduleTemplate template;
DateMidnight datePointer = new DateMidnight(startDate);
projectEventTemplate = new ArrayList<ProjectEventTemplate>();
int counter = 0;
for(ProjectEvent pe : projectEvents){
counter ++;
if(isMilestone(pe)){
durationInDays = (startDate.getDayOfYear() - (new DateMidnight(pe.getDueDate()).getDayOfYear()));
}else{
durationInDays = 0;
}
ProjectEventTemplate pet = new ProjectEventTemplate();
pet.setTitle(pe.getTitle());
pet.setDescription(pe.getDescription());
pet.setTemplateCreator(SciProSession.get().getUser());
pet.setEstimatedTimeConsumption(durationInDays);
pet.setNumberInOrder(counter);
pet.setRequireHandIn(pe.isRequireHandIn());
datePointer = datePointer.plusDays(durationInDays);
templateEstimatedDays += durationInDays;
projectEventTemplate.add(pet);
}
template = new ScheduleTemplate();
template.setCreator(SciProSession.get().getUser());
template.setSysAdminTemplate(false);
template.setProjectEventTemplates(projectEventTemplate);
return template;
}
public boolean isMilestone(ProjectEvent pe){ // events from templates have no participants and such events are milestones
return pe.getParticipants().isEmpty();
}
public Date getStartDate() {
return startDate.toDate();
}
public void setStartDate(Date startDate) {
this.startDate = new DateMidnight(startDate);
}
public Date getEndDate() {
return endDate.toDate();
}
public void setEndDate(Date endDate) {
this.endDate = new DateMidnight(endDate);
}
}