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; ...@@ -17,72 +17,72 @@ import fi.insomnia.bortal.model.User;
@LocalBean @LocalBean
public class UserFacade extends GenericFacade<Integer, User> { public class UserFacade extends GenericFacade<Integer, User> {
private static final Logger logger = LoggerFactory.getLogger(UserFacade.class); private static final Logger logger = LoggerFactory.getLogger(UserFacade.class);
public enum UserField { public enum UserField {
id, nick, login, firstname, lastname id, nick, login, firstname, lastname
} }
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
public UserFacade() { public UserFacade() {
super(User.class); super(User.class);
} }
@Override @Override
protected EntityManager getEm() { protected EntityManager getEm() {
return em; return em;
} }
/** /**
* Find user by username. Username is converted to lowercase before * Find user by username. Username is converted to lowercase before
* searching. * searching.
* *
* @param login * @param login
* @return * @return
*/ */
public User findByLogin(String login) { public User findByLogin(String login) {
TypedQuery<User> q = em.createNamedQuery("User.findByLogin", User.class); TypedQuery<User> q = em.createNamedQuery("User.findByLogin", User.class);
q.setParameter("login", login.toLowerCase()); q.setParameter("login", login.toLowerCase());
return getSingleNullableResult(q); return getSingleNullableResult(q);
} }
private static final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname", "email" }; private static final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname", "email" };
public List<User> searchForName(String name) { public List<User> searchForName(String name) {
return this.search(name, NAMEFIELDS, "login"); return this.search(name, NAMEFIELDS, "login");
} }
@Override @Override
public void create(User user) { public void create(User user) {
user.setLogin(user.getLogin().toLowerCase().trim()); user.setLogin(user.getLogin().toLowerCase().trim());
super.create(user); super.create(user);
} }
@Override @Override
public User merge(User user) { public User merge(User user) {
user.setLogin(user.getLogin().toLowerCase().trim()); user.setLogin(user.getLogin().toLowerCase().trim());
return super.merge(user); return super.merge(user);
} }
public List<User> searchUser(int page, int pagesize, String sort, String search) { public List<User> searchUser(int page, int pagesize, String sort, String search) {
String query = null; String query = null;
if (sort == null || sort.isEmpty()) { if (sort == null || sort.isEmpty()) {
sort = "nick"; sort = "nick";
} }
if (search != null) { if (search != null) {
query = new StringBuilder('%').append(search).append('%').toString(); query = new StringBuilder().append("%").append(search).append('%').toString();
} }
return this.search(page, pagesize, query, NAMEFIELDS, sort); return this.search(page, pagesize, query, NAMEFIELDS, sort);
} }
public long searchUserCount(String search) { public long searchUserCount(String search) {
String query = null; String query = null;
if (search != null) { if (search != null) {
query = new StringBuilder('%').append(search).append('%').toString(); query = new StringBuilder().append("%").append(search).append('%').toString();
} }
return this.searchCount(query, NAMEFIELDS); 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 { body {
background-color: #C8C8C8; background-color: #C8C8C8;
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
...@@ -131,7 +129,7 @@ h1,h2,h3,h4 { ...@@ -131,7 +129,7 @@ h1,h2,h3,h4 {
border-style: solid; border-style: solid;
border-color: #FF7200; border-color: #FF7200;
padding: 2px 2px 2px 10px; padding: 2px 2px 2px 10px;
margin: 0 -20px; margin: 0 -20px 15px;
} }
#lighttext { #lighttext {
...@@ -227,3 +225,14 @@ table.packetTable tr td { ...@@ -227,3 +225,14 @@ table.packetTable tr td {
border-color: black; border-color: black;
border-spacing: 0px; 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 @@ ...@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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" <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: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> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
...@@ -21,8 +21,9 @@ ...@@ -21,8 +21,9 @@
<h1>#{i18n['userlist.header']}</h1> <h1>#{i18n['userlist.header']}</h1>
<h:form> <h:form>
<h:inputText value="#{userSearchView.search}" /> <h:inputText value="#{userSearchView.search}" />
<h:commandButton value="search" /> <h:commandButton value="#{i18n['userlist.search']}" />
</h:form> </h:form>
<tools:paginationHeader view="#{userSearchView}" />
<users:list /> <users:list />
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
...@@ -149,6 +149,14 @@ page.user.list.header=Users ...@@ -149,6 +149,14 @@ page.user.list.header=Users
page.user.list.pagegroup=user page.user.list.pagegroup=user
page.user.mygroups.header=My places page.user.mygroups.header=My places
page.viewexpired=frontpage 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.body=You can now login with the new password.
passwordChanged.header=Password changed successfully. passwordChanged.header=Password changed successfully.
passwordReset.hashNotFound=Password change token has expired. Please send the query again. passwordReset.hashNotFound=Password change token has expired. Please send the query again.
...@@ -245,7 +253,7 @@ role.name=Name ...@@ -245,7 +253,7 @@ role.name=Name
role.parents=Parents role.parents=Parents
role.read=(R) role.read=(R)
role.write=(W) role.write=(W)
shop.accountBalance=Account balance shop.accountBalance=Balance
shop.user=Selling to shop.user=Selling to
sidebar.bill.list=My bills sidebar.bill.list=My bills
sidebar.bill.listAll=All bills sidebar.bill.listAll=All bills
...@@ -297,10 +305,11 @@ user.email=Email ...@@ -297,10 +305,11 @@ user.email=Email
user.firstNames=Firstname user.firstNames=Firstname
user.hasImage=Image user.hasImage=Image
user.imagelist=Saved images user.imagelist=Saved images
user.image=Image
user.imagesubmit=Send image user.imagesubmit=Send image
user.insertToken=Insert token user.insertToken=Insert token
user.lastName=Lastname user.lastName=Lastname
user.login=Login name user.login=Login
user.myGroups=My place reservations user.myGroups=My place reservations
user.nick=Nick user.nick=Nick
user.noAccountevents=No account events user.noAccountevents=No account events
...@@ -337,5 +346,9 @@ userview.passwordTooShort=Password has to be atleast 5 characters long! ...@@ -337,5 +346,9 @@ userview.passwordTooShort=Password has to be atleast 5 characters long!
userview.passwordsChanged=Password changed userview.passwordsChanged=Password changed
userview.passwordsDontMatch=Passwords do not match! Please try again! userview.passwordsDontMatch=Passwords do not match! Please try again!
userview.userExists=Username already exists! please select another. userview.userExists=Username already exists! please select another.
userlist.header=Users
userlist.search=Search
viewexpired.body=Please login again. viewexpired.body=Please login again.
viewexpired.title=Login expired. 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!