We should open the user settings from the menu instead from the cog wheel icon.

This commit is contained in:
Tom Vahlman 2012-03-27 17:03:35 +02:00
parent 54d8982c19
commit a5097387fb
7 changed files with 252 additions and 28 deletions

@ -1,28 +1,30 @@
package se.su.dsv.scipro.basepanels;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Page;
import se.su.dsv.scipro.HomePage;
import se.su.dsv.scipro.admin.pages.AdminStartPage;
import se.su.dsv.scipro.project.pages.ProjectStartPage;
import se.su.dsv.scipro.supervisor.pages.SupervisorStartPage;
public class MainMenuPanel extends AbstractBaseMenuPanel {
private static final long serialVersionUID = 3738086567246191811L;
public MainMenuPanel(String id, Class<? extends Page> containerClass) {
super(id,HomePage.class,containerClass);
}
@Override
protected List<MenuItem> getItemList(){
List<MenuItem> list = new ArrayList<MenuItem>();
list.add(new MenuItem(ProjectStartPage.MAIN_MENU_LABEL,ProjectStartPage.class));
list.add(new MenuItem(SupervisorStartPage.MAIN_MENU_LABEL,SupervisorStartPage.class));
list.add(new MenuItem(AdminStartPage.MAIN_MENU_LABEL,AdminStartPage.class));
return list;
}
}
package se.su.dsv.scipro.basepanels;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Page;
import se.su.dsv.scipro.HomePage;
import se.su.dsv.scipro.admin.pages.AdminStartPage;
import se.su.dsv.scipro.project.pages.ProjectStartPage;
import se.su.dsv.scipro.settings.pages.SettingsStartPage;
import se.su.dsv.scipro.supervisor.pages.SupervisorStartPage;
public class MainMenuPanel extends AbstractBaseMenuPanel {
private static final long serialVersionUID = 3738086567246191811L;
public MainMenuPanel(String id, Class<? extends Page> containerClass) {
super(id,HomePage.class,containerClass);
}
@Override
protected List<MenuItem> getItemList(){
List<MenuItem> list = new ArrayList<MenuItem>();
list.add(new MenuItem(ProjectStartPage.MAIN_MENU_LABEL,ProjectStartPage.class));
list.add(new MenuItem(SupervisorStartPage.MAIN_MENU_LABEL,SupervisorStartPage.class));
list.add(new MenuItem(AdminStartPage.MAIN_MENU_LABEL,AdminStartPage.class));
list.add(new MenuItem(SettingsStartPage.MAIN_MENU_LABEL, SettingsStartPage.class));
return list;
}
}

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:extend>
<div class="prepend-top span-22 last"><wicket:child /></div>
</wicket:extend>
</body>
</html>

@ -0,0 +1,14 @@
package se.su.dsv.scipro.settings.pages;
import org.apache.wicket.PageParameters;
import se.su.dsv.scipro.basepages.MenuPage;
public abstract class AbstractSettingsPage extends MenuPage {
private static final long serialVersionUID = 4557462220617410755L;
public AbstractSettingsPage(final PageParameters pp){
super(pp);
}
}

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:extend>
<div wicket:id="dialogContent"></div>
</wicket:extend>
</body>
</html>

@ -0,0 +1,15 @@
package se.su.dsv.scipro.settings.pages;
import org.apache.wicket.PageParameters;
import se.su.dsv.scipro.settings.panels.UserSettingsPanel;
public class SettingsStartPage extends AbstractSettingsPage {
public static final String MAIN_MENU_LABEL = "Settings";
private static final long serialVersionUID = -1013278654296902947L;
public SettingsStartPage(final PageParameters pp){
super(pp);
add(new UserSettingsPanel("dialogContent"));
}
}

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<form wicket:id="userSettingsForm">
<div class="span-10 last">
<div class="span-10 last append-bottom prepend-top">
<wicket:enclosure child="activeProject">
<label for="activeProject">Selected project for author section</label> <select
name="Active project" wicket:id="activeProject" id="activeProject"></select>
</wicket:enclosure>
<i><span wicket:id="noProjectLabel">No projects available..</span></i>
</div>
<div class="span-10 last append-bottom">
<div>What mail do you want mail notifications for?</div>
<div wicket:id="notificationPriority"><input type="radio" />
</div>
</div>
<div class="span-10 last">
<button type="submit" > Save changes</button>
</div>
</div>
</form>
</wicket:panel>
</body>
</html>

