Commit aedd68af by Tuomas Riihimäki

Hups.. cdi jutut jäi addaamatta... Käyttäjälistaus lisätty CDI:n alle.

1 parent d6ca9915
......@@ -17,72 +17,72 @@ import fi.insomnia.bortal.model.User;
@LocalBean
public class UserFacade extends GenericFacade<Integer, User> {
private static final Logger logger = LoggerFactory.getLogger(UserFacade.class);
public enum UserField {
id, nick, login, firstname, lastname
}
@PersistenceContext
private EntityManager em;
public UserFacade() {
super(User.class);
}
@Override
protected EntityManager getEm() {
return em;
}
/**
* Find user by username. Username is converted to lowercase before
* searching.
*
* @param login
* @return
*/
public User findByLogin(String login) {
TypedQuery<User> q = em.createNamedQuery("User.findByLogin", User.class);
q.setParameter("login", login.toLowerCase());
return getSingleNullableResult(q);
}
private static final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname", "email" };
public List<User> searchForName(String name) {
return this.search(name, NAMEFIELDS, "login");
}
@Override
public void create(User user) {
user.setLogin(user.getLogin().toLowerCase().trim());
super.create(user);
}
@Override
public User merge(User user) {
user.setLogin(user.getLogin().toLowerCase().trim());
return super.merge(user);
}
public List<User> searchUser(int page, int pagesize, String sort, String search) {
String query = null;
if (sort == null || sort.isEmpty()) {
sort = "nick";
}
if (search != null) {
query = new StringBuilder('%').append(search).append('%').toString();
}
return this.search(page, pagesize, query, NAMEFIELDS, sort);
}
public long searchUserCount(String search) {
String query = null;
if (search != null) {
query = new StringBuilder('%').append(search).append('%').toString();
}
return this.searchCount(query, NAMEFIELDS);
}
private static final Logger logger = LoggerFactory.getLogger(UserFacade.class);
public enum UserField {
id, nick, login, firstname, lastname
}
@PersistenceContext
private EntityManager em;
public UserFacade() {
super(User.class);
}
@Override
protected EntityManager getEm() {
return em;
}
/**
* Find user by username. Username is converted to lowercase before
* searching.
*
* @param login
* @return
*/
public User findByLogin(String login) {
TypedQuery<User> q = em.createNamedQuery("User.findByLogin", User.class);
q.setParameter("login", login.toLowerCase());
return getSingleNullableResult(q);
}
private static final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname", "email" };
public List<User> searchForName(String name) {
return this.search(name, NAMEFIELDS, "login");
}
@Override
public void create(User user) {
user.setLogin(user.getLogin().toLowerCase().trim());
super.create(user);
}
@Override
public User merge(User user) {
user.setLogin(user.getLogin().toLowerCase().trim());
return super.merge(user);
}
public List<User> searchUser(int page, int pagesize, String sort, String search) {
String query = null;
if (sort == null || sort.isEmpty()) {
sort = "nick";
}
if (search != null) {
query = new StringBuilder().append("%").append(search).append('%').toString();
}
return this.search(page, pagesize, query, NAMEFIELDS, sort);
}
public long searchUserCount(String search) {
String query = null;
if (search != null) {
query = new StringBuilder().append("%").append(search).append('%').toString();
}
return this.searchCount(query, NAMEFIELDS);
}
}
<root>
<facet id="jst.jsf">
<node name="libprov">
<attribute name="provider-id" value="jsf-no-op-library-provider"/>
</node>
</facet>
</root>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools"
>
<composite:interface>
<composite:attribute name="view" required="true" type="fi.insomnia.bortal.web.cdiview.IPaginationView" />
</composite:interface>
<composite:implementation>
<div>#{i18n['pagination.results']} #{cc.attrs.view.resultcount}, #{i18n['pagination.pages']}
#{cc.attrs.view.pagecount}</div>
<div>
<h:link includeViewParams="true" value="#{i18n['pagination.firstpage']}">
<f:param name="page" value="0" />
</h:link>
|
<h:link disabled="#{cc.attrs.view.page le 0 }" includeViewParams="true" value="#{i18n['pagination.previouspage']}">
<f:param name="page" value="#{cc.attrs.view.page -1}" />
</h:link>
|
<h:link rendered="#{cc.attrs.view.page gt 1 }" includeViewParams="true" value="#{cc.attrs.view.page -1}">
<f:param name="page" value="#{cc.attrs.view.page -2}" />
</h:link>
#{(cc.attrs.view.page gt 1) ? ' | ':'' }
<h:link rendered="#{cc.attrs.view.page gt 0 }" includeViewParams="true" value="#{cc.attrs.view.page }">
<f:param name="page" value="#{cc.attrs.view.page -1}" />
</h:link>
#{(cc.attrs.view.page gt 0) ? ' | ':'' } #{cc.attrs.view.page + 1} #{(cc.attrs.view.pagecount gt (cc.attrs.view.page
+1)) ? ' | ':'' }
<h:link rendered="#{cc.attrs.view.pagecount gt (cc.attrs.view.page +1)}" includeViewParams="true"
value="#{cc.attrs.view.page+2}"
>
<f:param name="page" value="#{cc.attrs.view.page +1}" />
</h:link>
#{(cc.attrs.view.pagecount gt (cc.attrs.view.page +2)) ? ' | ':'' }
<h:link rendered="#{cc.attrs.view.pagecount gt (cc.attrs.view.page +2)}" includeViewParams="true"
value="#{cc.attrs.view.page+3}"
>
<f:param name="page" value="#{cc.attrs.view.page +2}" />
</h:link>
|
<h:link disabled="#{cc.attrs.view.pagecount le (cc.attrs.view.page +1)}" includeViewParams="true"
value="#{i18n['pagination.nextpage']}"
>
<f:param name="page" value="#{cc.attrs.view.page +1}" />
</h:link>
|
<h:link includeViewParams="true" value="#{i18n['pagination.lastpage']}">
<f:param name="page" value="#{cc.attrs.view.pagecount - 1}" />
</h:link>
</div>
</composite:implementation>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools"
>
<composite:interface>
</composite:interface>
<composite:implementation>
<h:form id="userlistform">
<h:dataTable styleClass="bordertable" id="user" value="#{userSearchView.users}" var="user">
<h:column>
<f:facet name="header">
<h:link value="ID">
<f:param name="sort" value="id" />
</h:link>
</f:facet>
<h:outputText value="#{user.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:link value="#{i18n['user.login']}">
<f:param name="sort" value="login" />
</h:link>
</f:facet>
<h:outputText value="#{user.login}" />
</h:column>
<h:column>
<f:facet name="header">
<h:link value="#{i18n['user.nick']}">
<f:param name="sort" value="nick" />
</h:link>
</f:facet>
<h:outputText value="#{user.nick}" />
</h:column>
<h:column>
<f:facet name="header">
<h:link value="#{i18n['user.firstNames']}">
<f:param name="sort" value="firstnames" />
</h:link>
</f:facet>
<h:outputText value="#{user.firstnames}" />
</h:column>
<h:column>
<f:facet name="header">
<h:link value="#{i18n['user.lastName']}">
<f:param name="sort" value="lastname" />
</h:link>
</f:facet>
<h:outputText value="#{user.lastname}" />
</h:column>
<h:column>
<f:facet name="header">
<h:link value="#{i18n['user.email']}">
<f:param name="sort" value="email" />
</h:link>
</f:facet>
<h:outputText value="#{user.email}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#i18n['user.accountBalance']" />
</f:facet>
<h:outputText value="#{user.accountBalance}">
<f:convertNumber />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.image']}" />
</f:facet>
<h:commandLink action="#{userView.showImage()}"
value="#{(empty user.currentImage)?i18n['user.noImage']:i18n['user.hasImage']}"
/>
</h:column>
<h:column>
<h:commandButton action="#{userView.edit()}" value="#{i18n['user.edit']}" />
</h:column>
<h:column>
<h:commandButton action="#{userView.shop()}" value="#{i18n['user.shop']}" />
</h:column>
</h:dataTable>
</h:form>
</composite:implementation>
</html>
body {
background-color: #C8C8C8;
font-family: Arial, Helvetica, sans-serif;
......@@ -131,7 +129,7 @@ h1,h2,h3,h4 {
border-style: solid;
border-color: #FF7200;
padding: 2px 2px 2px 10px;
margin: 0 -20px;
margin: 0 -20px 15px;
}
#lighttext {
......@@ -227,3 +225,14 @@ table.packetTable tr td {
border-color: black;
border-spacing: 0px;
}
table.bordertable td,table.bordertable th {
border-style: solid;
border-width: 1px;
border-color: #ffffff;
padding: 1px 3px;
}
table.bordertable {
border-collapse: collapse;
}
\ No newline at end of file
......@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:f="http://java.sun.com/jsf/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
......@@ -21,8 +21,9 @@
<h1>#{i18n['userlist.header']}</h1>
<h:form>
<h:inputText value="#{userSearchView.search}" />
<h:commandButton value="search" />
<h:commandButton value="#{i18n['userlist.search']}" />
</h:form>
<tools:paginationHeader view="#{userSearchView}" />
<users:list />
</ui:define>
</ui:composition>
......
......@@ -149,6 +149,14 @@ page.user.list.header=Users
page.user.list.pagegroup=user
page.user.mygroups.header=My places
page.viewexpired=frontpage
pagination.results=Results
pagination.pages=Pages
pagination.firstpage=First
pagination.previouspage=Previous
pagination.nextpage=Next
pagination.lastpage=Last
passwordChanged.body=You can now login with the new password.
passwordChanged.header=Password changed successfully.
passwordReset.hashNotFound=Password change token has expired. Please send the query again.
......@@ -245,7 +253,7 @@ role.name=Name
role.parents=Parents
role.read=(R)
role.write=(W)
shop.accountBalance=Account balance
shop.accountBalance=Balance
shop.user=Selling to
sidebar.bill.list=My bills
sidebar.bill.listAll=All bills
......@@ -297,10 +305,11 @@ user.email=Email
user.firstNames=Firstname
user.hasImage=Image
user.imagelist=Saved images
user.image=Image
user.imagesubmit=Send image
user.insertToken=Insert token
user.lastName=Lastname
user.login=Login name
user.login=Login
user.myGroups=My place reservations
user.nick=Nick
user.noAccountevents=No account events
......@@ -337,5 +346,9 @@ userview.passwordTooShort=Password has to be atleast 5 characters long!
userview.passwordsChanged=Password changed
userview.passwordsDontMatch=Passwords do not match! Please try again!
userview.userExists=Username already exists! please select another.
userlist.header=Users
userlist.search=Search
viewexpired.body=Please login again.
viewexpired.title=Login expired. Please login again.
package fi.insomnia.bortal.web.cdiview;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.enterprise.context.Conversation;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
public class GenericCDIView implements Serializable {
@Inject
private Conversation conversation;
@EJB
private UserBeanLocal userbean;
protected void beginConversation() {
if (conversation.isTransient()) {
conversation.begin();
}
}
protected boolean requireRights(Permission target, RolePermission right) {
boolean ret = userbean.hasPermission(target, right);
if (!ret) {
ConfigurableNavigationHandler navhandler = (ConfigurableNavigationHandler) FacesContext.getCurrentInstance().getApplication().getNavigationHandler();
navhandler.performNavigation("/permissionDenied");
}
return ret;
}
}
package fi.insomnia.bortal.web.cdiview;
public interface IPaginationView {
public int getPage();
public int getPagesize();
public long getResultcount();
public long getPagecount();
}
package fi.insomnia.bortal.web.cdiview;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.User;
@Named
@ConversationScoped
public class UserSearchView extends GenericCDIView implements IPaginationView {
/**
*
*/
private static final long serialVersionUID = -7131921062890234604L;
private int page;
private int pagesize = 20;
private long resultcount;
private long pagecount;
private String sort;
private String search;
@EJB
private UserBeanLocal userbean;
private ListDataModel<User> users;
public void initView() {
if (requireRights(Permission.USER_MANAGEMENT, RolePermission.READ)) {
users = new ListDataModel<User>(userbean.getUsers(page, pagesize, sort, search));
resultcount = userbean.getUsersCount(search);
pagecount = ((resultcount + pagesize - 1) / pagesize);
}
}
@Override
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
@Override
public int getPagesize() {
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
@Override
public long getResultcount() {
return resultcount;
}
public void setResultcount(long resultcount) {
this.resultcount = resultcount;
}
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getSearch() {
return search;
}
public void setSearch(String search) {
this.search = search;
}
public ListDataModel<User> getUsers() {
return users;
}
public void setUsers(ListDataModel<User> users) {
this.users = users;
}
public void setPagecount(long pagecount) {
this.pagecount = pagecount;
}
@Override
public long getPagecount() {
return pagecount;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!