Merge branch 'activityplan' into develop
* activityplan: implemented the functionality to save activityplans as templates Almost done with saving schedules as templates daily commit
This commit is contained in:
commit
ef1b67701f
src
main/java/se/su/dsv/scipro
data/dataobjects
schedule
panels
templates
supervisor/pages
util
test/java/se/su/dsv/scipro/dao/jpa
@ -1,5 +1,6 @@
|
||||
package se.su.dsv.scipro.data.dataobjects;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
@ -38,6 +39,8 @@ public class ProjectSchedule extends DomainObject {
|
||||
|
||||
private boolean locked = false;
|
||||
|
||||
private Date startDate;
|
||||
|
||||
public ProjectSchedule() {}
|
||||
|
||||
public Long getId() {
|
||||
@ -79,6 +82,14 @@ public class ProjectSchedule extends DomainObject {
|
||||
public void setGroupEvents(Set<GroupEvent> groupEvents) {
|
||||
this.groupEvents = groupEvents;
|
||||
}
|
||||
|
||||
public void setStartDate(Date startDate){
|
||||
this.startDate = startDate;
|
||||
}
|
||||
|
||||
public Date getStartDate(){
|
||||
return startDate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
|
@ -289,6 +289,7 @@ public abstract class ScheduleGeneratorPanel extends Panel {
|
||||
public void onClick() {
|
||||
ProjectSchedule ps = new ProjectSchedule();
|
||||
ps.setProject(project);
|
||||
ps.setStartDate(res.getStartDate());
|
||||
ps = projectScheduleDao.save(ps);
|
||||
for(ProjectEvent e : res.getEventList()){
|
||||
e.setProjectSchedule(ps);
|
||||
|
@ -22,6 +22,9 @@
|
||||
<a href="#" wicket:id="addGroupEventLink">
|
||||
<img wicket:id="addGroupEventLinkIcon" /> Add group event
|
||||
</a>
|
||||
<a href="#" wicket:id="saveAsTemplateLink">
|
||||
<img wicket:id="saveTemplateLinkIcon" /> Save as template
|
||||
</a>
|
||||
</div>
|
||||
<div wicket:id="monthPicker" class="span-18 last prepend-top"></div>
|
||||
<div wicket:id="eventListContainer" class="span-18 last">
|
||||
|
@ -11,6 +11,7 @@ import org.apache.wicket.ajax.markup.html.AjaxLink;
|
||||
import org.apache.wicket.markup.html.WebMarkupContainer;
|
||||
import org.apache.wicket.markup.html.basic.Label;
|
||||
import org.apache.wicket.markup.html.form.DropDownChoice;
|
||||
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
|
||||
import org.apache.wicket.markup.html.link.Link;
|
||||
import org.apache.wicket.markup.html.list.ListItem;
|
||||
import org.apache.wicket.markup.html.list.ListView;
|
||||
@ -27,9 +28,11 @@ import se.su.dsv.scipro.components.monthpicker.IMonthChangedListener;
|
||||
import se.su.dsv.scipro.components.monthpicker.MonthPicker;
|
||||
import se.su.dsv.scipro.data.dao.interfaces.ProjectDao;
|
||||
import se.su.dsv.scipro.data.dao.interfaces.ProjectScheduleDao;
|
||||
import se.su.dsv.scipro.data.dao.interfaces.ScheduleTemplateDao;
|
||||
import se.su.dsv.scipro.data.dataobjects.Event;
|
||||
import se.su.dsv.scipro.data.dataobjects.Project;
|
||||
import se.su.dsv.scipro.data.dataobjects.ProjectSchedule;
|
||||
import se.su.dsv.scipro.data.dataobjects.ScheduleTemplate;
|
||||
import se.su.dsv.scipro.data.dataobjects.Student;
|
||||
import se.su.dsv.scipro.data.dataobjects.User;
|
||||
import se.su.dsv.scipro.icons.AjaxActionIcon;
|
||||
@ -38,7 +41,10 @@ import se.su.dsv.scipro.schedule.baseevent.panels.EventSchedulePanel;
|
||||
import se.su.dsv.scipro.schedule.groupevent.panels.CreateGroupEventPanel;
|
||||
import se.su.dsv.scipro.schedule.models.EventListModel;
|
||||
import se.su.dsv.scipro.schedule.projectevent.panels.CreateProjectEventPanel;
|
||||
import se.su.dsv.scipro.schedule.templates.pages.ScheduleTemplateDetailsPage;
|
||||
import se.su.dsv.scipro.supervisor.pages.SupervisorScheduleTemplatesEditorPage;
|
||||
import se.su.dsv.scipro.util.SelectOption;
|
||||
import se.su.dsv.scipro.util.TemplateGenerator;
|
||||
import se.su.dsv.scipro.util.WiQueryCoreEffectsHelper;
|
||||
|
||||
|
||||
@ -51,7 +57,10 @@ public abstract class SchedulePlannerPanel extends Panel {//implements ISchedule
|
||||
|
||||
@SpringBean
|
||||
private ProjectScheduleDao projectScheduleDao;
|
||||
|
||||
|
||||
@SpringBean
|
||||
private ScheduleTemplateDao scheduleTemplateDao;
|
||||
|
||||
private Project project;
|
||||
private User user;
|
||||
private WebMarkupContainer dialogContainer;
|
||||
@ -190,6 +199,24 @@ public abstract class SchedulePlannerPanel extends Panel {//implements ISchedule
|
||||
|
||||
scheduleContainer.add(addGroupEventLink);
|
||||
|
||||
AjaxLink<Void> saveAsTemplateLink = new AjaxLink<Void>("saveAsTemplateLink"){
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public void onClick(AjaxRequestTarget target) {
|
||||
TemplateGenerator tg = new TemplateGenerator(project.getId());
|
||||
ScheduleTemplate scheduleTemplate = tg.generate();
|
||||
setResponsePage(new SupervisorScheduleTemplatesEditorPage(scheduleTemplate));
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
saveAsTemplateLink.add(new ImageIcon("saveTemplateLinkIcon", ImageIcon.ICON_EDIT));
|
||||
|
||||
scheduleContainer.add(saveAsTemplateLink);
|
||||
|
||||
|
||||
final List<SelectOption<User>> participantOptions = new ArrayList<SelectOption<User>>();
|
||||
for(Student s : project.getProjectParticipants()){
|
||||
|
@ -8,7 +8,6 @@ import se.su.dsv.scipro.data.dao.interfaces.ScheduleTemplateDao;
|
||||
import se.su.dsv.scipro.data.dataobjects.ScheduleTemplate;
|
||||
import se.su.dsv.scipro.exceptions.PageNotFoundException;
|
||||
import se.su.dsv.scipro.schedule.templates.panels.ScheduleTemplateDetailsPanel;
|
||||
import se.su.dsv.scipro.security.auth.Authorization;
|
||||
|
||||
public class ScheduleTemplateDetailsPage extends MenuPage {
|
||||
|
||||
|
@ -33,6 +33,8 @@ public class ScheduleTemplateDetailsPanel extends Panel {
|
||||
|
||||
public ScheduleTemplateDetailsPanel(String id, final ScheduleTemplate st){
|
||||
super(id);
|
||||
|
||||
|
||||
template = scheduleTemplateDao.reLoad(st);
|
||||
|
||||
add(new Label("templateName", template.getTemplateName()));
|
||||
|
@ -52,7 +52,7 @@ public class ScheduleTemplateFormPanel extends Panel {
|
||||
template = new ScheduleTemplate();
|
||||
template.setCreator(SciProSession.get().getUser());
|
||||
template.setSysAdminTemplate(isSysAdminView);
|
||||
} else {
|
||||
} else { //test, might not be able to remove this
|
||||
template = scheduleTemplateDao.reLoad(template);
|
||||
}
|
||||
Class<? extends MenuPage> responseClass = null;
|
||||
@ -64,6 +64,8 @@ public class ScheduleTemplateFormPanel extends Panel {
|
||||
add(new ScheduleTemplateForm("templateForm", template, responseClass));
|
||||
}
|
||||
|
||||
|
||||
|
||||
class ScheduleTemplateForm extends Form<ScheduleTemplate> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
@ -34,6 +34,12 @@ public class SupervisorScheduleTemplatesEditorPage extends AbstractSupervisorSch
|
||||
add(new ScheduleTemplateFormPanel("scheduleTemplateFormPanel", template, false));
|
||||
}
|
||||
|
||||
public SupervisorScheduleTemplatesEditorPage(ScheduleTemplate st) {
|
||||
super(new PageParameters());
|
||||
|
||||
add(new ScheduleTemplateFormPanel("scheduleTemplateFormPanel", st, false));
|
||||
}
|
||||
|
||||
public SupervisorScheduleTemplatesEditorPage(){
|
||||
this(new PageParameters());
|
||||
}
|
||||
|
162
src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java
Normal file
162
src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java
Normal file
@ -0,0 +1,162 @@
|
||||
package se.su.dsv.scipro.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import org.apache.wicket.injection.web.InjectorHolder;
|
||||
import org.apache.wicket.spring.injection.annot.SpringBean;
|
||||
import org.joda.time.DateMidnight;
|
||||
|
||||
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.dao.interfaces.ScheduleTemplateDao;
|
||||
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 { //based on ScheduleGenerator
|
||||
|
||||
/*@SpringBean
|
||||
private ProjectScheduleDao projectscheduleDao;*/
|
||||
|
||||
@SpringBean
|
||||
private ScheduleTemplateDao scheduleTemplateDao;
|
||||
|
||||
@SpringBean
|
||||
private ProjectDao projectDao;
|
||||
|
||||
private Project project;
|
||||
private ProjectSchedule schedule;
|
||||
private TreeSet<ProjectEvent> projectEvents;
|
||||
private List<ProjectEventTemplate> projectEventTemplate;
|
||||
|
||||
private int templateEstimatedDays = 0;
|
||||
private int durationInDays = 0;
|
||||
|
||||
private DateMidnight startDate;
|
||||
|
||||
|
||||
public TemplateGenerator(Long projectId){
|
||||
InjectorHolder.getInjector().inject(this);
|
||||
|
||||
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 = new TreeSet<ProjectEvent>(schedule.getProjectEvents());
|
||||
|
||||
if(schedule.getStartDate() != null){
|
||||
this.startDate = new DateMidnight(schedule.getStartDate());
|
||||
}else{
|
||||
this.startDate = new DateMidnight(projectEvents.first().getDueDate());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public ScheduleTemplate generate(){
|
||||
|
||||
ScheduleTemplate template;
|
||||
|
||||
DateMidnight datePointer = new DateMidnight(startDate);
|
||||
projectEventTemplate = new ArrayList<ProjectEventTemplate>();
|
||||
int counter = 0;
|
||||
|
||||
template = new ScheduleTemplate();
|
||||
template.setCreator(SciProSession.get().getUser());
|
||||
template.setSysAdminTemplate(false);
|
||||
template.setTemplateName("");
|
||||
|
||||
for(ProjectEvent pe : projectEvents){
|
||||
counter ++;
|
||||
if(isMilestone(pe)){
|
||||
durationInDays = ((new DateMidnight(pe.getDueDate()).getDayOfYear() - datePointer.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());
|
||||
pet.setScheduleTemplate(template);
|
||||
|
||||
|
||||
datePointer = datePointer.plusDays(durationInDays);
|
||||
templateEstimatedDays += durationInDays;
|
||||
projectEventTemplate.add(pet);
|
||||
}
|
||||
|
||||
|
||||
template.setProjectEventTemplates(projectEventTemplate);
|
||||
template = scheduleTemplateDao.save(template);
|
||||
|
||||
return template;
|
||||
|
||||
}
|
||||
|
||||
/*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);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,6 +1,10 @@
|
||||
package se.su.dsv.scipro.dao.jpa;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.springframework.test.annotation.Rollback;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author Dan Kjellman <dan-kjel@dsv.su.se>
|
||||
@ -8,8 +12,15 @@ import org.junit.Ignore;
|
||||
*/
|
||||
//@RunWith(SpringJUnit4ClassRunner.class)
|
||||
//@ContextConfiguration
|
||||
@Ignore
|
||||
//@Ignore
|
||||
public class TestProjectScheduleDaoJPA {
|
||||
|
||||
@Test @Transactional
|
||||
@Rollback
|
||||
public void testDBChange() {
|
||||
//For deploy! added a date column to projectSchedule
|
||||
Assert.assertEquals(true, false);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user