added cancel button to students when already confirmed idea participation. also new dialog on supervisor project idea start page to see if watson boxes are filled in. + authorized for sys admins on new idea pages to make them ready for test server

This commit is contained in:
Emil Siverhall 2012-07-25 15:01:31 +02:00
parent f82710dec5
commit ed0a4560b0
16 changed files with 144 additions and 43 deletions

@ -24,11 +24,13 @@ 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.CompleteIdeaDialogPanel;
import se.su.dsv.scipro.security.auth.Authorization;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.springdata.services.GenericService;
import se.su.dsv.scipro.springdata.services.StudentService;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
@Authorization(authorizedRoles={Roles.SYSADMIN})
public class ProjectIdeaStartPage extends AbstractProjectIdeaPage {
@SpringBean

@ -1,16 +1,11 @@
package se.su.dsv.scipro.project.panels;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.basic.EnclosureContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
@ -18,7 +13,6 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
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.IdeaParticipation;
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.reusable.AddRemoveStudentsPanel;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
@ -44,7 +38,7 @@ public class AcceptIdeaDialogPanel extends Panel {
public AcceptIdeaForm(String id, final IModel<SupervisorIdea> model, final User loggedInUser, final boolean unconfirmed) {
super(id, model);
addPartnerPanel(model, unconfirmed);
add(new ProjectIdeaDetailsPanel("ideaDetails", model, unconfirmed));
add(new ProjectIdeaDetailsPanel("ideaDetails", model, unconfirmed, false));
addUnconfirmedContainer(model, loggedInUser, unconfirmed); //Info box with accept/decline buttons
addButton(model, loggedInUser, unconfirmed);
}
@ -67,7 +61,7 @@ public class AcceptIdeaDialogPanel extends Panel {
@Override
public void onSubmit(){
ideaService.partnerDeclineIdea(model);
ideaService.declineIdea(model);
getSession().info("You have declined to be a part of the project: "+ model.getObject().getTitle());
}
};

@ -7,7 +7,8 @@
<body>
<wicket:panel>
<form wicket:id="form">
<div wicket:id="ideaDetails"></div>
<span class="right"><input type="submit" wicket:id="cancelButton" value="Cancel selection of this project"/></span>
<div wicket:id="ideaDetails"></div>
<div class="prepend-top" wicket:id="watsonDetails"></div>
<input type="submit" wicket:id="saveButton" value="Save"/>
</form>

@ -28,9 +28,10 @@ public class CompleteIdeaDialogPanel extends Panel {
public CompleteIdeaForm(String id, final IModel<SupervisorIdea> model) {
super(id, model);
add(new ProjectIdeaDetailsPanel("ideaDetails", model, true));
add(new ProjectIdeaDetailsPanel("ideaDetails", model, true, false));
add(new ProjectIdeaWatsonPanel("watsonDetails", model));
addSaveButton(model);
addCancelButton(model);
}
private void addSaveButton(final IModel<SupervisorIdea> model) {
@ -48,8 +49,21 @@ public class CompleteIdeaDialogPanel extends Panel {
add(button);
}
private void addCancelButton(final IModel<SupervisorIdea> model) {
Button button = new Button("cancelButton") {
private static final long serialVersionUID = -7066867035489876553L;
@Override
public void onSubmit() {
ideaService.declineIdea(model);
getSession().info("Project idea participation cancelled");
}
};
button.add(new JavascriptEventConfirmation("onClick", "Are you sure you want to cancel this selection?"));
add(button);
}
}
}

@ -30,6 +30,17 @@
<b>Authors:</b><br />
<span wicket:id="authorList"><span wicket:id="authorName"></span><br /></span>
</div>
<br />
<div class="append-bottom" wicket:id="watsonEnclosure">
<b>What?</b><br />
<span wicket:id="what"></span><br /><br />
<b>Why?</b><br />
<span wicket:id="why"></span><br /><br />
<b>Theoretically how?</b><br />
<span wicket:id="theory"></span><br /><br />
<b>Practically how?</b><br />
<span wicket:id="practical"></span><br />
</div>
</wicket:panel>
</body>
</html>

@ -26,7 +26,7 @@ public class ProjectIdeaDetailsPanel extends Panel {
@SpringBean
private SupervisorService supervisorService;
public ProjectIdeaDetailsPanel(String id, IModel<SupervisorIdea> model, boolean showAuthors) {
public ProjectIdeaDetailsPanel(String id, IModel<SupervisorIdea> model, boolean showAuthors, boolean showWatsons) {
super(id, model);
Employee ideaCreator = supervisorService.findOne(model.getObject().getCreator().getId());
add(new Label("level", model.getObject().getProjectClass().getName()));
@ -36,6 +36,7 @@ public class ProjectIdeaDetailsPanel extends Panel {
addResearchAreas(ideaCreator);
addKeywords(model);
addAuthorsEnclosure(model, showAuthors); //List of authors so the partner knows who to write with before accepting
addWatsonInfo(model, showWatsons); //Watson info when viewing in supervisor view
}
private void addResearchAreas(Employee ideaCreator) {
@ -80,9 +81,24 @@ public class ProjectIdeaDetailsPanel extends Panel {
}
};
authorList.setVisible(showAuthors);
EnclosureContainer authorEnc = new EnclosureContainer("authorsEnclosure", authorList);
authorEnc.add(authorList);
add(authorEnc);
EnclosureContainer authorEnclosure = new EnclosureContainer("authorsEnclosure", authorList);
authorEnclosure.add(authorList);
add(authorEnclosure);
}
private void addWatsonInfo(IModel<SupervisorIdea> model, boolean showWatsons) {
String whatString = model.getObject().getWatson().getWhat().equals("")?"Waiting for student to fill in":model.getObject().getWatson().getWhat();
String whyString = model.getObject().getWatson().getWhy().equals("")?"Waiting for student to fill in":model.getObject().getWatson().getWhy();
String theoryString = model.getObject().getWatson().getTheoryHow().equals("")?"Waiting for student to fill in":model.getObject().getWatson().getTheoryHow();
String pracString = model.getObject().getWatson().getPracticalHow().equals("")?"Waiting for student to fill in":model.getObject().getWatson().getPracticalHow();
Label what = new Label("what", whatString);
what.setVisible(showWatsons);
EnclosureContainer watsonEnclosure = new EnclosureContainer("watsonEnclosure", what);
watsonEnclosure.add(new Label("why", whyString));
watsonEnclosure.add(new Label("theory", theoryString));
watsonEnclosure.add(new Label("practical", pracString));
watsonEnclosure.add(what);
add(watsonEnclosure);
}
}

@ -9,6 +9,7 @@ import se.su.dsv.scipro.components.AbstractMenuPanel;
import se.su.dsv.scipro.components.menuhighlighting.MenuHighlightAuthorMyProjects;
import se.su.dsv.scipro.components.menuhighlighting.MenuHighlightProjectIdeas;
import se.su.dsv.scipro.project.pages.FinalSeminarProjectListPage;
import se.su.dsv.scipro.project.pages.MyProjectIdeasPage;
import se.su.dsv.scipro.project.pages.ProjectIdeaStartPage;
import se.su.dsv.scipro.project.pages.ProjectPage;
import se.su.dsv.scipro.project.pages.ProjectPartnerPage;
@ -32,7 +33,7 @@ public class ProjectTabMenuPanel extends AbstractMenuPanel {
List<MenuItem> itemList = new ArrayList<MenuItem>();
itemList.add(new MenuItem("My project(s)", ProjectStartPage.class, MenuHighlightAuthorMyProjects.class));
itemList.add(new MenuItem("Project ideas", ProjectIdeaStartPage.class, MenuHighlightProjectIdeas.class));
itemList.add(new MenuItem("Project ideas", MyProjectIdeasPage.class, MenuHighlightProjectIdeas.class));
itemList.add(new MenuItem("Project Partner", ProjectPartnerPage.class));
itemList.add(new MenuItem("All Final Seminars", FinalSeminarProjectListPage.class));

@ -54,7 +54,7 @@ public class ProjectsOverviewPanel extends Panel {
setResponsePage(ProjectDetailsPage.class, pp);
}
if(projects.size()==0){
setResponsePage(ProjectIdeaStartPage.class);
setResponsePage(MyProjectIdeasPage.class);
}
}

@ -1,13 +1,10 @@
package se.su.dsv.scipro.springdata.serviceimpls;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.SortedSet;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.wicket.model.IModel;
import org.springframework.beans.factory.annotation.Autowired;
@ -25,6 +22,7 @@ import se.su.dsv.scipro.match.dataobject.Idea.IdeaStatus;
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.springdata.repos.SupervisorIdeaRepo;
import se.su.dsv.scipro.springdata.services.StudentService;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
@ -41,8 +39,6 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
private SupervisorIdeaRepo supervisorIdeaRepo;
@Resource
private StudentService studentService;
@PersistenceContext
private EntityManager em;
private int MAX_PARTNERS = 1;
@ -132,12 +128,16 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
@Override
@Transactional ( readOnly = false )
public void partnerDeclineIdea(IModel<SupervisorIdea> model) {
public void declineIdea(IModel<SupervisorIdea> model) {
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
//Remove participations
for (IdeaParticipation ip : idea.getIdeaParticipations()) {
Student s = ip.getStudent();
s.removeIdeaParticipation(ip);
}
}
//Erase watson boxes
idea.setWatson(new Watson());
//Change status back to waiting
idea.setIdeaStatus(IdeaStatus.WAITING);
}
@ -146,10 +146,14 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
@Transactional ( readOnly = false )
public void updateIdea(IModel<SupervisorIdea> model) {
SupervisorIdea idea = supervisorIdeaRepo.findOne(model.getObject().getId());
idea.getWatson().setWhat(model.getObject().getWatson().getWhat());
idea.getWatson().setWhy(model.getObject().getWatson().getWhy());
idea.getWatson().setTheoryHow(model.getObject().getWatson().getTheoryHow());
idea.getWatson().setPracticalHow(model.getObject().getWatson().getPracticalHow());
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());
}
@Override
@ -238,11 +242,4 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
return supervisorIdeaRepo.count(byStatus(status));
}
private List<SupervisorIdea> constructList(Iterable<SupervisorIdea> ideas) {
List<SupervisorIdea> list = new ArrayList<SupervisorIdea>();
for (SupervisorIdea idea : ideas) {
list.add(idea);
}
return list;
}
}

