Commit dc66d756 by Tuomas Riihimäki

Searching may return eventuser instead of user...

1 parent 9c46e49d
......@@ -48,6 +48,7 @@ import fi.insomnia.bortal.utilities.I18n;
import fi.insomnia.bortal.utilities.PasswordFunctions;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.UserSearchQuery;
/**
* Session Bean implementation class UserBean
......@@ -502,11 +503,17 @@ public class UserBean implements UserBeanLocal {
public SearchResult<User> getEventUsers(SearchQuery search) {
if (search.getSearch() == null || search.getSearch().isEmpty())
{
return userFacade.searchEventUsers(search);
throw new RuntimeException("You should be using getThisEventsUsers if not searching globally...");
// return userFacade.searchEventUsers(search);
} else {
return userFacade.searchAllUsers(search);
}
}
@Override
public SearchResult<EventUser> getThisEventsUsers(UserSearchQuery searchQuery) {
return eventUserFacade.searchEventUsers(searchQuery);
}
}
\ No newline at end of file
package fi.insomnia.bortal.facade;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.facade.callbacks.FacadeCallback;
import fi.insomnia.bortal.facade.callbacks.OrderCallback;
import fi.insomnia.bortal.facade.tools.EventLimiter;
import fi.insomnia.bortal.facade.tools.EventUserSearchPredicate;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.EventUser_;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.PrintedCard_;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.User_;
import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.UserSearchQuery;
/**
* Session Bean implementation class EventUserFacade
......@@ -78,6 +86,36 @@ public class EventUserFacade extends IntegerPkGenericFacade<EventUser> {
}
public SearchResult<EventUser> searchEventUsers(UserSearchQuery query) {
ArrayList<FacadeCallback<EventUser>> callbacks = new ArrayList<FacadeCallback<EventUser>>();
callbacks.add(new OrderCallback<EventUser>(false, EventUser_.id));
callbacks.add(new EventLimiter(eventBean.getCurrentEvent()));
if (query.getSearch() != null && !query.getSearch().isEmpty())
{
callbacks.add(new EventUserSearchPredicate(query.getSearch(), UserFacade.getAttrlist()));
}
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<EventUser> listCQuery = cb.createQuery(EventUser.class);
CriteriaQuery<Long> countCQuery = cb.createQuery(Long.class);
Root<EventUser> listRoot = searchCallbacks(listCQuery, callbacks, EventUser.class);
Root<EventUser> countRoot = searchCallbacks(countCQuery, callbacks, EventUser.class);
listCQuery.select(listRoot);
countCQuery.select(cb.count(countRoot));
TypedQuery<Long> countQ = getEm().createQuery(countCQuery);
TypedQuery<EventUser> listQ = getEm().createQuery(listCQuery);
if (query.getPagesize() > 0) {
listQ.setFirstResult(query.getPage() * query.getPagesize());
listQ.setMaxResults(query.getPagesize());
}
return new SearchResult<EventUser>(listQ.getResultList(), countQ.getSingleResult());
}
// public SearchResult<EventUser> searchUser(int page, int pagesize, String
// sort, String search) {
//
......
......@@ -7,11 +7,8 @@ import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
......@@ -22,9 +19,6 @@ import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.facade.callbacks.FacadeCallback;
import fi.insomnia.bortal.facade.callbacks.OrderCallback;
import fi.insomnia.bortal.facade.callbacks.StringSearchPredicateCreator;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.EventUser_;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.User_;
import fi.insomnia.bortal.utilities.SearchQuery;
......@@ -148,45 +142,35 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
return getEm().createQuery(cq).getResultList();
}
public SearchResult<User> searchEventUsers(SearchQuery query)
{
ArrayList<FacadeCallback<EventUser>> callbacks = new ArrayList<FacadeCallback<EventUser>>();
callbacks.add(new OrderCallback<EventUser>(false, EventUser_.id));
callbacks.add(new Eventlimiter(eventBean.getCurrentEvent()));
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<User> listCQuery = cb.createQuery(User.class);
CriteriaQuery<Long> countCQuery = cb.createQuery(Long.class);
Root<EventUser> listRoot = searchCallbacks(listCQuery, callbacks, EventUser.class);
Root<EventUser> countRoot = searchCallbacks(countCQuery, callbacks, EventUser.class);
listCQuery.select(listRoot.join(EventUser_.user));
countCQuery.select(cb.count(countRoot.get(EventUser_.user)));
TypedQuery<Long> countQ = getEm().createQuery(countCQuery);
TypedQuery<User> listQ = getEm().createQuery(listCQuery);
if (query.getPagesize() > 0) {
listQ.setFirstResult(query.getPage() * query.getPagesize());
listQ.setMaxResults(query.getPagesize());
}
return new SearchResult<User>(listQ.getResultList(), countQ.getSingleResult());
}
public class Eventlimiter implements FacadeCallback<EventUser> {
private LanEvent ev;
public Eventlimiter(LanEvent currentEvent) {
ev = currentEvent;
}
@Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Path<EventUser> root, List<Predicate> predicates) {
predicates.add(cb.equal(root.get(EventUser_.event), ev));
}
// public SearchResult<User> searchEventUsers(SearchQuery query)
// {
// ArrayList<FacadeCallback<EventUser>> callbacks = new
// ArrayList<FacadeCallback<EventUser>>();
// callbacks.add(new OrderCallback<EventUser>(false, EventUser_.id));
// callbacks.add(new EventLimiter(eventBean.getCurrentEvent()));
//
// CriteriaBuilder cb = getEm().getCriteriaBuilder();
//
// CriteriaQuery<User> listCQuery = cb.createQuery(User.class);
// CriteriaQuery<Long> countCQuery = cb.createQuery(Long.class);
//
// Root<EventUser> listRoot = searchCallbacks(listCQuery, callbacks,
// EventUser.class);
// Root<EventUser> countRoot = searchCallbacks(countCQuery, callbacks,
// EventUser.class);
//
// listCQuery.select(listRoot.join(EventUser_.user));
// countCQuery.select(cb.count(countRoot.get(EventUser_.user)));
//
// TypedQuery<Long> countQ = getEm().createQuery(countCQuery);
// TypedQuery<User> listQ = getEm().createQuery(listCQuery);
//
// if (query.getPagesize() > 0) {
// listQ.setFirstResult(query.getPage() * query.getPagesize());
// listQ.setMaxResults(query.getPagesize());
// }
// return new SearchResult<User>(listQ.getResultList(),
// countQ.getSingleResult());
// }
}
}
......@@ -12,6 +12,7 @@ import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.UserSearchQuery;
@Local
public interface UserBeanLocal {
......@@ -71,4 +72,6 @@ public interface UserBeanLocal {
EventUser getUserByBarcode(String barcode);
SearchResult<EventUser> getThisEventsUsers(UserSearchQuery searchQuery);
}
......@@ -5,7 +5,7 @@
.userdata_popup {
position: absolute;
border: 1px solid black;
backgrond: white;
background: white;
border-radius: 3px;
display: none;
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"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:tools="http://java.sun.com/jsf/composite/cditools" xmlns:f="http://java.sun.com/jsf/core"
>
<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: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">
<f:metadata>
......@@ -16,15 +14,19 @@
<f:event type="preRenderView" listener="#{userSearchView.initView}" />
</f:metadata>
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content">
<h1>#{i18n['userlist.header']}</h1>
<h:form>
<h:outputLabel for="onlythisevent" value="#{i18n['userlist.onlythisevent']}" />
<h:selectBooleanCheckbox id="onlythisevent" value="#{userSearchView.searchQuery.onlyThisEvent}" />
<br />
<h:inputText value="#{userSearchView.search}" />
<h:commandButton value="#{i18n['userlist.search']}" action="#{userSearchView.newSearch()}" />
</h:form>
<p>
<users:list />
<users:list rendered="#{!userSearchView.searchQuery.onlyThisEvent}" />
<users:eventuserlist rendered="#{userSearchView.searchQuery.onlyThisEvent}" />
</p>
<p>
<tools:paginationHeader view="#{userSearchView}" />
......
......@@ -34,10 +34,10 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public String addToPage(Integer count) {
pagechangeCallback();
searchQuery.addPage(count);
getSearchQuery().addPage(count);
if (searchQuery.getPage() >= pagecount) {
searchQuery.setPage(pagecount.intValue() - 1);
if (getSearchQuery().getPage() >= pagecount) {
getSearchQuery().setPage(pagecount.intValue() - 1);
}
return null;
}
......@@ -51,14 +51,14 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public String gotoFirstpage() {
// logger.info("Setting page to first page");
pagechangeCallback();
searchQuery.setPage(0);
getSearchQuery().setPage(0);
return null;
}
public String gotoLastpage() {
// logger.info("Setting page to last page");
pagechangeCallback();
searchQuery.setPage(pagecount.intValue() - 1);
getSearchQuery().setPage(pagecount.intValue() - 1);
return null;
}
......@@ -72,20 +72,20 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
@Override
public Integer getPage() {
return searchQuery.getPage();
return getSearchQuery().getPage();
}
public void setPage(Integer page) {
searchQuery.setPage(page);
getSearchQuery().setPage(page);
}
@Override
public Integer getPagesize() {
return searchQuery.getPagesize();
return getSearchQuery().getPagesize();
}
public void setPagesize(Integer pagesize) {
searchQuery.setPagesize(pagesize);
getSearchQuery().setPagesize(pagesize);
}
@Override
......@@ -95,7 +95,7 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public void setResultcount(Long resultcount) {
this.resultcount = resultcount;
pagecount = ((resultcount + searchQuery.getPagesize() - 1) / searchQuery.getPagesize());
pagecount = ((resultcount + getSearchQuery().getPagesize() - 1) / getSearchQuery().getPagesize());
}
@Override
......@@ -108,19 +108,19 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
}
public String getSort() {
return searchQuery.getSort();
return getSearchQuery().getSort();
}
public void setSort(String sort) {
searchQuery.setSort(sort);
getSearchQuery().setSort(sort);
}
public String getSearch() {
return searchQuery.getSearch();
return getSearchQuery().getSearch();
}
public void setSearch(String search) {
searchQuery.setSearch(search);
getSearchQuery().setSearch(search);
}
public String newSearch() {
......
package fi.insomnia.bortal.web.cdiview.user;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.UserSearchQuery;
import fi.insomnia.bortal.web.cdiview.PaginationView;
@Named
......@@ -20,12 +25,37 @@ public class UserSearchView extends PaginationView<User> {
@EJB
private transient UserBeanLocal userbean;
private List<EventUser> eventUserResults;
private UserSearchQuery usersearch = new UserSearchQuery();
public void initView() {
if (requirePermissions(permbean.hasPermission(UserPermission.VIEW_ALL))) {
if (usersearch.isOnlyThisEvent() || usersearch.getSearch() == null || usersearch.getSearch().isEmpty())
{
usersearch.setOnlyThisEvent(true);
SearchResult<EventUser> eventusers = userbean.getThisEventsUsers(getSearchQuery());
this.setResultcount(eventusers.getResultcount());
this.setEventUserResults(eventusers.getResults());
}
else {
super.setResult(userbean.getEventUsers(getSearchQuery()));
}
}
}
@Override
public UserSearchQuery getSearchQuery()
{
return usersearch;
}
public List<EventUser> getEventUserResults() {
return eventUserResults;
}
public void setEventUserResults(List<EventUser> eventUserResults) {
this.eventUserResults = eventUserResults;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!