Merge branch 'm3_first_meeting' into develop

This commit is contained in:
Emil Siverhall 2012-08-01 13:00:54 +02:00
commit 47b36f75f6
6 changed files with 27 additions and 22 deletions

@ -2,34 +2,22 @@ package se.su.dsv.scipro.project.pages;
import java.util.List; import java.util.List;
import javax.servlet.http.Cookie;
import org.apache.wicket.PageParameters; import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AbstractAjaxTimerBehavior; import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.EmptyPanel; import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model; import org.apache.wicket.model.Model;
import org.apache.wicket.protocol.http.WebRequest;
import org.apache.wicket.protocol.http.WebResponse;
import org.apache.wicket.spring.injection.annot.SpringBean; import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.time.Duration; import org.apache.wicket.util.time.Duration;
import org.odlabs.wiquery.ui.dialog.Dialog; import org.odlabs.wiquery.ui.dialog.Dialog;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.data.DomainObjectDetachableModel;
import se.su.dsv.scipro.data.dao.interfaces.ProjectDao;
import se.su.dsv.scipro.data.dataobjects.Project;
import se.su.dsv.scipro.data.dataobjects.Student; import se.su.dsv.scipro.data.dataobjects.Student;
import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.match.dataobject.Idea.IdeaStatus; import se.su.dsv.scipro.match.dataobject.Idea.IdeaStatus;
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.project.panels.AcceptIdeaDialogPanel; import se.su.dsv.scipro.project.panels.AcceptIdeaDialogPanel;
import se.su.dsv.scipro.project.panels.CompleteIdeaDialogPanel; import se.su.dsv.scipro.project.panels.CompleteIdeaDialogPanel;
import se.su.dsv.scipro.project.panels.ProjectIdeaTabMenuPanel; import se.su.dsv.scipro.project.panels.ProjectIdeaTabMenuPanel;
import se.su.dsv.scipro.project.panels.ProjectSubTabMenuPanel;
import se.su.dsv.scipro.springdata.services.StudentService; import se.su.dsv.scipro.springdata.services.StudentService;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService; import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
/** /**
@ -121,8 +109,7 @@ public abstract class AbstractProjectIdeaPage extends ProjectPage {
stop(); stop();
} }
}); });
} else }
System.out.println("No confirmed ideas");
} }
} }

@ -18,12 +18,15 @@ import se.su.dsv.scipro.project.panels.CheatSheetPanel;
import se.su.dsv.scipro.project.panels.ProjectIdeaSubmissionPanel; import se.su.dsv.scipro.project.panels.ProjectIdeaSubmissionPanel;
import se.su.dsv.scipro.security.auth.Authorization; import se.su.dsv.scipro.security.auth.Authorization;
import se.su.dsv.scipro.security.auth.roles.Roles; import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
@Authorization(authorizedRoles={Roles.STUDENT}) @Authorization(authorizedRoles={Roles.STUDENT})
public class ProjectIdeaSubmissionPage extends AbstractProjectIdeaPage implements MenuHighlightProjectIdeas { public class ProjectIdeaSubmissionPage extends AbstractProjectIdeaPage implements MenuHighlightProjectIdeas {
@SpringBean @SpringBean
private ProjectIdeaDao projectIdeaDao; private ProjectIdeaDao projectIdeaDao;
@SpringBean
private SupervisorIdeaService ideaService;
public ProjectIdeaSubmissionPage(PageParameters pp) { public ProjectIdeaSubmissionPage(PageParameters pp) {
super(pp); super(pp);
@ -38,12 +41,14 @@ public class ProjectIdeaSubmissionPage extends AbstractProjectIdeaPage implement
for(Student s: authorRoles){ for(Student s: authorRoles){
authors.add(s.getUser()); authors.add(s.getUser());
} }
if(!authors.contains(SciProSession.get().getUser())){ if(!authors.contains(getUser())){
failAndRedirect(); failAndRedirect();
} }
}else }else
idea = new ProjectIdea(); idea = new ProjectIdea();
add(new ProjectIdeaSubmissionPanel("projectIdeaPanel", getUser(), idea));
boolean alreadyParticipating = ideaService.authorParticipatingOnIdea(getUser());
add(new ProjectIdeaSubmissionPanel("projectIdeaPanel", getUser(), idea, alreadyParticipating));
add(new CheatSheetPanel("cheatSheetPanel")); add(new CheatSheetPanel("cheatSheetPanel"));
} }

@ -17,11 +17,13 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.SciProSession; import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao; import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao;
import se.su.dsv.scipro.data.dataobjects.ProjectClass; import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.facade.ProjectIdeaFacade; import se.su.dsv.scipro.data.facade.ProjectIdeaFacade;
import se.su.dsv.scipro.icons.ImageObject; import se.su.dsv.scipro.icons.ImageObject;
import se.su.dsv.scipro.match.dao.interfaces.ApplicationPeriodDao; import se.su.dsv.scipro.match.dao.interfaces.ApplicationPeriodDao;
import se.su.dsv.scipro.match.dataobject.ApplicationPeriod; import se.su.dsv.scipro.match.dataobject.ApplicationPeriod;
import se.su.dsv.scipro.project.pages.ProjectIdeaSubmissionPage; import se.su.dsv.scipro.project.pages.ProjectIdeaSubmissionPage;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
import se.su.dsv.scipro.util.DateFormatter; import se.su.dsv.scipro.util.DateFormatter;
public class ProjectIdeaPeriodPanel extends Panel { public class ProjectIdeaPeriodPanel extends Panel {
@ -34,6 +36,8 @@ public class ProjectIdeaPeriodPanel extends Panel {
private ProjectClassDao projectClassDao; private ProjectClassDao projectClassDao;
@SpringBean @SpringBean
private ProjectIdeaFacade projectIdeaFacade; private ProjectIdeaFacade projectIdeaFacade;
@SpringBean
private SupervisorIdeaService ideaService;
private WebMarkupContainer periodContainer; private WebMarkupContainer periodContainer;
@ -123,7 +127,9 @@ public class ProjectIdeaPeriodPanel extends Panel {
alreadySubmittedLabel.setVisible(false); alreadySubmittedLabel.setVisible(false);
periodContainer.add(alreadySubmittedLabel); periodContainer.add(alreadySubmittedLabel);
if (projectIdeaFacade.projectIdeaAlreadySubmittedThisPeriod(SciProSession.get().getUser(), currentPeriods)){ User currentUser = SciProSession.get().getUser();
if (projectIdeaFacade.projectIdeaAlreadySubmittedThisPeriod(currentUser, currentPeriods)||ideaService.authorParticipatingOnIdea(currentUser)){
newIdeaLink.setVisible(false); newIdeaLink.setVisible(false);
alreadySubmittedLabel.setVisible(true); alreadySubmittedLabel.setVisible(true);
} }

@ -51,8 +51,8 @@ import se.su.dsv.scipro.match.dao.interfaces.ApplicationPeriodDao;
import se.su.dsv.scipro.match.dao.interfaces.AuthorDao; import se.su.dsv.scipro.match.dao.interfaces.AuthorDao;
import se.su.dsv.scipro.match.dao.interfaces.ExemptionDao; import se.su.dsv.scipro.match.dao.interfaces.ExemptionDao;
import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao; import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao;
import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao;
import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao.TYPE; import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao.TYPE;
import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao;
import se.su.dsv.scipro.match.dataobject.ApplicationPeriod; import se.su.dsv.scipro.match.dataobject.ApplicationPeriod;
import se.su.dsv.scipro.match.dataobject.Keyword; import se.su.dsv.scipro.match.dataobject.Keyword;
import se.su.dsv.scipro.match.dataobject.KeywordType; import se.su.dsv.scipro.match.dataobject.KeywordType;
@ -99,10 +99,10 @@ public class ProjectIdeaSubmissionPanel extends Panel {
* @param idea * @param idea
* The project idea, that is submitted * The project idea, that is submitted
*/ */
public ProjectIdeaSubmissionPanel(String id, User user, ProjectIdea idea) { public ProjectIdeaSubmissionPanel(String id, User user, ProjectIdea idea, boolean alreadyParticipating) {
super(id); super(id);
add(new FeedbackPanel("feedback")); add(new FeedbackPanel("feedback"));
add(new ProjectIdeaForm("projectIdeaForm", user, new Model<ProjectIdea>(idea))); add(new ProjectIdeaForm("projectIdeaForm", user, new Model<ProjectIdea>(idea)).setEnabled(!alreadyParticipating));
dialogSetup(); dialogSetup();
} }

