Merge branch 'm3_number_of_ideas' into develop
This commit is contained in:
commit
adaded1029
src
main/java/se/su/dsv/scipro
project/panels
springdata
repos
serviceimpls
services
supervisor/panels
test/java/se/su/dsv/scipro/springdata
@ -9,7 +9,6 @@ import org.apache.wicket.markup.html.form.Button;
|
||||
import org.apache.wicket.markup.html.form.Form;
|
||||
import org.apache.wicket.markup.html.panel.Panel;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.model.Model;
|
||||
import org.apache.wicket.spring.injection.annot.SpringBean;
|
||||
import org.apache.wicket.util.time.Duration;
|
||||
|
||||
@ -17,6 +16,7 @@ import se.su.dsv.scipro.data.dataobjects.ProjectClass;
|
||||
import se.su.dsv.scipro.data.dataobjects.Student;
|
||||
import se.su.dsv.scipro.data.dataobjects.User;
|
||||
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
|
||||
import se.su.dsv.scipro.peer.data.dao.controllers.Pair;
|
||||
import se.su.dsv.scipro.reusable.AddRemoveStudentsPanel;
|
||||
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
|
||||
import se.su.dsv.scipro.util.JavascriptEventConfirmation;
|
||||
@ -66,8 +66,14 @@ public class AcceptIdeaDialogPanel extends Panel {
|
||||
|
||||
@Override
|
||||
public void onSubmit(){
|
||||
ideaService.partnerAcceptIdea(model, loggedInUser);
|
||||
getSession().info("You have accepted to be a part of the project: "+ model.getObject().getTitle());
|
||||
Pair<Boolean, String> acceptance = ideaService.validatePartnerAcceptance(loggedInUser);
|
||||
if(acceptance.head){
|
||||
ideaService.partnerAcceptIdea(model.getObject(), loggedInUser);
|
||||
getSession().info("You have accepted to be a part of the project: "+ model.getObject().getTitle());
|
||||
} else {
|
||||
getSession().error(acceptance.tail);
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
EnclosureContainer cont = new EnclosureContainer("unconfirmedContainer", acceptButton);
|
||||
@ -78,7 +84,7 @@ public class AcceptIdeaDialogPanel extends Panel {
|
||||
|
||||
@Override
|
||||
public void onSubmit(){
|
||||
ideaService.declineIdea(model);
|
||||
ideaService.declineIdea(model.getObject());
|
||||
getSession().info("You have declined to be a part of the project: "+ model.getObject().getTitle());
|
||||
}
|
||||
};
|
||||
@ -112,10 +118,12 @@ public class AcceptIdeaDialogPanel extends Panel {
|
||||
|
||||
@Override
|
||||
public void onSubmit() {
|
||||
if(ideaService.acceptIdea(model, loggedInUser, partnerPanel.getStudentSet())){
|
||||
Pair<Boolean, String> acceptance = ideaService.validateIdeaAcceptance(model.getObject(), loggedInUser, partnerPanel.getStudentSet());
|
||||
if(acceptance.head){
|
||||
ideaService.acceptIdea(model.getObject(), loggedInUser, partnerPanel.getStudentSet());
|
||||
getSession().info("You have successfully accepted this project idea");
|
||||
} else {
|
||||
getSession().error("Something went wrong while trying to accept the project idea");
|
||||
getSession().error(acceptance.tail);
|
||||
}
|
||||
|
||||
|
||||
|
@ -41,7 +41,7 @@ public class CompleteIdeaDialogPanel extends Panel {
|
||||
|
||||
@Override
|
||||
public void onSubmit() {
|
||||
ideaService.updateIdea(model);
|
||||
ideaService.updateIdea(model.getObject());
|
||||
getSession().info("Project idea updated");
|
||||
}
|
||||
};
|
||||
@ -56,7 +56,7 @@ public class CompleteIdeaDialogPanel extends Panel {
|
||||
|
||||
@Override
|
||||
public void onSubmit() {
|
||||
ideaService.declineIdea(model);
|
||||
ideaService.declineIdea(model.getObject());
|
||||
getSession().info("Project idea participation cancelled");
|
||||
}
|
||||
};
|
||||
|
@ -22,6 +22,9 @@ public interface SupervisorIdeaRepo extends JpaRepository<SupervisorIdea, Long>,
|
||||
@Query("select idea from SupervisorIdea idea, Student author join idea.ideaParticipations ideaPart join author.ideaParticipations authorPart where ideaPart = authorPart and author = ? and idea.ideaStatus = ?")
|
||||
List<SupervisorIdea> findIdeasByAuthorAndStatus(Student author, IdeaStatus status);
|
||||
|
||||
@Query("select count(idea) from SupervisorIdea idea, Student author join idea.ideaParticipations ideaPart join author.ideaParticipations authorPart where ideaPart = authorPart and author = ? and idea.ideaStatus = ?")
|
||||
Long countIdeasByAuthorAndStatus(Student author, IdeaStatus status);
|
||||
|
||||
@Query("select idea from SupervisorIdea idea, Student author join idea.ideaParticipations ideaPart join author.ideaParticipations authorPart where ideaPart = authorPart and author = ? and idea.ideaStatus = ? and ideaPart.confirmed = ?")
|
||||
List<SupervisorIdea> findIdeas(Student author, IdeaStatus status, boolean confirmed);
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ import java.util.SortedSet;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.data.domain.Page;
|
||||
@ -24,6 +24,7 @@ import se.su.dsv.scipro.match.dataobject.IdeaParticipation;
|
||||
import se.su.dsv.scipro.match.dataobject.QSupervisorIdea;
|
||||
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
|
||||
import se.su.dsv.scipro.match.dataobject.Watson;
|
||||
import se.su.dsv.scipro.peer.data.dao.controllers.Pair;
|
||||
import se.su.dsv.scipro.springdata.repos.SupervisorIdeaRepo;
|
||||
import se.su.dsv.scipro.springdata.services.ApplicationPeriodService;
|
||||
import se.su.dsv.scipro.springdata.services.StudentService;
|
||||
@ -46,7 +47,7 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
|
||||
private SupervisorService supervisorService;
|
||||
@Resource
|
||||
private ApplicationPeriodService applicationPeriodService;
|
||||
|
||||
private transient Logger logger = Logger.getLogger(SupervisorIdeaService.class);
|
||||
private int MAX_PARTNERS = 1;
|
||||
|
||||
@Autowired
|
||||
@ -59,9 +60,7 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
|
||||
|
||||
@Override
|
||||
@Transactional ( readOnly = false )
|
||||
public void saveSupervisorCreatedIdea(IModel<SupervisorIdea> model, Employee creator, SortedSet<Student> students) {
|
||||
|
||||
SupervisorIdea idea = model.getObject();
|
||||
public void saveSupervisorCreatedIdea(SupervisorIdea idea, Employee creator, SortedSet<Student> students) {
|
||||
|
||||
if(!students.isEmpty()) {
|
||||
for(Student s : students) {
|
||||
@ -84,91 +83,133 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
|
||||
|
||||
@Override
|
||||
@Transactional ( readOnly = false )
|
||||
public void deleteWaitingIdea(IModel<SupervisorIdea> model) {
|
||||
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
|
||||
if(!idea.getIdeaStatus().equals(IdeaStatus.WAITING)) //Should not be deleted if IdeaStatus is anything else than waiting.
|
||||
public void deleteWaitingIdea(SupervisorIdea idea) {
|
||||
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
|
||||
if(!reloadedIdea.getIdeaStatus().equals(IdeaStatus.WAITING)) //Should not be deleted if IdeaStatus is anything else than waiting.
|
||||
return;
|
||||
else
|
||||
supervisorIdeaRepo.delete(idea);
|
||||
supervisorIdeaRepo.delete(reloadedIdea);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional ( readOnly = false )
|
||||
public boolean acceptIdea(IModel<SupervisorIdea> model, User mainAuthor,
|
||||
public void acceptIdea(SupervisorIdea idea, User mainAuthor,
|
||||
SortedSet<Student> studentSet) {
|
||||
if(studentSet.size()> MAX_PARTNERS){
|
||||
return false; //You may not add more than a specified number of partners.
|
||||
} else {
|
||||
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
|
||||
if(idea.getProjectClass().getCode().equals(ProjectClass.BACHELOR) && studentSet.isEmpty()){
|
||||
return false; //You need to select a partner if the idea is on bachelor level.
|
||||
}
|
||||
|
||||
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
|
||||
Student author = studentService.findByUser(mainAuthor);
|
||||
if(studentSet.contains(author)) {
|
||||
return false; //You may not select yourself as partner.
|
||||
}
|
||||
IdeaParticipation mainParticipation = new IdeaParticipation();
|
||||
mainParticipation.setStudent(author);
|
||||
mainParticipation.setSupervisorIdea(idea);
|
||||
mainParticipation.setConfirmed(true);
|
||||
author.addIdeaParticipation(mainParticipation);
|
||||
|
||||
for(Student s : studentSet) {
|
||||
s = studentService.findOne(s.getId()); //Needed for lazy loading to work.
|
||||
IdeaParticipation ip = new IdeaParticipation();
|
||||
ip.setStudent(s);
|
||||
ip.setSupervisorIdea(idea);
|
||||
ip.setSupervisorIdea(reloadedIdea);
|
||||
ip.setConfirmed(false);
|
||||
s.addIdeaParticipation(ip);
|
||||
}
|
||||
idea.setIdeaStatus(IdeaStatus.TAKEN);
|
||||
idea.setApplicationPeriod(applicationPeriodService.getCurrentPeriod(new Date(), idea.getProjectClass()));
|
||||
return true;
|
||||
}
|
||||
|
||||
IdeaParticipation mainParticipation = new IdeaParticipation();
|
||||
mainParticipation.setStudent(author);
|
||||
mainParticipation.setSupervisorIdea(reloadedIdea);
|
||||
mainParticipation.setConfirmed(true);
|
||||
author.addIdeaParticipation(mainParticipation);
|
||||
|
||||
reloadedIdea.setIdeaStatus(IdeaStatus.TAKEN);
|
||||
reloadedIdea.setApplicationPeriod(applicationPeriodService.getCurrentPeriod(new Date(), reloadedIdea.getProjectClass()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<Boolean, String> validateIdeaAcceptance(SupervisorIdea idea,
|
||||
User mainAuthor, SortedSet<Student> students) {
|
||||
if(students.size()> MAX_PARTNERS){
|
||||
logger.error("Accepting user: "+mainAuthor.getEmailAddress()+ " Error: More than "+MAX_PARTNERS+" partner(s) added to project idea.");
|
||||
return new Pair<Boolean, String>(false, "You may not add more than "+MAX_PARTNERS+" partner to the project idea"); //You may not add more than a specified number of partners.
|
||||
}
|
||||
|
||||
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
|
||||
|
||||
if(reloadedIdea.getProjectClass().getCode().equals(ProjectClass.BACHELOR) && students.isEmpty()){
|
||||
logger.error("Accepting user: " + mainAuthor.getEmailAddress() + " Error: No partner selected on bachelor level thesis.");
|
||||
return new Pair<Boolean, String>(false, "You need to select a partner when the idea is on bachelor level"); //You need to select a partner if the idea is on bachelor level.
|
||||
}
|
||||
|
||||
Student author = studentService.findByUser(mainAuthor);
|
||||
|
||||
if(students.contains(author)) {
|
||||
logger.error("Accepting user: " + mainAuthor.getEmailAddress() + " Error: Accepting user selected as his/her own partner.");
|
||||
return new Pair<Boolean, String>(false, "You may not select yourself as partner"); //You may not select yourself as partner.
|
||||
}
|
||||
|
||||
if(alreadyParticipatingOnIdea(author)) {
|
||||
logger.error("Accepting user: " + mainAuthor.getEmailAddress() + " Error: Author already attached to a taken project idea.");
|
||||
return new Pair<Boolean, String>(false, "You may only be part of one taken idea at once"); //You may only be part of one taken idea at once.
|
||||
}
|
||||
|
||||
for(Student s : students) {
|
||||
if(alreadyParticipatingOnIdea(s)) {
|
||||
logger.error("Accepting user: " + mainAuthor.getEmailAddress() + " Error: Co-author already attached to a taken project idea.");
|
||||
return new Pair<Boolean, String>(false, "Your project partner is already part of another project idea");
|
||||
}
|
||||
}
|
||||
|
||||
return new Pair<Boolean, String>(true, "Validation successful");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<Boolean, String> validatePartnerAcceptance(User user) {
|
||||
Student author = studentService.findByUser(user);
|
||||
|
||||
if(partnerAlreadyParticipatingOnIdea(author)){
|
||||
logger.error("Accepting user: " + user.getEmailAddress() + " Error: May not accept to be a partner if already participating in another idea.");
|
||||
return new Pair<Boolean, String>(false, "You may not accept to be a partner if already participating in another idea");
|
||||
}
|
||||
return new Pair<Boolean, String>(true,"Validation passed");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional (readOnly = false)
|
||||
public void partnerAcceptIdea(IModel<SupervisorIdea> model, User loggedInUser) {
|
||||
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
|
||||
public void partnerAcceptIdea(SupervisorIdea idea, User loggedInUser) {
|
||||
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
|
||||
Student author = studentService.findByUser(loggedInUser);
|
||||
for (IdeaParticipation ip : idea.getIdeaParticipations())
|
||||
for (IdeaParticipation ip : reloadedIdea.getIdeaParticipations()) {
|
||||
if(ip.getStudent().equals(author))
|
||||
ip.setConfirmed(true);
|
||||
if(idea.getApplicationPeriod()==null) {
|
||||
idea.setApplicationPeriod(applicationPeriodService.getCurrentPeriod(new Date(), idea.getProjectClass()));
|
||||
}
|
||||
if(reloadedIdea.getApplicationPeriod()==null) {
|
||||
reloadedIdea.setApplicationPeriod(applicationPeriodService.getCurrentPeriod(new Date(), reloadedIdea.getProjectClass()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional ( readOnly = false )
|
||||
public void declineIdea(IModel<SupervisorIdea> model) {
|
||||
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
|
||||
public void declineIdea(SupervisorIdea idea) {
|
||||
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
|
||||
//Remove participations
|
||||
for (IdeaParticipation ip : idea.getIdeaParticipations()) {
|
||||
for (IdeaParticipation ip : reloadedIdea.getIdeaParticipations()) {
|
||||
Student s = ip.getStudent();
|
||||
s.removeIdeaParticipation(ip);
|
||||
}
|
||||
//Erase watson boxes
|
||||
idea.setWatson(new Watson());
|
||||
reloadedIdea.setWatson(new Watson());
|
||||
//Remove application period association
|
||||
idea.setApplicationPeriod(null);
|
||||
reloadedIdea.setApplicationPeriod(null);
|
||||
//Change status back to waiting
|
||||
idea.setIdeaStatus(IdeaStatus.WAITING);
|
||||
|
||||
reloadedIdea.setIdeaStatus(IdeaStatus.WAITING);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional ( readOnly = false )
|
||||
public void updateIdea(IModel<SupervisorIdea> model) {
|
||||
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
|
||||
if(model.getObject().getWatson().getWhat()!=null)
|
||||
idea.getWatson().setWhat(model.getObject().getWatson().getWhat());
|
||||
if(model.getObject().getWatson().getWhy()!=null)
|
||||
idea.getWatson().setWhy(model.getObject().getWatson().getWhy());
|
||||
if(model.getObject().getWatson().getTheoryHow()!=null)
|
||||
idea.getWatson().setTheoryHow(model.getObject().getWatson().getTheoryHow());
|
||||
if(model.getObject().getWatson().getPracticalHow()!=null)
|
||||
idea.getWatson().setPracticalHow(model.getObject().getWatson().getPracticalHow());
|
||||
public void updateIdea(SupervisorIdea idea) {
|
||||
SupervisorIdea reloadedIdea = supervisorIdeaRepo.findOne(idea.getId());
|
||||
if(idea.getWatson().getWhat()!=null)
|
||||
reloadedIdea.getWatson().setWhat(idea.getWatson().getWhat());
|
||||
if(idea.getWatson().getWhy()!=null)
|
||||
reloadedIdea.getWatson().setWhy(idea.getWatson().getWhy());
|
||||
if(idea.getWatson().getTheoryHow()!=null)
|
||||
reloadedIdea.getWatson().setTheoryHow(idea.getWatson().getTheoryHow());
|
||||
if(idea.getWatson().getPracticalHow()!=null)
|
||||
reloadedIdea.getWatson().setPracticalHow(idea.getWatson().getPracticalHow());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -187,8 +228,8 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
|
||||
|
||||
// Only editable if idea status is waiting and the current user is the creator
|
||||
@Override
|
||||
public boolean isIdeaEditable(IModel<SupervisorIdea> model, User currentUser) {
|
||||
return model.getObject().getIdeaStatus().equals(IdeaStatus.WAITING)&&model.getObject().getCreator().getUser().equals(currentUser);
|
||||
public boolean isIdeaEditable(SupervisorIdea idea, User currentUser) {
|
||||
return idea.getIdeaStatus().equals(IdeaStatus.WAITING)&&idea.getCreator().getUser().equals(currentUser);
|
||||
}
|
||||
|
||||
|
||||
@ -228,6 +269,21 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
|
||||
return ideas;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long countByStatus(IdeaStatus status) {
|
||||
return supervisorIdeaRepo.count(byStatus(status));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long countIdeas(IdeaStatus status, Employee supervisor, ProjectClass pc) {
|
||||
return supervisorIdeaRepo.count(byStatus(status).and(bySupervisor(supervisor)).and(byLevel(pc)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long countByAuthorAndStatus(Student author, IdeaStatus status) {
|
||||
return supervisorIdeaRepo.countIdeasByAuthorAndStatus(author, status);
|
||||
}
|
||||
|
||||
private Predicate predicateFromParams(FilterParams params) {
|
||||
return levelFilter(params.getLevels()).and(bySupervisor(params.getSupervisor()));
|
||||
}
|
||||
@ -286,14 +342,19 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
|
||||
return QSupervisorIdea.supervisorIdea.ideaStatus.eq(status);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long countByStatus(IdeaStatus status) {
|
||||
return supervisorIdeaRepo.count(byStatus(status));
|
||||
private boolean alreadyParticipatingOnIdea(Student author) {
|
||||
Long ideas = countByAuthorAndStatus(author, IdeaStatus.TAKEN);
|
||||
if(ideas==0)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long countIdeas(IdeaStatus status, Employee supervisor, ProjectClass pc) {
|
||||
return supervisorIdeaRepo.count(byStatus(status).and(bySupervisor(supervisor)).and(byLevel(pc)));
|
||||
|
||||
private boolean partnerAlreadyParticipatingOnIdea(Student author) {
|
||||
Long ideas = countByAuthorAndStatus(author, IdeaStatus.TAKEN);
|
||||
if(ideas==1)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.SortedSet;
|
||||
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
@ -15,6 +14,7 @@ import se.su.dsv.scipro.data.dataobjects.Student;
|
||||
import se.su.dsv.scipro.data.dataobjects.User;
|
||||
import se.su.dsv.scipro.match.dataobject.Idea.IdeaStatus;
|
||||
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
|
||||
import se.su.dsv.scipro.peer.data.dao.controllers.Pair;
|
||||
|
||||
public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Long>, QueryService<SupervisorIdea, Long> {
|
||||
|
||||
@ -25,19 +25,23 @@ public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Lo
|
||||
List<SupervisorIdea> findByStatusAndAuthor(IdeaStatus status, Student author);
|
||||
List<SupervisorIdea> findIdeas(IdeaStatus status, Student author, boolean confirmed);
|
||||
|
||||
Long countByAuthorAndStatus(Student author, IdeaStatus status);
|
||||
Long countByStatus(IdeaStatus status);
|
||||
Long countIdeas(IdeaStatus status, Employee supervisor, ProjectClass pc);
|
||||
|
||||
void saveSupervisorCreatedIdea(IModel<SupervisorIdea> model, Employee creator, SortedSet<Student> students);
|
||||
void deleteWaitingIdea(IModel<SupervisorIdea> model);
|
||||
void partnerAcceptIdea(IModel<SupervisorIdea> model, User loggedInUser);
|
||||
void declineIdea(IModel<SupervisorIdea> model);
|
||||
void updateIdea(IModel<SupervisorIdea> model);
|
||||
void saveSupervisorCreatedIdea(SupervisorIdea idea, Employee creator, SortedSet<Student> students);
|
||||
void acceptIdea(SupervisorIdea idea, User mainAuthor, SortedSet<Student> sortedSet);
|
||||
void deleteWaitingIdea(SupervisorIdea idea);
|
||||
void partnerAcceptIdea(SupervisorIdea idea, User loggedInUser);
|
||||
void declineIdea(SupervisorIdea idea);
|
||||
void updateIdea(SupervisorIdea idea);
|
||||
|
||||
boolean acceptIdea(IModel<SupervisorIdea> model, User mainAuthor, SortedSet<Student> sortedSet);
|
||||
boolean hasTakenIdeas(User authorUser, boolean confirmed);
|
||||
boolean isIdeaEditable(IModel<SupervisorIdea> model, User currentUser);
|
||||
boolean isIdeaEditable(SupervisorIdea idea, User currentUser);
|
||||
|
||||
Pair<Boolean, String> validateIdeaAcceptance(SupervisorIdea idea, User loggedInUser, SortedSet<Student> students);
|
||||
Pair<Boolean, String> validatePartnerAcceptance(User loggedInUser);
|
||||
|
||||
public static class FilterParams implements Serializable {
|
||||
private static final long serialVersionUID = 4981420721152104292L;
|
||||
|
||||
@ -61,4 +65,6 @@ public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Lo
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -155,7 +155,7 @@ public class SupervisorEditIdeaPanel extends Panel {
|
||||
target.addComponent(feedbackPanel);
|
||||
|
||||
try {
|
||||
ideaService.saveSupervisorCreatedIdea(model, ideaCreator, studentsPanel.getStudentSet());
|
||||
ideaService.saveSupervisorCreatedIdea(model.getObject(), ideaCreator, studentsPanel.getStudentSet());
|
||||
setResponsePage(SupervisorProjectIdeaStartPage.class);
|
||||
getSession().info("Idea successfully submitted");
|
||||
} catch (Exception e) {
|
||||
|
@ -111,7 +111,7 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
|
||||
|
||||
@Override
|
||||
public boolean shouldBeVisible(IModel<SupervisorIdea> ideaModel) {
|
||||
return ideaService.isIdeaEditable(ideaModel, supervisor);
|
||||
return ideaService.isIdeaEditable(ideaModel.getObject(), supervisor);
|
||||
}
|
||||
};
|
||||
columns[6] = new ClickableIconColumn<SupervisorIdea>(Model.of("Delete"), null, ImageIcon.ICON_DELETE) {
|
||||
@ -119,12 +119,12 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
|
||||
@Override
|
||||
protected void onClick(IModel<SupervisorIdea> ideaModel,
|
||||
AjaxRequestTarget target) {
|
||||
ideaService.deleteWaitingIdea(ideaModel);
|
||||
ideaService.deleteWaitingIdea(ideaModel.getObject());
|
||||
target.addComponent(getWMC());
|
||||
}
|
||||
@Override
|
||||
public boolean shouldBeVisible(IModel<SupervisorIdea> ideaModel) {
|
||||
return ideaService.isIdeaEditable(ideaModel, supervisor);
|
||||
return ideaService.isIdeaEditable(ideaModel.getObject(), supervisor);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -6,12 +6,11 @@ import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.model.Model;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@ -36,6 +35,7 @@ import se.su.dsv.scipro.match.dataobject.Keyword;
|
||||
import se.su.dsv.scipro.match.dataobject.KeywordType;
|
||||
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
|
||||
import se.su.dsv.scipro.match.facade.ApplicationPeriodFacade;
|
||||
import se.su.dsv.scipro.peer.data.dao.controllers.Pair;
|
||||
import se.su.dsv.scipro.springdata.services.ProjectClassService;
|
||||
import se.su.dsv.scipro.springdata.services.RoleService;
|
||||
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
|
||||
@ -64,8 +64,8 @@ public class TestSupervisorIdea {
|
||||
private KeywordDao keywordDao;
|
||||
|
||||
private ProjectClass bachelor, master;
|
||||
private User authorUser1, authorUser2, supervisorUser, supervisorUser2, unconfirmedUser;
|
||||
private Student author1, author2, unconfirmedAuthor;
|
||||
private User authorUser1, authorUser2, authorUser3, supervisorUser, supervisorUser2;
|
||||
private Student author1, author2, author3;
|
||||
private Employee supervisor, supervisor2;
|
||||
private SupervisorIdea waitingBachelorIdea, waitingMasterIdea, takenBachelorIdea, completedMasterIdea, waitingBachelor2, waitingMaster2, waitingBachelor3;
|
||||
private ApplicationPeriod bachelorPeriod, masterPeriod;
|
||||
@ -88,13 +88,13 @@ public class TestSupervisorIdea {
|
||||
supervisorUser2 = newUser();
|
||||
authorUser1 = newUser();
|
||||
authorUser2 = newUser();
|
||||
unconfirmedUser = newUser();
|
||||
authorUser3 = newUser();
|
||||
|
||||
supervisor = newEmployee(supervisorUser);
|
||||
supervisor2 = newEmployee(supervisorUser2);
|
||||
author1 = newStudent(authorUser1);
|
||||
author2 = newStudent(authorUser2);
|
||||
unconfirmedAuthor = newStudent(unconfirmedUser);
|
||||
author3 = newStudent(authorUser3);
|
||||
|
||||
KeywordType type = new KeywordType("test type");
|
||||
type = keywordTypeDao.save(type);
|
||||
@ -189,8 +189,12 @@ public class TestSupervisorIdea {
|
||||
@Rollback
|
||||
public void testSaveSupervisorCreatedIdea() {
|
||||
Assert.assertEquals(new Long(5), ideaService.countByStatus(IdeaStatus.WAITING));
|
||||
IModel<SupervisorIdea> model = newIdeaModel(bachelor);
|
||||
ideaService.saveSupervisorCreatedIdea(model, supervisor, new TreeSet<Student>());
|
||||
SupervisorIdea idea = new SupervisorIdea();
|
||||
idea.setProjectClass(bachelor);
|
||||
idea.setTitle("Title");
|
||||
idea.setDescription("Description");
|
||||
idea.setRequirements("Reqs");
|
||||
ideaService.saveSupervisorCreatedIdea(idea, supervisor, new TreeSet<Student>());
|
||||
Assert.assertEquals(new Long(6), ideaService.countByStatus(IdeaStatus.WAITING));
|
||||
|
||||
}
|
||||
@ -200,14 +204,14 @@ public class TestSupervisorIdea {
|
||||
@Transactional
|
||||
@Rollback
|
||||
public void testIfIdeaIsEditable() {
|
||||
boolean shouldBeTrue = ideaService.isIdeaEditable(Model.of(waitingBachelorIdea), supervisorUser);
|
||||
boolean shouldBeTrue = ideaService.isIdeaEditable(waitingBachelorIdea, supervisorUser);
|
||||
Assert.assertTrue("Not true", shouldBeTrue);
|
||||
|
||||
boolean shouldBeFalse = ideaService.isIdeaEditable(Model.of(takenBachelorIdea), supervisorUser);
|
||||
boolean shouldBeFalse = ideaService.isIdeaEditable(takenBachelorIdea, supervisorUser);
|
||||
Assert.assertFalse("Not false", shouldBeFalse);
|
||||
|
||||
waitingBachelorIdea.setCreator(supervisor2);
|
||||
boolean shouldAlsoBeFalse = ideaService.isIdeaEditable(Model.of(waitingBachelorIdea), supervisorUser);
|
||||
boolean shouldAlsoBeFalse = ideaService.isIdeaEditable(waitingBachelorIdea, supervisorUser);
|
||||
Assert.assertFalse("Not false", shouldAlsoBeFalse);
|
||||
}
|
||||
|
||||
@ -219,12 +223,12 @@ public class TestSupervisorIdea {
|
||||
List<SupervisorIdea> ideaList = constructList(ideas);
|
||||
Assert.assertEquals(7, ideaList.size());
|
||||
|
||||
ideaService.deleteWaitingIdea(Model.of(takenBachelorIdea)); //Should not be deleted.
|
||||
ideaService.deleteWaitingIdea(takenBachelorIdea); //Should not be deleted.
|
||||
ideas = ideaService.findAll();
|
||||
ideaList = constructList(ideas);
|
||||
Assert.assertEquals(7, ideaList.size());
|
||||
|
||||
ideaService.deleteWaitingIdea(Model.of(waitingBachelorIdea)); //Should be deleted.
|
||||
ideaService.deleteWaitingIdea(waitingBachelorIdea); //Should be deleted.
|
||||
ideas = ideaService.findAll();
|
||||
ideaList = constructList(ideas);
|
||||
Assert.assertEquals(6, ideaList.size());
|
||||
@ -319,6 +323,93 @@ public class TestSupervisorIdea {
|
||||
Assert.assertEquals(Arrays.asList(new SupervisorIdea[]{waitingBachelorIdea, waitingMasterIdea}), ideas);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional
|
||||
@Rollback
|
||||
public void testCountIdeasByAuthorAndStatus() {
|
||||
Long numberOfWaitingIdeas = ideaService.countByAuthorAndStatus(author1, IdeaStatus.TAKEN);
|
||||
Assert.assertTrue(numberOfWaitingIdeas==0);
|
||||
|
||||
IdeaParticipation participation = new IdeaParticipation();
|
||||
participation.setStudent(author1);
|
||||
participation.setSupervisorIdea(takenBachelorIdea);
|
||||
participation.setConfirmed(true);
|
||||
author1.addIdeaParticipation(participation);
|
||||
|
||||
numberOfWaitingIdeas = ideaService.countByAuthorAndStatus(author1, IdeaStatus.TAKEN);
|
||||
Assert.assertTrue(numberOfWaitingIdeas==1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional
|
||||
@Rollback
|
||||
public void testIdeaAcceptance() {
|
||||
|
||||
Pair<Boolean, String> acceptance = ideaService.validateIdeaAcceptance(waitingBachelorIdea, authorUser1, new TreeSet<Student>());
|
||||
Assert.assertFalse("Not false", acceptance.head); //Should not be able to accept a bachelor idea without partner.
|
||||
|
||||
SortedSet<Student> partnerSet = new TreeSet<Student>();
|
||||
partnerSet.add(author2);
|
||||
partnerSet.add(author3);
|
||||
|
||||
acceptance = ideaService.validateIdeaAcceptance(waitingBachelorIdea, authorUser1, partnerSet);
|
||||
Assert.assertFalse("Not false", acceptance.head); //Should not be able to accept a bachelor idea with more than one partner.
|
||||
|
||||
partnerSet.add(author1);
|
||||
partnerSet.remove(author2);
|
||||
partnerSet.remove(author3);
|
||||
|
||||
acceptance = ideaService.validateIdeaAcceptance(waitingBachelorIdea, authorUser1, partnerSet);
|
||||
Assert.assertFalse("Not false", acceptance.head); //Should not be able to accept a bachelor idea with himself as partner.
|
||||
|
||||
partnerSet.remove(author1);
|
||||
partnerSet.add(author2);
|
||||
|
||||
acceptance = ideaService.validateIdeaAcceptance(waitingBachelorIdea, authorUser1, partnerSet);
|
||||
Assert.assertTrue("Not true", acceptance.head); //Everything ok, should be able to accept a bachelor with one partner.
|
||||
if(acceptance.head)
|
||||
ideaService.acceptIdea(waitingBachelorIdea, authorUser1, partnerSet);
|
||||
|
||||
partnerSet.remove(author2);
|
||||
partnerSet.add(author3);
|
||||
|
||||
acceptance = ideaService.validateIdeaAcceptance(waitingBachelor2, authorUser1, partnerSet);
|
||||
Assert.assertFalse("Not false", acceptance.head); //Should not be able to accept more than one idea.
|
||||
|
||||
partnerSet.remove(author3);
|
||||
partnerSet.add(author2);
|
||||
|
||||
acceptance = ideaService.validateIdeaAcceptance(waitingBachelor2, authorUser3, partnerSet);
|
||||
Assert.assertFalse("Not false", acceptance.head); //Should not be able to accept when the partner have a taken idea.
|
||||
}
|
||||
|
||||
@Test
|
||||
@Transactional
|
||||
@Rollback
|
||||
public void testPartnerAcceptIdea() {
|
||||
SortedSet<Student> studentSet = new TreeSet<Student>();
|
||||
studentSet.add(author1);
|
||||
studentSet.add(author2);
|
||||
|
||||
SupervisorIdea idea = new SupervisorIdea();
|
||||
idea.setProjectClass(bachelor);
|
||||
idea.setTitle("Title");
|
||||
idea.setDescription("Description");
|
||||
idea.setRequirements("Reqs");
|
||||
ideaService.saveSupervisorCreatedIdea(idea, supervisor, studentSet);
|
||||
|
||||
Assert.assertNull(idea.getApplicationPeriod());
|
||||
|
||||
for(IdeaParticipation ip : author1.getIdeaParticipations())
|
||||
Assert.assertFalse(ip.isConfirmed());
|
||||
for(IdeaParticipation ip : author2.getIdeaParticipations())
|
||||
Assert.assertFalse(ip.isConfirmed());
|
||||
|
||||
ideaService.partnerAcceptIdea(idea, authorUser1);
|
||||
|
||||
Assert.assertNotNull(idea.getApplicationPeriod());
|
||||
}
|
||||
|
||||
// HELPER METHODS
|
||||
private SupervisorIdea newIdea(ProjectClass pc, ApplicationPeriod ap, Employee supervisor, IdeaStatus ideaStatus) {
|
||||
SupervisorIdea idea = new SupervisorIdea();
|
||||
@ -332,15 +423,6 @@ public class TestSupervisorIdea {
|
||||
return ideaService.save(idea);
|
||||
}
|
||||
|
||||
private IModel<SupervisorIdea> newIdeaModel(ProjectClass pc) {
|
||||
IModel<SupervisorIdea> model = new Model<SupervisorIdea>(new SupervisorIdea());
|
||||
model.getObject().setDescription("Model description");
|
||||
model.getObject().setRequirements("Model reqs");
|
||||
model.getObject().setTitle("Model title");
|
||||
model.getObject().setProjectClass(pc);
|
||||
model.getObject().setKeywords(newKeywordSet());
|
||||
return model;
|
||||
}
|
||||
|
||||
private Set<Keyword> newKeywordSet() {
|
||||
Set<Keyword> set = new HashSet<Keyword>();
|
||||
|
Loading…
x
Reference in New Issue
Block a user