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; ...@@ -48,6 +48,7 @@ import fi.insomnia.bortal.utilities.I18n;
import fi.insomnia.bortal.utilities.PasswordFunctions; import fi.insomnia.bortal.utilities.PasswordFunctions;
import fi.insomnia.bortal.utilities.SearchQuery; import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.UserSearchQuery;
/** /**
* Session Bean implementation class UserBean * Session Bean implementation class UserBean
...@@ -502,11 +503,17 @@ public class UserBean implements UserBeanLocal { ...@@ -502,11 +503,17 @@ public class UserBean implements UserBeanLocal {
public SearchResult<User> getEventUsers(SearchQuery search) { public SearchResult<User> getEventUsers(SearchQuery search) {
if (search.getSearch() == null || search.getSearch().isEmpty()) 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 { } else {
return userFacade.searchAllUsers(search); 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; package fi.insomnia.bortal.facade;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal; 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.EventUser_; import fi.insomnia.bortal.model.EventUser_;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
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.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 * Session Bean implementation class EventUserFacade
...@@ -78,6 +86,36 @@ public class EventUserFacade extends IntegerPkGenericFacade<EventUser> { ...@@ -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 // public SearchResult<EventUser> searchUser(int page, int pagesize, String
// sort, String search) { // sort, String search) {
// //
......
...@@ -7,11 +7,8 @@ import java.util.List; ...@@ -7,11 +7,8 @@ import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
...@@ -22,9 +19,6 @@ import fi.insomnia.bortal.beans.EventBeanLocal; ...@@ -22,9 +19,6 @@ import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.facade.callbacks.FacadeCallback; import fi.insomnia.bortal.facade.callbacks.FacadeCallback;
import fi.insomnia.bortal.facade.callbacks.OrderCallback; import fi.insomnia.bortal.facade.callbacks.OrderCallback;
import fi.insomnia.bortal.facade.callbacks.StringSearchPredicateCreator; 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.model.User_; import fi.insomnia.bortal.model.User_;
import fi.insomnia.bortal.utilities.SearchQuery; import fi.insomnia.bortal.utilities.SearchQuery;
...@@ -148,45 +142,35 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -148,45 +142,35 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
public SearchResult<User> searchEventUsers(SearchQuery query) // public SearchResult<User> searchEventUsers(SearchQuery query)
{ // {
ArrayList<FacadeCallback<EventUser>> callbacks = new ArrayList<FacadeCallback<EventUser>>(); // ArrayList<FacadeCallback<EventUser>> callbacks = new
callbacks.add(new OrderCallback<EventUser>(false, EventUser_.id)); // ArrayList<FacadeCallback<EventUser>>();
callbacks.add(new Eventlimiter(eventBean.getCurrentEvent())); // callbacks.add(new OrderCallback<EventUser>(false, EventUser_.id));
// callbacks.add(new EventLimiter(eventBean.getCurrentEvent()));
CriteriaBuilder cb = getEm().getCriteriaBuilder(); //
// CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<User> listCQuery = cb.createQuery(User.class); //
CriteriaQuery<Long> countCQuery = cb.createQuery(Long.class); // 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); // Root<EventUser> listRoot = searchCallbacks(listCQuery, callbacks,
// EventUser.class);
listCQuery.select(listRoot.join(EventUser_.user)); // Root<EventUser> countRoot = searchCallbacks(countCQuery, callbacks,
countCQuery.select(cb.count(countRoot.get(EventUser_.user))); // EventUser.class);
//
TypedQuery<Long> countQ = getEm().createQuery(countCQuery); // listCQuery.select(listRoot.join(EventUser_.user));
TypedQuery<User> listQ = getEm().createQuery(listCQuery); // countCQuery.select(cb.count(countRoot.get(EventUser_.user)));
//
if (query.getPagesize() > 0) { // TypedQuery<Long> countQ = getEm().createQuery(countCQuery);
listQ.setFirstResult(query.getPage() * query.getPagesize()); // TypedQuery<User> listQ = getEm().createQuery(listCQuery);
listQ.setMaxResults(query.getPagesize()); //
} // if (query.getPagesize() > 0) {
return new SearchResult<User>(listQ.getResultList(), countQ.getSingleResult()); // listQ.setFirstResult(query.getPage() * query.getPagesize());
} // listQ.setMaxResults(query.getPagesize());
// }
public class Eventlimiter implements FacadeCallback<EventUser> { // return new SearchResult<User>(listQ.getResultList(),
// countQ.getSingleResult());
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));
}
}
} }
...@@ -12,6 +12,7 @@ import fi.insomnia.bortal.model.User; ...@@ -12,6 +12,7 @@ import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage; import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.utilities.SearchQuery; import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.UserSearchQuery;
@Local @Local
public interface UserBeanLocal { public interface UserBeanLocal {
...@@ -71,4 +72,6 @@ public interface UserBeanLocal { ...@@ -71,4 +72,6 @@ public interface UserBeanLocal {
EventUser getUserByBarcode(String barcode); EventUser getUserByBarcode(String barcode);
SearchResult<EventUser> getThisEventsUsers(UserSearchQuery searchQuery);
} }
...@@ -16,61 +16,63 @@ ...@@ -16,61 +16,63 @@
<composite:implementation> <composite:implementation>
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" /> <h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<h2> <!-- <h2>
<h:outputText rendered="#{!cc.attrs.creating}" disabled="#{!cc.attrs.creating and !userView.canSave}" id="viewlogin" value="#{userView.selectedUser.login}" /> <h:outputText rendered="#{!cc.attrs.creating}" disabled="#{!cc.attrs.creating and !userView.canSave}" id="viewlogin" value="#{userView.selectedUser.login}" />
</h2> </h2>
<h:message rendered="#{!cc.attrs.creating}" for="viewlogin" /> -->
<h:message rendered="#{sessionHandler.superadmin}" for="superadmin" />
<h:form id="userform" enctype="multipart/form-data" styleClass="ui-widget">
<h:panelGrid columns="2">
<h:panelGroup > <h:form id="userform" enctype="multipart/form-data">
<h:panelGrid columns="2">
<h:panelGroup>
<ui:fragment rendered="#{not empty userView.user.id}"> <ui:fragment rendered="#{not empty userView.user.id}">
<div id="webcamcontainer" style="display: none;">
<p:overlayPanel id="chartPanel" for="webcamButton" hideEffect="fade">
<p:photoCam widgetVar="pc" listener="#{userView.oncapture}" update="@all" /> <p:photoCam widgetVar="pc" listener="#{userView.oncapture}" update="@all" />
<p:commandButton type="button" value="Capture" onclick="pc.capture()" /> <p:commandButton type="button" value="Capture" onclick="pc.capture()" />
</div> </p:overlayPanel>
<h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" /> <h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" />
<ui:fragment rendered="#{!empty userView.user.currentImage}"> <ui:fragment rendered="#{!empty userView.user.currentImage}">
<img style="width: 150px;" src="#{request.contextPath}/dydata/userimage/#{userView.user.currentImage.id}.img" alt="image" /> <img style="width: 150px;" src="#{request.contextPath}/dydata/userimage/#{userView.user.currentImage.id}.img" alt="image" />
</ui:fragment> </ui:fragment>
<br /> <br />
<button onclick="$('#webcamcontainer').show();$(this).hide();return false;">#{i18n['userimage.webcam']}</button> <p:commandButton id="webcamButton" value="#{i18n['userimage.webcam']}" type="button" />
<br /> <br />
<br /> <br />
<p:fileUpload id="uploadfile" required="TRUE" requiredMessage="Required!" invalidSizeMessage="#{i18n['user.imageTooBig']}" sizeLimit="1024" value="#{userView.image}" mode="simple" /> <p:fileUpload id="uploadfile" required="TRUE" requiredMessage="Required!" invalidSizeMessage="#{i18n['user.imageTooBig']}" sizeLimit="1024" value="#{userView.image}" mode="simple" />
<h:message for="uploadfile" /> <p:message for="uploadfile" />
<h:commandButton styleClass="ui-button" action="#{userView.sendImage}" value="#{i18n['user.imagesubmit']}" /> <p:commandButton action="#{userView.sendImage}" value="#{i18n['user.imagesubmit']}" />
</ui:fragment> </ui:fragment>
<ui:fragment rendered="#{cc.attrs.creating}"> <ui:fragment rendered="#{cc.attrs.creating}">
<h:outputLabel value="#{i18n['user.login']}:" for="login" /> <h:outputLabel value="#{i18n['user.login']}" for="login" />
<br /> <br />
<h:inputText styleClass="ui-input" size="25" id="login" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.login}" /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<h:message for="login" /> <p:inputText size="25" id="login" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.login}" />
</p:inplace>
<p:message for="login" />
<br /> <br />
</ui:fragment> </ui:fragment>
<br /> <br />
<h:outputLabel value="#{i18n['user.email']}:" for="email" /> <h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.password']}" for="password" />
<br />
<h:inputText styleClass="ui-input" validator="#{userValidator.validateEmail}" size="45" id="email" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.email}" />
<h:message for="email" />
<br /> <br />
<p:inplace rendered="#{cc.attrs.creating}" emptyLabel="#{i18n['user.insert']}">
<h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.password']}:" for="password" /> <p:password validator="#{userValidator.password}" id="password" value="#{userView.password}" />
</p:inplace>
<p:message rendered="#{cc.attrs.creating}" for="password" />
<br /> <br />
<h:inputSecret styleClass="ui-input" validator="#{userValidator.password}" rendered="#{cc.attrs.creating}" id="password" value="#{userView.password}" /> <p:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.passwordcheck']}" for="passwordcheck" />
<h:message rendered="#{cc.attrs.creating}" for="password" />
<br /> <br />
<h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.passwordcheck']}:" for="passwordcheck" /> <p:inplace rendered="#{cc.attrs.creating}" emptyLabel="#{i18n['user.insert']}">
<br /> <p:password validator="#{userValidator.password}" id="passwordcheck" value="#{userView.passwordcheck}" />
<h:inputSecret styleClass="ui-input" validator="#{userValidator.password}" rendered="#{cc.attrs.creating}" id="passwordcheck" value="#{userView.passwordcheck}" /> </p:inplace>
<h:message rendered="#{cc.attrs.creating}" for="passwordcheck" /> <p:message rendered="#{cc.attrs.creating}" for="passwordcheck" />
<br /> <br />
</h:panelGroup> </h:panelGroup>
...@@ -79,59 +81,66 @@ ...@@ -79,59 +81,66 @@
<h:panelGroup> <h:panelGroup>
<table> <table>
<tr> <tr>
<td colspan="2"><h:outputLabel value="#{i18n['user.nick']}:" for="nick" /> <br /> <h:inputText size="45" id="nick" disabled="#{!cc.attrs.creating and !userView.canSave}" <td colspan="2"><h:outputLabel value="#{i18n['user.nick']}" for="nick" /> <br />
value="#{userView.selectedUser.nick}" /><br /> <h:message for="nick" /></td> <p:inplace emptyLabel="#{i18n['user.insert']}">
</tr> <p:inputText size="45" id="nick" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.nick}" />
<tr> </p:inplace></td>
<td><h:outputLabel value="#{i18n['user.firstNames']}:" for="firstnames" /></td>
<td><h:outputLabel value="#{i18n['user.lastName']}:" for="lastname" /></td>
</tr>
<tr>
<td><h:inputText styleClass="ui-input" size="22" id="firstnames" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.firstnames}" /></td>
<td><h:inputText styleClass="ui-input" size="30" id="lastname" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.lastname}" /></td>
</tr> </tr>
<tr> <tr>
<td><h:message for="firstnames" /></td> <td><h:outputLabel value="#{i18n['user.firstNames']}" for="firstnames" /><br />
<td><h:message for="lastname" /></td> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText size="22" id="firstnames" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.firstnames}" />
</p:inplace></td>
<td><h:outputLabel value="#{i18n['user.lastName']}" for="lastname" /><br />
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText size="30" id="lastname" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.lastname}" />
</p:inplace></td>
</tr> </tr>
<tr> <tr>
<td><h:outputLabel for="birthday" value="#{i18n['user.birthday']}:" /><br /> <p:calendar id="birthday" navigator="true" yearRange="c-80:c-0" locale="fi" <td><h:outputLabel for="birthday" value="#{i18n['user.birthday']}" /><br /> <p:calendar id="birthday" navigator="true" yearRange="c-80:c-0" locale="fi"
value="#{userView.selectedUser.birthday}" pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" /> <h:message for="birthday" /></td> value="#{userView.selectedUser.birthday}" pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" /> <h:message for="birthday" /></td>
<td><h:outputLabel value="#{i18n['user.sex']}:" for="sex" /> <br /> <h:selectOneMenu disabled="#{!cc.attrs.creating and !userView.canSave}" id="sex" <td><h:outputLabel value="#{i18n['user.sex']}" for="sex" /> <br /> <p:selectOneMenu disabled="#{!cc.attrs.creating and !userView.canSave}" id="sex"
value="#{userView.selectedUser.gender}"> value="#{userView.selectedUser.gender}">
<f:selectItem id="undefined" itemLabel="#{i18n['user.sex.UNDEFINED']}" itemValue="UNDEFINED" /> <f:selectItem id="undefined" itemLabel="#{i18n['user.sex.UNDEFINED']}" itemValue="UNDEFINED" />
<f:selectItem id="male" itemLabel="#{i18n['user.sex.MALE']}" itemValue="MALE" /> <f:selectItem id="male" itemLabel="#{i18n['user.sex.MALE']}" itemValue="MALE" />
<f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" /> <f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" />
</h:selectOneMenu> <h:message for="sex" /></td> </p:selectOneMenu></td>
</tr> </tr>
</table> </table>
<table> <table>
<tr> <tr>
<td colspan="2"><h:outputLabel value="#{i18n['user.address']}:" for="address" /><br /> <h:inputText styleClass="ui-input" size="45" id="address" disabled="#{!cc.attrs.creating and !userView.canSave}" <td colspan="2"><p:outputLabel value="#{i18n['user.address']}" for="address" /><br />
value="#{userView.selectedUser.address}" /> <h:message for="address" /></td> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText size="45" id="address" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.address}" />
</p:inplace></td>
</tr>
<tr>
<td><p:outputLabel value="#{i18n['user.zipCode']}" for="zip" /><br />
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText styleClass="ui-input" size="7" id="zip" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.zip}" />
</p:inplace> <p:message for="zip" /></td>
<td><p:outputLabel value="#{i18n['user.town']}" for="town" /><br />
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText styleClass="ui-input" size="25" id="town" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.town}" />
</p:inplace> <p:message for="town" /></td>
</tr> </tr>
<tr> <tr>
<td><h:outputLabel value="#{i18n['user.zipCode']}:" for="zip" /><br /> <h:inputText styleClass="ui-input" size="7" id="zip" disabled="#{!cc.attrs.creating and !userView.canSave}" <td colspan="2"><h:outputLabel value="#{i18n['user.email']}" for="email" /> <br />
value="#{userView.selectedUser.zip}" /> <h:message for="zip" /></td> <p:inplace emptyLabel="#{i18n['user.insert']}">
<td><h:outputLabel value="#{i18n['user.town']}:" for="town" /><br /> <h:inputText styleClass="ui-input" size="25" id="town" disabled="#{!cc.attrs.creating and !userView.canSave}" <p:inputText validator="#{userValidator.validateEmail}" size="45" id="email" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.email}" />
value="#{userView.selectedUser.town}" /> <h:message for="town" /></td> </p:inplace></td>
</tr> </tr>
</table> </table>
<h:outputLabel rendered="#{sessionHandler.superadmin}" value="#{i18n['user.superadmin']}:" for="superadmin" />
<h:selectBooleanCheckbox disabled="#{!cc.attrs.creating and !userView.canSave}" rendered="#{sessionHandler.superadmin}" id="superadmin" value="#{userView.selectedUser.superadmin}" /> <p:commandButton rendered="#{cc.attrs.creating or userView.canSave}" id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
<br />
<br />
<h:commandButton styleClass="ui-button" rendered="#{cc.attrs.creating or userView.canSave}" id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</h:panelGroup> </h:panelGroup>
</h:panelGrid> </h:panelGrid>
</h:form> </h:form>
</composite:implementation> </composite:implementation>
</html> </html>
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
.userdata_popup { .userdata_popup {
position: absolute; position: absolute;
border: 1px solid black; border: 1px solid black;
backgrond: white; background: white;
border-radius: 3px; border-radius: 3px;
display: none; display: none;
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"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:tools="http://java.sun.com/jsf/composite/cditools" 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">
<f:metadata> <f:metadata>
...@@ -16,18 +14,22 @@ ...@@ -16,18 +14,22 @@
<f:event type="preRenderView" listener="#{userSearchView.initView}" /> <f:event type="preRenderView" listener="#{userSearchView.initView}" />
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content"> <ui:define name="content">
<h1>#{i18n['userlist.header']}</h1> <h1>#{i18n['userlist.header']}</h1>
<h:form> <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:inputText value="#{userSearchView.search}" />
<h:commandButton value="#{i18n['userlist.search']}" action="#{userSearchView.newSearch()}" /> <h:commandButton value="#{i18n['userlist.search']}" action="#{userSearchView.newSearch()}" />
</h:form> </h:form>
<p> <p>
<users:list /> <users:list rendered="#{!userSearchView.searchQuery.onlyThisEvent}" />
<users:eventuserlist rendered="#{userSearchView.searchQuery.onlyThisEvent}" />
</p> </p>
<p> <p>
<tools:paginationHeader view="#{userSearchView}" /> <tools:paginationHeader view="#{userSearchView}" />
</p> </p>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
...@@ -34,10 +34,10 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -34,10 +34,10 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public String addToPage(Integer count) { public String addToPage(Integer count) {
pagechangeCallback(); pagechangeCallback();
searchQuery.addPage(count); getSearchQuery().addPage(count);
if (searchQuery.getPage() >= pagecount) { if (getSearchQuery().getPage() >= pagecount) {
searchQuery.setPage(pagecount.intValue() - 1); getSearchQuery().setPage(pagecount.intValue() - 1);
} }
return null; return null;
} }
...@@ -51,14 +51,14 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -51,14 +51,14 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public String gotoFirstpage() { public String gotoFirstpage() {
// logger.info("Setting page to first page"); // logger.info("Setting page to first page");
pagechangeCallback(); pagechangeCallback();
searchQuery.setPage(0); getSearchQuery().setPage(0);
return null; return null;
} }
public String gotoLastpage() { public String gotoLastpage() {
// logger.info("Setting page to last page"); // logger.info("Setting page to last page");
pagechangeCallback(); pagechangeCallback();
searchQuery.setPage(pagecount.intValue() - 1); getSearchQuery().setPage(pagecount.intValue() - 1);
return null; return null;
} }
...@@ -72,20 +72,20 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -72,20 +72,20 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
@Override @Override
public Integer getPage() { public Integer getPage() {
return searchQuery.getPage(); return getSearchQuery().getPage();
} }
public void setPage(Integer page) { public void setPage(Integer page) {
searchQuery.setPage(page); getSearchQuery().setPage(page);
} }
@Override @Override
public Integer getPagesize() { public Integer getPagesize() {
return searchQuery.getPagesize(); return getSearchQuery().getPagesize();
} }
public void setPagesize(Integer pagesize) { public void setPagesize(Integer pagesize) {
searchQuery.setPagesize(pagesize); getSearchQuery().setPagesize(pagesize);
} }
@Override @Override
...@@ -95,7 +95,7 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -95,7 +95,7 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public void setResultcount(Long resultcount) { public void setResultcount(Long resultcount) {
this.resultcount = resultcount; this.resultcount = resultcount;
pagecount = ((resultcount + searchQuery.getPagesize() - 1) / searchQuery.getPagesize()); pagecount = ((resultcount + getSearchQuery().getPagesize() - 1) / getSearchQuery().getPagesize());
} }
@Override @Override
...@@ -108,19 +108,19 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -108,19 +108,19 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
} }
public String getSort() { public String getSort() {
return searchQuery.getSort(); return getSearchQuery().getSort();
} }
public void setSort(String sort) { public void setSort(String sort) {
searchQuery.setSort(sort); getSearchQuery().setSort(sort);
} }
public String getSearch() { public String getSearch() {
return searchQuery.getSearch(); return getSearchQuery().getSearch();
} }
public void setSearch(String search) { public void setSearch(String search) {
searchQuery.setSearch(search); getSearchQuery().setSearch(search);
} }
public String newSearch() { public String newSearch() {
......
package fi.insomnia.bortal.web.cdiview.user; package fi.insomnia.bortal.web.cdiview.user;
import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.User; 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; import fi.insomnia.bortal.web.cdiview.PaginationView;
@Named @Named
...@@ -20,12 +25,37 @@ public class UserSearchView extends PaginationView<User> { ...@@ -20,12 +25,37 @@ public class UserSearchView extends PaginationView<User> {
@EJB @EJB
private transient UserBeanLocal userbean; private transient UserBeanLocal userbean;
private List<EventUser> eventUserResults;
private UserSearchQuery usersearch = new UserSearchQuery();
public void initView() { public void initView() {
if (requirePermissions(permbean.hasPermission(UserPermission.VIEW_ALL))) { if (requirePermissions(permbean.hasPermission(UserPermission.VIEW_ALL))) {
super.setResult(userbean.getEventUsers(getSearchQuery())); 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!