@ -284,6 +284,12 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
return supervisorIdeaRepo.countIdeasByAuthorAndStatus(author, status); return supervisorIdeaRepo.countIdeasByAuthorAndStatus(author, status);
} }
@Override
public boolean authorParticipatingOnIdea(User user) {
Student author = studentService.findByUser(user);
return alreadyParticipatingOnIdea(author);
}
private Predicate predicateFromParams(FilterParams params) { private Predicate predicateFromParams(FilterParams params) {
return levelFilter(params.getLevels()).and(bySupervisor(params.getSupervisor())); return levelFilter(params.getLevels()).and(bySupervisor(params.getSupervisor()));
} }

@ -38,6 +38,7 @@ public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Lo
boolean hasTakenIdeas(User authorUser, boolean confirmed); boolean hasTakenIdeas(User authorUser, boolean confirmed);
boolean isIdeaEditable(SupervisorIdea idea, User currentUser); boolean isIdeaEditable(SupervisorIdea idea, User currentUser);
boolean authorParticipatingOnIdea(User user);
Pair<Boolean, String> validateIdeaAcceptance(SupervisorIdea idea, User loggedInUser, SortedSet<Student> students); Pair<Boolean, String> validateIdeaAcceptance(SupervisorIdea idea, User loggedInUser, SortedSet<Student> students);
Pair<Boolean, String> validatePartnerAcceptance(User loggedInUser); Pair<Boolean, String> validatePartnerAcceptance(User loggedInUser);