@ -0,0 +1,146 @@
package se.su.dsv.scipro.settings.panels;
import edu.emory.mathcs.backport.java.util.Arrays;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.data.dao.interfaces.ProjectDao;
import se.su.dsv.scipro.data.dao.interfaces.UserSettingsDao;
import se.su.dsv.scipro.data.dataobjects.Project;
import se.su.dsv.scipro.data.dataobjects.UserSettings;
import se.su.dsv.scipro.data.enums.NotificationPriority;
import se.su.dsv.scipro.data.enums.ProjectStatus;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
*
* @author Martin Peters - mpeters@dsv.su.se
*
*/
public class UserSettingsPanel extends Panel {
private static final long serialVersionUID = 7252421318647800130L;
@SpringBean
private ProjectDao projectDao;
@SpringBean
private UserSettingsDao userSettingsDao;
private UserSettings userSettings;
public UserSettingsPanel(String id) {
super(id);
UserSettings userSettings = userSettingsDao.getUserSettings(SciProSession.get().getUser());
if(userSettings == null) {
userSettings = new UserSettings(SciProSession.get().getUser());
userSettings = userSettingsDao.save(userSettings);
}
add(new UserSettingsForm(new CompoundPropertyModel<UserSettings>(userSettings)));
}
private class UserSettingsForm extends Form<UserSettings> {
private static final long serialVersionUID = 1712571332190300950L;
private final Project activeProject;
public UserSettingsForm(IModel<UserSettings> model) {
super("userSettingsForm", model);
userSettings = userSettingsDao.reLoad(getModelObject());
if (userSettings==null) {
userSettings = new UserSettings(SciProSession.get().getUser());
}
activeProject = SciProSession.get().getActiveProject();
List<Project> userProjects = new ArrayList<Project>();
List<Project> existingProjects = projectDao.getProjectsByParticipant(SciProSession.get().getUser(), null);
Iterator<Project> iterator = existingProjects.iterator();
while(iterator.hasNext()){
if (iterator.next().getProjectStatus() == ProjectStatus.INACTIVE){
iterator.remove();
}
}
userProjects.addAll(existingProjects);
DropDownChoice<Project> projectChoice = new DropDownChoice<Project>("activeProject", new PropertyModel<Project>(this, "activeProject"), userProjects);
projectChoice.setChoiceRenderer(new ProjectChoiceRenderer());
projectChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
private static final long serialVersionUID = -3669859818076789079L;
protected void onUpdate(AjaxRequestTarget target) {
if(userSettings == null) {
userSettings = new UserSettings(SciProSession.get().getUser());
}
userSettings.setActiveProject(activeProject);
}
});
add(projectChoice);
projectChoice.setVisible(!userProjects.isEmpty());
Label noProjectLabel = new Label("noProjectLabel","You are not registered as an author on any projects");
add(noProjectLabel);
noProjectLabel.setVisible(userProjects.isEmpty());
NotificationPriority[] array = NotificationPriority.values();
@SuppressWarnings("unchecked") List<NotificationPriority> notificationPriorities = new ArrayList<NotificationPriority>(Arrays.asList(array));
final RadioChoice<NotificationPriority> radioChoice = new RadioChoice<NotificationPriority>("notificationPriority", new PropertyModel<NotificationPriority>(userSettings, "notificationPriority"), notificationPriorities );
radioChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
private static final long serialVersionUID = 771831218965227566L;
protected void onUpdate(AjaxRequestTarget target) {
if(userSettings == null){
userSettings = new UserSettings(SciProSession.get().getUser());
userSettings.setNotificationPriority(NotificationPriority.LOW);
}
else {
userSettings.setNotificationPriority(radioChoice.getModelObject());
}
}
});
add(radioChoice);
}
@Override
public void onSubmit() {
SciProSession.get().setActiveProject(userSettings.getActiveProject());
userSettings = userSettingsDao.save(userSettings);
setResponsePage(this.getPage().getClass(),this.getPage().getPageParameters());
}
}
private static class ProjectChoiceRenderer implements IChoiceRenderer<Project> {
private static final long serialVersionUID = 7491455898455580110L;
@Override
public Object getDisplayValue(Project project) {
String result = "Title: \"";
String title = project.getTitle(30);
result = result + title + "\" [" + project.getProjectStatus() + "]";
return result;
}
@Override
public String getIdValue(Project object, int index) {
return object.getId().toString();
}
}
}