From a74c27f1ebad18b7c72ed0860544782ad345e6b0 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Fri, 3 Aug 2012 10:09:33 +0200 Subject: [PATCH 1/3] added column with course start date to datatable on supervisor - my matched student ideas page --- .../scipro/supervisor/pages/SupervisorMyProjectIdeasPage.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMyProjectIdeasPage.java b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMyProjectIdeasPage.java index da242dd632..9f2216cb45 100644 --- a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMyProjectIdeasPage.java +++ b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMyProjectIdeasPage.java @@ -69,7 +69,7 @@ public class SupervisorMyProjectIdeasPage extends AbstractSupervisorProjectIdeaP @Override public IColumn[] getColumns() { - IColumn[] columns = new IColumn[3]; + IColumn[] columns = new IColumn[4]; columns[0] = new PropertyColumn<ProjectIdea>(Model.of("Level"), "projectClass", "projectClass"); // columns[1] = new PropertyColumn<ProjectIdea>(Model.of("Title"), "title", "title"); @@ -86,6 +86,7 @@ public class SupervisorMyProjectIdeasPage extends AbstractSupervisorProjectIdeaP }; columns[2] = new DateColumn<ProjectIdea>(Model.of("Received"), "match.dateCreated", "match.dateCreated"); + columns[3] = new DateColumn<ProjectIdea>(Model.of("Start date"),"applicationPeriod.courseStartDate", "applicationPeriod.courseStartDate"); return columns; } From 461120728d13dfd0e6e0a3992481ab542d30dc45 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Fri, 3 Aug 2012 10:30:40 +0200 Subject: [PATCH 2/3] removed duplicated feedback panels and some code cleanup --- .../pages/SupervisorIdeaSubmissionPage.java | 4 +--- .../pages/SupervisorProjectIdeaStartPage.html | 1 - .../pages/SupervisorProjectIdeaStartPage.java | 8 +------- .../supervisor/panels/SupervisorEditIdeaPanel.java | 13 ++++--------- 4 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorIdeaSubmissionPage.java b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorIdeaSubmissionPage.java index 64d9b30dbf..734fd656ea 100644 --- a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorIdeaSubmissionPage.java +++ b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorIdeaSubmissionPage.java @@ -19,15 +19,13 @@ public class SupervisorIdeaSubmissionPage extends super(pp); Long ideaId = pp.getAsLong("idea"); SupervisorIdea idea; - - boolean readOnly = pp.getAsBoolean("readOnly"); if(ideaId!=null) idea = ideaService.findOne(ideaId); else { idea = new SupervisorIdea(); } - add(new SupervisorEditIdeaPanel("editPanel", getUser(), readOnly, new Model<SupervisorIdea>(idea))); + add(new SupervisorEditIdeaPanel("editPanel", getUser(), new Model<SupervisorIdea>(idea))); } diff --git a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.html b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.html index fe380ba740..b15a094829 100644 --- a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.html +++ b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.html @@ -4,7 +4,6 @@ <body> <wicket:extend> <div class="span-24 last"> - <div wicket:id="feedback"></div> <div wicket:id="availabilityPanel" class="append-bottom"></div> <button wicket:id="ideaLink">Create new project idea</button> <div class="prepend-top" wicket:id="ideaPanel"></div> diff --git a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.java b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.java index 5a6514f487..25ce76a4db 100644 --- a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.java +++ b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.java @@ -3,7 +3,6 @@ package se.su.dsv.scipro.supervisor.pages; import org.apache.wicket.PageParameters; import org.apache.wicket.markup.html.link.BookmarkablePageLink; -import org.apache.wicket.markup.html.panel.FeedbackPanel; import se.su.dsv.scipro.security.auth.Authorization; import se.su.dsv.scipro.security.auth.roles.Roles; @@ -13,12 +12,9 @@ import se.su.dsv.scipro.supervisor.panels.SupervisorProjectIdeaOverviewPanel; @Authorization(authorizedRoles={Roles.SYSADMIN}) public class SupervisorProjectIdeaStartPage extends AbstractSupervisorProjectIdeaPage { - private FeedbackPanel feedbackPanel; public SupervisorProjectIdeaStartPage(PageParameters pp) { super(pp); - add(feedbackPanel = new FeedbackPanel("feedback")); - feedbackPanel.setOutputMarkupId(true); add(new SupervisorAvailabilityPanel("availabilityPanel", getUser())); add(new SupervisorProjectIdeaOverviewPanel("ideaPanel", getUser())); addSubmissionPageLink(); @@ -26,9 +22,7 @@ public class SupervisorProjectIdeaStartPage extends AbstractSupervisorProjectIde } private void addSubmissionPageLink() { - PageParameters pp = new PageParameters(); - pp.put("readOnly", false); - BookmarkablePageLink<Void> ideaLink = new BookmarkablePageLink<Void>("ideaLink", SupervisorIdeaSubmissionPage.class, pp); + BookmarkablePageLink<Void> ideaLink = new BookmarkablePageLink<Void>("ideaLink", SupervisorIdeaSubmissionPage.class); add(ideaLink); } diff --git a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java index 0f1924f815..82a42898c8 100644 --- a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java +++ b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java @@ -58,9 +58,9 @@ public class SupervisorEditIdeaPanel extends Panel { @SpringBean private SupervisorService supervisorService; - public SupervisorEditIdeaPanel(String id, User currentUser, boolean readOnly,IModel<SupervisorIdea> model) { + public SupervisorEditIdeaPanel(String id, User currentUser, IModel<SupervisorIdea> model) { super(id, model); - add(new IdeaForm("form", model, currentUser, readOnly).setEnabled(!readOnly)); + add(new IdeaForm("form", model, currentUser)); } private class IdeaForm extends Form<SupervisorIdea> { @@ -76,7 +76,7 @@ public class SupervisorEditIdeaPanel extends Panel { private KeywordContainer regularKwc; private FeedbackPanel feedbackPanel; - public IdeaForm(String id, final IModel<SupervisorIdea> model, final User currentUser, final boolean readOnly) { + public IdeaForm(String id, final IModel<SupervisorIdea> model, final User currentUser) { super(id, model); @@ -97,13 +97,8 @@ public class SupervisorEditIdeaPanel extends Panel { descriptionField.add(StringValidator.minimumLength(10)); // Description needs to be at least 10 characters final Employee ideaCreator = supervisorService.findByUser(currentUser); - Employee ideaSupervisor = model.getObject().getCreator(); - Set<ResearchArea> areas; - if(readOnly) - areas = ideaSupervisor.getActiveResearchAreas(); - else - areas = ideaCreator.getActiveResearchAreas(); + Set<ResearchArea> areas = ideaCreator.getActiveResearchAreas(); ListView<ResearchArea> areaList = new ListView<ResearchArea>("researchAreas", new ArrayList<ResearchArea>(areas)) { private static final long serialVersionUID = 1745649109195334927L; From cf8c7f61e54b7351dba96c1a897b23eb8bacb5f1 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Fri, 3 Aug 2012 12:13:54 +0200 Subject: [PATCH 3/3] added some custom validation logic to supervisor idea submission to display appropriate feedback messages if number of students doesnt match specified project level --- .../SupervisorIdeaServiceImpl.java | 18 +++++++++++++++- .../services/SupervisorIdeaService.java | 1 + .../panels/SupervisorEditIdeaPanel.java | 21 +++++++++++-------- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java index 9d2a2b8eff..16623c5abc 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java @@ -54,6 +54,9 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId private transient Logger logger = Logger.getLogger(SupervisorIdeaService.class); private int MAX_PARTNERS = 1; + private int BACHELOR_STUDENTS = 2; + private int MAX_MASTER_STUDENTS = 1; + @Autowired public SupervisorIdeaServiceImpl( @@ -67,7 +70,7 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId @Transactional ( readOnly = false ) public void saveSupervisorCreatedIdea(SupervisorIdea idea, Employee creator, SortedSet<Student> students) { - if(!students.isEmpty()) { + if(!students.isEmpty()) { for(Student s : students) { s = studentService.findOne(s.getId()); //Needed for lazy loading to work. IdeaParticipation ip = new IdeaParticipation(); @@ -172,6 +175,19 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId return new Pair<Boolean, String>(true,"Validation passed"); } + @Override + public Pair<Boolean, String> validateSupervisorIdeaSubmission(SupervisorIdea idea, SortedSet<Student> students) { + if(!students.isEmpty()) { + if(idea.getProjectClass().getCode().equals(ProjectClass.BACHELOR)&&students.size()!=BACHELOR_STUDENTS){ + return new Pair<Boolean, String>(false, "Selected number of bachelor students is not allowed"); + } + if(idea.getProjectClass().getCode().equals(ProjectClass.MASTER)&&students.size()>MAX_MASTER_STUDENTS){ + return new Pair<Boolean, String>(false, "Selected number of master students is not allowed"); + } + } + return new Pair<Boolean, String>(true, "Validation passed"); + } + @Override @Transactional (readOnly = false) public void partnerAcceptIdea(SupervisorIdea idea, User loggedInUser) { diff --git a/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorIdeaService.java b/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorIdeaService.java index f91dfb3d74..0782eb2fc2 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorIdeaService.java +++ b/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorIdeaService.java @@ -46,6 +46,7 @@ public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Lo Pair<Boolean, String> validateIdeaAcceptance(SupervisorIdea idea, User loggedInUser, SortedSet<Student> students); Pair<Boolean, String> validatePartnerAcceptance(User loggedInUser); + Pair<Boolean, String> validateSupervisorIdeaSubmission(SupervisorIdea idea, SortedSet<Student> students); public static class FilterParams implements Serializable { private static final long serialVersionUID = 4981420721152104292L; diff --git a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java index 82a42898c8..f98b9a7fbd 100644 --- a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java +++ b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java @@ -35,6 +35,7 @@ import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao.TYPE; import se.su.dsv.scipro.match.dataobject.IdeaParticipation; import se.su.dsv.scipro.match.dataobject.Keyword; 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.ProjectClassService; import se.su.dsv.scipro.springdata.services.SupervisorIdeaService; @@ -147,15 +148,17 @@ public class SupervisorEditIdeaPanel extends Panel { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { - target.addComponent(feedbackPanel); - - try { - ideaService.saveSupervisorCreatedIdea(model.getObject(), ideaCreator, studentsPanel.getStudentSet()); - setResponsePage(SupervisorProjectIdeaStartPage.class); - getSession().info("Idea successfully submitted"); - } catch (Exception e) { - e.printStackTrace(); - } + Pair<Boolean, String> acceptance = ideaService.validateSupervisorIdeaSubmission(model.getObject(), studentsPanel.getStudentSet()); + if(acceptance.head){ + ideaService.saveSupervisorCreatedIdea(model.getObject(), ideaCreator, studentsPanel.getStudentSet()); + setResponsePage(SupervisorProjectIdeaStartPage.class); + getSession().info("Idea successfully submitted"); + } else { + getSession().error(acceptance.tail); + target.appendJavascript("window.scrollTo(0,0);"); + } + target.addComponent(feedbackPanel); + }