@ -28,7 +28,7 @@ public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Lo
void saveSupervisorCreatedIdea(IModel<SupervisorIdea> model, Employee creator, SortedSet<Student> students);
void deleteWaitingIdea(IModel<SupervisorIdea> model);
void partnerAcceptIdea(IModel<SupervisorIdea> model, User loggedInUser);
void partnerDeclineIdea(IModel<SupervisorIdea> model);
void declineIdea(IModel<SupervisorIdea> model);
void updateIdea(IModel<SupervisorIdea> model);
boolean acceptIdea(IModel<SupervisorIdea> model, User mainAuthor, SortedSet<Student> sortedSet);

@ -5,8 +5,11 @@ 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;
import se.su.dsv.scipro.supervisor.panels.SupervisorProjectIdeaOverviewPanel;
@Authorization(authorizedRoles={Roles.SYSADMIN})
public class SupervisorProjectIdeaStartPage extends AbstractSupervisorProjectIdeaPage {
private FeedbackPanel feedbackPanel;

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
</head>
<body>
<wicket:panel>
<form wicket:id="form">
<div wicket:id="ideaDetails"></div>
</form>
</wicket:panel>
</body>
</html>

@ -0,0 +1,30 @@
package se.su.dsv.scipro.supervisor.panels;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.project.panels.ProjectIdeaDetailsPanel;
public class SupervisorIdeaDetailsPanel extends Panel {
public SupervisorIdeaDetailsPanel(String id, IModel<SupervisorIdea> model) {
super(id, model);
add(new SupervisorIdeaDetailsForm("form", model));
}
private static final long serialVersionUID = 29731924490786784L;
private class SupervisorIdeaDetailsForm extends Form<SupervisorIdea> {
private static final long serialVersionUID = -9118352523380756043L;
public SupervisorIdeaDetailsForm(String id, final IModel<SupervisorIdea> model) {
super(id, model);
add(new ProjectIdeaDetailsPanel("ideaDetails", model, true, true));
}
}
}

@ -5,6 +5,9 @@
</head>
<body>
<wicket:panel>
<div wicket:id="dialog">
<div wicket:id="dialogPanel"></div>
</div>
<form wicket:id="form">
<div class="span-5" wicket:id="levelFilter"></div>
<div class="span-5">

@ -8,10 +8,12 @@ import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.EmptyPanel;
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.odlabs.wiquery.ui.dialog.Dialog;
import org.springframework.data.domain.PageRequest;
import se.su.dsv.scipro.data.dataobjects.Employee;
@ -22,6 +24,7 @@ import se.su.dsv.scipro.datatables.project.GenericDataPanel;
import se.su.dsv.scipro.icons.ImageIcon;
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.match.panel.FilterFormProjectClass;
import se.su.dsv.scipro.project.panels.AcceptIdeaDialogPanel;
import se.su.dsv.scipro.springdata.services.GenericService;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
import se.su.dsv.scipro.springdata.services.SupervisorService;
@ -35,15 +38,27 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
private SupervisorService supervisorService;
private GenericDataPanel<SupervisorIdea> genericDataPanel;
private SupervisorIdeaService.FilterParams params;
private Dialog dialog;
private static final long serialVersionUID = -9010467449322120267L;
public SupervisorProjectIdeaOverviewPanel(String id, final User supervisor) {
super(id);
addDialog();
addDataTable(supervisor);
add(new FilterForm("form", supervisor));
}
private void addDialog() {
dialog = new Dialog("dialog");
dialog.setModal(true);
dialog.setAutoOpen(false);
dialog.setWidth(500);
dialog.setHeight(600);
dialog.add(new EmptyPanel("dialogPanel"));
add(dialog);
}
private void addDataTable(final User supervisor) {
add(genericDataPanel = new GenericDataPanel<SupervisorIdea>("dataPanel") {
@ -73,12 +88,12 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
private static final long serialVersionUID = 4667741924987868274L;
@Override
protected void onClick(IModel<SupervisorIdea> clicked,
protected void onClick(IModel<SupervisorIdea> ideaModel,
AjaxRequestTarget target) {
PageParameters pp = new PageParameters();
pp.put("idea", clicked.getObject().getId());
pp.put("readOnly", true);
setResponsePage(SupervisorIdeaSubmissionPage.class, pp);
dialog.replace(new SupervisorIdeaDetailsPanel("dialogPanel", ideaModel));
dialog.setTitle("Selected supervisor project idea");
target.addComponent(dialog);
dialog.open(target);
}
};
columns[3] = new PropertyColumn<SupervisorIdea>(Model.of("Creator"), "creator.user.lastName", "creator");

@ -31,7 +31,7 @@ public class SupervisorTabMenuPanel extends AbstractMenuPanel {
List<MenuItem> items = new ArrayList<MenuItem>();
items.add(new MenuItem("My projects", SupervisorStartPage.class, MenuHighlightSupervisorMyProjects.class));
items.add(new MenuItem("Project ideas", SupervisorProjectIdeaStartPage.class, MenuHighlightSupervisorProjectIdea.class));
items.add(new MenuItem("Project ideas", SupervisorMyProjectIdeasPage.class, MenuHighlightSupervisorProjectIdea.class));
//items.add(new MenuItem("Unmatched project ideas", SupervisorInterestPage.class));
items.add(new MenuItem("Activity plan templates", SupervisorScheduleTemplatesPage.class));
items.add(new MenuItem("Peer portal", SupervisorPeerListPage.class));