Lag till en användarinställnings-dialog, en klass att persista datan i som öppnas när sessionen skapas och gjort lite småpillande i menyn
git-svn-id: svn://svn.dsv.su.se/scipro/scipro/trunk@492 73ecded7-942e-4092-bab0-0e58ef0ee984
This commit is contained in:
parent
1040274814
commit
3bbf8bab8b
src/main
java/se/su/dsv/scipro
SciProSession.java
basepanels
MainMenuPanel.htmlMainMenuPanel.javaUserLinksPanel.htmlUserLinksPanel.javaUserSettingsPanel.htmlUserSettingsPanel.java
data
resources/META-INF
@ -20,8 +20,10 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
|
||||
import se.su.dsv.scipro.data.dao.interfaces.ProjectDao;
|
||||
import se.su.dsv.scipro.data.dao.interfaces.RoleDao;
|
||||
import se.su.dsv.scipro.data.dao.interfaces.UserDao;
|
||||
import se.su.dsv.scipro.data.dao.interfaces.UserSettingsDao;
|
||||
import se.su.dsv.scipro.data.dataobjects.Project;
|
||||
import se.su.dsv.scipro.data.dataobjects.User;
|
||||
import se.su.dsv.scipro.data.dataobjects.UserSettings;
|
||||
import se.su.dsv.scipro.security.auth.Authenticator;
|
||||
import se.su.dsv.scipro.security.auth.roles.Admin;
|
||||
import se.su.dsv.scipro.security.auth.roles.DefaultRole;
|
||||
@ -46,6 +48,8 @@ public class SciProSession extends WebSession {
|
||||
private RoleDao roleDao;
|
||||
@SpringBean
|
||||
private ProjectDao projectDao;
|
||||
@SpringBean
|
||||
private UserSettingsDao userSettingsDao;
|
||||
|
||||
private List<Role> roles = new ArrayList<Role>();
|
||||
private User user = null;
|
||||
@ -175,6 +179,19 @@ public class SciProSession extends WebSession {
|
||||
if(roles.isEmpty()){
|
||||
roles.add(new DefaultRole());
|
||||
}
|
||||
/*
|
||||
* Set active project from users settings
|
||||
*/
|
||||
UserSettings userSettings = userSettingsDao.getUserSettings(user);
|
||||
if(userSettings != null)
|
||||
activeProject = userSettings.getActiveProject();
|
||||
else {
|
||||
userSettings = new UserSettings(user);
|
||||
}
|
||||
/*
|
||||
* With this userSettings.created() will return a users first login date and userSettings.modified() will return last login
|
||||
*/
|
||||
userSettings = userSettingsDao.save(userSettings);
|
||||
|
||||
Logger logger = Logger.getLogger("Application");
|
||||
logger.log(Level.INFO, "User: "+getLoggedInIdentity()+ " logged in as: "+user.getFirstName()+" "+user.getLastName()+" "+user.getUserNames());
|
||||
@ -183,7 +200,7 @@ public class SciProSession extends WebSession {
|
||||
e.printStackTrace();
|
||||
} catch (LoginException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -51,9 +51,8 @@
|
||||
<ul id="nav-list">
|
||||
<li class="nav-list-item"><span class="menu-item"><a href="#" wicket:id="homePage">Home</a></span></li>
|
||||
<li class="nav-list-item"><span class="menu-item"><a href="#">Messages</a></span></li>
|
||||
<li class="parent nav-list-item" id="project-menu-item"><span class="menu-item"><a href="#">Project</a><img class="nav-arrow" src="images/site_nav_arrow.png" /></span>
|
||||
<li class="parent nav-list-item" id="project-menu-item"><span class="menu-item"><a href="#" wicket:id="projectStartPage">Project</a><img class="nav-arrow" src="images/site_nav_arrow.png" /></span>
|
||||
<div id="project-sub" class="submenu rounded-bl rounded-br">
|
||||
<a href="#" wicket:id="projectTestPage">Project Home</a>
|
||||
<a href="#">Message Board</a>
|
||||
<a href="#">Scheduling</a>
|
||||
<a href="#">Bookmarks</a>
|
||||
|
@ -15,7 +15,7 @@ public class MainMenuPanel extends Panel {
|
||||
public MainMenuPanel(String id, Class<? extends Page> containerClass) {
|
||||
super(id);
|
||||
add(getMenuLink("homePage", SciProApplication.get().getHomePage(), containerClass));
|
||||
add(getMenuLink("projectTestPage", ProjectStartPage.class, containerClass));
|
||||
add(getMenuLink("projectStartPage", ProjectStartPage.class, containerClass));
|
||||
UserLinksPanel userLinksPanel = new UserLinksPanel("userLinksPanel");
|
||||
add(userLinksPanel);
|
||||
}
|
||||
@ -23,7 +23,7 @@ public class MainMenuPanel extends Panel {
|
||||
private BookmarkablePageLink<Void> getMenuLink(String id, final Class<? extends Page> targetPageClass, final Class<? extends Page> containerClass){
|
||||
BookmarkablePageLink<Void> result = new BookmarkablePageLink<Void>(id, targetPageClass);
|
||||
result.setOutputMarkupId(true);
|
||||
if( (targetPageClass.getSuperclass().isAssignableFrom(containerClass) && targetPageClass.getSuperclass() != MenuPage.class) || targetPageClass == containerClass){
|
||||
if(targetPageClass == containerClass || (targetPageClass.getSuperclass().isAssignableFrom(containerClass) && targetPageClass.getSuperclass() != MenuPage.class) ){
|
||||
result.setMarkupId("current");
|
||||
}
|
||||
return result;
|
||||
|
@ -2,7 +2,12 @@
|
||||
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
|
||||
<body>
|
||||
<wicket:panel>
|
||||
<p>Logged in as: <span wicket:id="loggedInAs"></span> <a href=# wicket:id="systemSettingsLink">[S]</a> | <a href=# wicket:id="logoutLink">Logout</a></p>
|
||||
<p>Logged in as: <span wicket:id="loggedInAs"></span> <a href=# wicket:id="userSettingsLink"><img src="images/icons/system-settings_16x16.png" alt="User Settings"></img></a>
|
||||
<a href=# wicket:id="systemSettingsLink"> [S]</a> | <a href=# wicket:id="logoutLink">Logout</a></p>
|
||||
|
||||
<div wicket:id="dialog">
|
||||
<div wicket:id="dialogContent"></div>
|
||||
</div>
|
||||
</wicket:panel>
|
||||
</body>
|
||||
</html>
|
@ -1,8 +1,12 @@
|
||||
package se.su.dsv.scipro.basepanels;
|
||||
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.ajax.markup.html.AjaxLink;
|
||||
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.Panel;
|
||||
import org.odlabs.wiquery.ui.dialog.Dialog;
|
||||
|
||||
import se.su.dsv.scipro.SciProSession;
|
||||
import se.su.dsv.scipro.basepages.SystemSettingsPage;
|
||||
@ -11,6 +15,8 @@ import se.su.dsv.scipro.loginlogout.pages.LogoutPage;
|
||||
public class UserLinksPanel extends Panel {
|
||||
|
||||
private static final long serialVersionUID = 4874973667648883012L;
|
||||
|
||||
private Dialog dialog;
|
||||
|
||||
public UserLinksPanel(String id) {
|
||||
super(id);
|
||||
@ -18,6 +24,26 @@ public class UserLinksPanel extends Panel {
|
||||
add(new Label("loggedInAs", SciProSession.get().getUser() != null ? SciProSession.get().getUser().toString() : "ERROR: NO USER!"));
|
||||
add(new BookmarkablePageLink<Void>("logoutLink", LogoutPage.class));
|
||||
|
||||
dialog = new Dialog("dialog");
|
||||
dialog.setModal(true);
|
||||
dialog.setAutoOpen(false);
|
||||
dialog.add(new EmptyPanel("dialogContent"));
|
||||
dialog.setWidth(500);
|
||||
dialog.setHeight(500);
|
||||
add(dialog);
|
||||
|
||||
add(new AjaxLink<Void>("userSettingsLink"){
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public void onClick(AjaxRequestTarget target) {
|
||||
dialog.replace(new UserSettingsPanel("dialogContent"));
|
||||
target.addComponent(dialog);
|
||||
dialog.setTitle("User settings");
|
||||
dialog.open(target);
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
* Because of the annotation to the SystemSettingsPage class this link won't be visible for users without sysadmin role
|
||||
*/
|
||||
|
@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
|
||||
<body>
|
||||
<wicket:panel>
|
||||
<form wicket:id="userSettingsForm">
|
||||
<label for="activeProject">Active project</label>
|
||||
<select name="Active project" wicket:id="activeProject" id="activeProject"></select>
|
||||
</form>
|
||||
</wicket:panel>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,90 @@
|
||||
package se.su.dsv.scipro.basepanels;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
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.panel.Panel;
|
||||
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;
|
||||
/**
|
||||
*
|
||||
* @author Martin Peters - mpeters@dsv.su.se
|
||||
*
|
||||
*/
|
||||
public class UserSettingsPanel extends Panel {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@SpringBean
|
||||
private ProjectDao projectDao;
|
||||
@SpringBean
|
||||
private UserSettingsDao userSettingsDao;
|
||||
|
||||
public UserSettingsPanel(String id) {
|
||||
super(id);
|
||||
|
||||
add(new UserSettingsForm("userSettingsForm"));
|
||||
}
|
||||
|
||||
private class UserSettingsForm extends Form<Void> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private Project activeProject;
|
||||
|
||||
public UserSettingsForm(String id) {
|
||||
super(id);
|
||||
activeProject = SciProSession.get().getActiveProject();
|
||||
|
||||
List<Project> userProjects = new ArrayList<Project>();
|
||||
List<Project> existingProjects = projectDao.getProjectsByParticipant(SciProSession.get().getUser(), null);
|
||||
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 = 1L;
|
||||
|
||||
protected void onUpdate(AjaxRequestTarget target) {
|
||||
UserSettings userSettings = userSettingsDao.getUserSettings(SciProSession.get().getUser());
|
||||
userSettings.setActiveProject(activeProject);
|
||||
userSettings = userSettingsDao.save(userSettings);
|
||||
SciProSession.get().setActiveProject(activeProject);
|
||||
}
|
||||
});
|
||||
projectChoice.setNullValid(true);
|
||||
add(projectChoice);
|
||||
}
|
||||
}//UserSettingsForm
|
||||
|
||||
private static class ProjectChoiceRenderer implements IChoiceRenderer<Project> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Object getDisplayValue(Project project) {
|
||||
String result = "Title: \"";
|
||||
String title = project.getTitle();
|
||||
final int maxLength = 30;
|
||||
if(title.length() > maxLength)
|
||||
title = title.substring(0, maxLength)+".. ";
|
||||
result = result + title + "\" [" + project.getProjectStatus() + "]";
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdValue(Project object, int index) {
|
||||
return object.getId().toString();
|
||||
}
|
||||
|
||||
}//ProjectChoiceRenderer
|
||||
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package se.su.dsv.scipro.data.dao.interfaces;
|
||||
|
||||
import se.su.dsv.scipro.data.dataobjects.User;
|
||||
import se.su.dsv.scipro.data.dataobjects.UserSettings;
|
||||
|
||||
public interface UserSettingsDao extends Dao<UserSettings>{
|
||||
|
||||
UserSettings getUserSettings(User user);
|
||||
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package se.su.dsv.scipro.data.dao.jpa;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.NoResultException;
|
||||
import javax.persistence.PersistenceException;
|
||||
import javax.persistence.TypedQuery;
|
||||
|
||||
import org.hibernate.ejb.QueryHints;
|
||||
import org.springframework.orm.jpa.JpaCallback;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import se.su.dsv.scipro.data.dao.interfaces.UserSettingsDao;
|
||||
import se.su.dsv.scipro.data.dataobjects.User;
|
||||
import se.su.dsv.scipro.data.dataobjects.UserSettings;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Martin Peters - mpeters@dsv.su.se
|
||||
*
|
||||
*/
|
||||
@Repository("userSettingsDao")
|
||||
public class UserSettingsDaoJPAImp extends AbstractDaoJPAImp<UserSettings> implements UserSettingsDao{
|
||||
|
||||
public UserSettingsDaoJPAImp() {
|
||||
super(UserSettings.class);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public UserSettings getUserSettings(final User user){
|
||||
return getJpaTemplate().execute(new JpaCallback<UserSettings>() {
|
||||
public UserSettings doInJpa(EntityManager em)
|
||||
throws PersistenceException {
|
||||
TypedQuery<UserSettings> query = em.createQuery("select us FROM UserSettings us, User u WHERE u = :user and us.user = u", UserSettings.class);
|
||||
query.setParameter("user", user);
|
||||
query.setHint(QueryHints.HINT_CACHEABLE, "true");
|
||||
try{
|
||||
return query.getSingleResult();
|
||||
} catch (NoResultException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package se.su.dsv.scipro.data.dataobjects;
|
||||
|
||||
import javax.persistence.Cacheable;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.OneToOne;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
/**
|
||||
*
|
||||
* @author Martin Peters - mpeters@dsv.su.se
|
||||
*
|
||||
*/
|
||||
@Entity
|
||||
@Table(name="user_settings")
|
||||
@Cacheable(true)
|
||||
@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //Hibernate specific
|
||||
public class UserSettings extends DomainObject {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private Long id;
|
||||
|
||||
@OneToOne(optional=false)
|
||||
private User user;
|
||||
|
||||
@ManyToOne(optional=true)
|
||||
private Project activeProject = null;
|
||||
|
||||
public UserSettings() {}
|
||||
|
||||
public UserSettings(User user){
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public User getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public void setUser(User user) {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
public Project getActiveProject() {
|
||||
return activeProject;
|
||||
}
|
||||
|
||||
public void setActiveProject(Project activeProject) {
|
||||
this.activeProject = activeProject;
|
||||
}
|
||||
|
||||
}
|
@ -59,6 +59,7 @@
|
||||
<class>se.su.dsv.scipro.data.dataobjects.LinkResource</class>
|
||||
<class>se.su.dsv.scipro.data.dataobjects.EmbedResource</class>
|
||||
<class>se.su.dsv.scipro.data.dataobjects.FileResource</class>
|
||||
<class>se.su.dsv.scipro.data.dataobjects.UserSettings</class>
|
||||
|
||||
<properties>
|
||||
|
||||
@ -148,6 +149,7 @@
|
||||
<class>se.su.dsv.scipro.data.dataobjects.LinkResource</class>
|
||||
<class>se.su.dsv.scipro.data.dataobjects.EmbedResource</class>
|
||||
<class>se.su.dsv.scipro.data.dataobjects.FileResource</class>
|
||||
<class>se.su.dsv.scipro.data.dataobjects.UserSettings</class>
|
||||
|
||||
<properties>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user