Commit 052eee2e by Tuomas Riihimäki

Logijuttua, showBill:n billLines..

1 parent ac499fc7
...@@ -64,7 +64,7 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote { ...@@ -64,7 +64,7 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
if (user.isAnonymous()) { if (user.isAnonymous()) {
logger.info("logging in as anonymous!!!"); logger.info("logging in as anonymous!!!");
} else if (!user.checkPassword(password)) { } else if (!user.checkPassword(password)) {
secubean.logMessage(SecurityLogType.permissionDenied, eventUser.getUser(), "Login failed: wrong password for username ", username); secubean.logMessage(SecurityLogType.permissionDenied, eventUser, "Login failed: wrong password for username ", username);
eventUser = null; eventUser = null;
user = null; user = null;
} }
...@@ -78,7 +78,7 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote { ...@@ -78,7 +78,7 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
eventUser.setCreator(eventUser); eventUser.setCreator(eventUser);
} }
} else { } else {
secubean.logMessage(SecurityLogType.permissionDenied, (User) null, "Login failed: Username not found: ", username); secubean.logMessage(SecurityLogType.permissionDenied, eventbean.getCurrentEvent(), null, "Login failed: Username not found: ", username);
} }
return eventUser; return eventUser;
......
...@@ -14,6 +14,7 @@ import org.slf4j.Logger; ...@@ -14,6 +14,7 @@ import org.slf4j.Logger;
import fi.insomnia.bortal.facade.LogEntryFacade; import fi.insomnia.bortal.facade.LogEntryFacade;
import fi.insomnia.bortal.facade.LogEntryTypeFacade; import fi.insomnia.bortal.facade.LogEntryTypeFacade;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LogEntry; import fi.insomnia.bortal.model.LogEntry;
import fi.insomnia.bortal.model.LogEntryType; import fi.insomnia.bortal.model.LogEntryType;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
...@@ -33,6 +34,8 @@ public class LoggingBean implements LoggingBeanLocal { ...@@ -33,6 +34,8 @@ public class LoggingBean implements LoggingBeanLocal {
private LogEntryTypeFacade typeFacade; private LogEntryTypeFacade typeFacade;
@EJB @EJB
private LogEntryFacade entryFacade; private LogEntryFacade entryFacade;
@EJB
private EventBeanLocal eventbean;
@Resource @Resource
UserTransaction utx; UserTransaction utx;
...@@ -86,14 +89,19 @@ public class LoggingBean implements LoggingBeanLocal { ...@@ -86,14 +89,19 @@ public class LoggingBean implements LoggingBeanLocal {
// } // }
@Override @Override
public LogEntry logMessage(SecurityLogType paramType, User user, public LogEntry logMessage(SecurityLogType paramType, LanEvent event, User user,
Object... description) { Object... description) {
LogEntry entry = null; LogEntry entry = null;
if (event == null)
{
event = eventbean.getCurrentEvent();
}
try { try {
String desc = toString(description); String desc = toString(description);
utx.begin(); utx.begin();
LogEntryType type = typeFacade.findOrCreate(paramType); LogEntryType type = typeFacade.findOrCreate(paramType);
entry = new LogEntry(Calendar.getInstance()); entry = new LogEntry(Calendar.getInstance());
entry.setParentEvent(event);
entry.setType(type); entry.setType(type);
entry.setDescription(desc); entry.setDescription(desc);
entry.setUser(user); entry.setUser(user);
...@@ -113,9 +121,15 @@ public class LoggingBean implements LoggingBeanLocal { ...@@ -113,9 +121,15 @@ public class LoggingBean implements LoggingBeanLocal {
} }
@Override @Override
public LogEntry logMessage(SecurityLogType paramType, EventUser user, public LogEntry logMessage(SecurityLogType paramType, EventUser user, Object... description) {
Object... description) { LanEvent event = null;
return logMessage(paramType, user.getUser(), description); User usr = null;
if (user != null)
{
event = user.getEvent();
usr = user.getUser();
}
return logMessage(paramType, event, usr, description);
} }
private static final String toString(Object... desc) { private static final String toString(Object... desc) {
......
...@@ -46,6 +46,7 @@ import fi.insomnia.bortal.model.UserImage; ...@@ -46,6 +46,7 @@ import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.util.MailMessage; import fi.insomnia.bortal.util.MailMessage;
import fi.insomnia.bortal.utilities.I18n; 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.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
/** /**
...@@ -309,8 +310,8 @@ public class UserBean implements UserBeanLocal { ...@@ -309,8 +310,8 @@ public class UserBean implements UserBeanLocal {
@Override @Override
@RolesAllowed(UserPermission.S_VIEW_ALL) @RolesAllowed(UserPermission.S_VIEW_ALL)
public SearchResult<User> getUsers(int page, int pagesize, String sort, String search) { public SearchResult<User> getUsers(SearchQuery search) {
return userFacade.searchAllUsers(page, pagesize, sort, search); return userFacade.searchAllUsers(search);
} }
// @Override // @Override
...@@ -497,12 +498,12 @@ public class UserBean implements UserBeanLocal { ...@@ -497,12 +498,12 @@ public class UserBean implements UserBeanLocal {
} }
@Override @Override
public SearchResult<User> getEventUsers(int page, int pagesize, String sort, String search) { public SearchResult<User> getEventUsers(SearchQuery search) {
if (search == null || search.isEmpty()) if (search.getSearch() == null || search.getSearch().isEmpty())
{ {
return userFacade.searchEventUsers(page, pagesize, sort, search); return userFacade.searchEventUsers(search);
} else { } else {
return userFacade.searchAllUsers(page, pagesize, sort, search); return userFacade.searchAllUsers(search);
} }
} }
......
...@@ -9,21 +9,20 @@ import javax.persistence.NoResultException; ...@@ -9,21 +9,20 @@ import javax.persistence.NoResultException;
import javax.persistence.TypedQuery; 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.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.callbacks.FacadeCallback; import fi.insomnia.bortal.facade.callbacks.FacadeCallback;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.jpa.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class GenericFacade<C extends ModelInterface> { public abstract class GenericFacade<C extends ModelInterface> {
private final Class<C> entClass; private final Class<C> entClass;
private static final Logger logger = LoggerFactory.getLogger(GenericFacade.class);
// private static final Logger logger =
// LoggerFactory.getLogger(GenericFacade.class);
public GenericFacade(Class<C> entityClass) { public GenericFacade(Class<C> entityClass) {
this.entClass = entityClass; this.entClass = entityClass;
...@@ -110,53 +109,55 @@ public abstract class GenericFacade<C extends ModelInterface> { ...@@ -110,53 +109,55 @@ public abstract class GenericFacade<C extends ModelInterface> {
return ret; return ret;
} }
@Deprecated // @Deprecated
protected List<C> search(String query, String[] fields, String orderfield) { // protected List<C> search(String query, String[] fields, String
return search(0, 0, query, fields, orderfield); // orderfield) {
} // return search(0, 0, query, fields, orderfield);
// }
@Deprecated //
protected SearchResult<C> searcher(int page, int pagesize, String query, String[] fields, String orderfield) { // @Deprecated
SearchResult<C> ret = new SearchResult<C>(); // protected SearchResult<C> searcher(int page, int pagesize, String query,
ret.setResults(search(page, pagesize, query, fields, orderfield)); // String[] fields, String orderfield) {
ret.setResultcount(searchCount(query, fields)); // SearchResult<C> ret = new SearchResult<C>();
return ret; // ret.setResults(search(page, pagesize, query, fields, orderfield));
} // ret.setResultcount(searchCount(query, fields));
// return ret;
// }
// Le fu... Tuota.. generics ei hanskaa ... operaattoria.. tehdään siis // Le fu... Tuota.. generics ei hanskaa ... operaattoria.. tehdään siis
// näin... :( // näin... :(
protected SearchResult<C> searcher(int page, int pagesize, FacadeCallback<C> callback) { protected SearchResult<C> searcher(SearchQuery search, FacadeCallback<C> callback) {
return searcher(page, pagesize, Collections.singletonList(callback)); return searcher(search, Collections.singletonList(callback));
} }
protected SearchResult<C> searcher(int page, int pagesize, FacadeCallback<C> cb1, FacadeCallback<C> cb2) { protected SearchResult<C> searcher(SearchQuery search, FacadeCallback<C> cb1, FacadeCallback<C> cb2) {
ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>(); ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>();
cbs.add(cb1); cbs.add(cb1);
cbs.add(cb2); cbs.add(cb2);
return searcher(page, pagesize, cbs); return searcher(search, cbs);
} }
protected SearchResult<C> searcher(int page, int pagesize, FacadeCallback<C> cb1, FacadeCallback<C> cb2, FacadeCallback<C> cb3) { protected SearchResult<C> searcher(SearchQuery search, FacadeCallback<C> cb1, FacadeCallback<C> cb2, FacadeCallback<C> cb3) {
ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>(); ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>();
cbs.add(cb1); cbs.add(cb1);
cbs.add(cb2); cbs.add(cb2);
cbs.add(cb3); cbs.add(cb3);
return searcher(page, pagesize, cbs); return searcher(search, cbs);
} }
protected SearchResult<C> searcher(int page, int pagesize, FacadeCallback<C> cb1, FacadeCallback<C> cb2, FacadeCallback<C> cb3, FacadeCallback<C> cb4) { protected SearchResult<C> searcher(SearchQuery search, FacadeCallback<C> cb1, FacadeCallback<C> cb2, FacadeCallback<C> cb3, FacadeCallback<C> cb4) {
ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>(); ArrayList<FacadeCallback<C>> cbs = new ArrayList<FacadeCallback<C>>();
cbs.add(cb1); cbs.add(cb1);
cbs.add(cb2); cbs.add(cb2);
cbs.add(cb3); cbs.add(cb3);
cbs.add(cb4); cbs.add(cb4);
return searcher(page, pagesize, cbs); return searcher(search, cbs);
} }
protected SearchResult<C> searcher(int page, int pagesize, List<FacadeCallback<C>> list) { protected SearchResult<C> searcher(SearchQuery search, List<FacadeCallback<C>> list) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<C> listCQuery = cb.createQuery(getEntityClass()); CriteriaQuery<C> listCQuery = cb.createQuery(getEntityClass());
...@@ -169,9 +170,9 @@ public abstract class GenericFacade<C extends ModelInterface> { ...@@ -169,9 +170,9 @@ public abstract class GenericFacade<C extends ModelInterface> {
TypedQuery<Long> countQ = getEm().createQuery(countCQuery); TypedQuery<Long> countQ = getEm().createQuery(countCQuery);
TypedQuery<C> listQ = getEm().createQuery(listCQuery); TypedQuery<C> listQ = getEm().createQuery(listCQuery);
if (pagesize > 0) { if (search.getPagesize() > 0) {
listQ.setFirstResult(page * pagesize); listQ.setFirstResult(search.getPage() * search.getPagesize());
listQ.setMaxResults(pagesize); listQ.setMaxResults(search.getPagesize());
} }
...@@ -201,52 +202,55 @@ public abstract class GenericFacade<C extends ModelInterface> { ...@@ -201,52 +202,55 @@ public abstract class GenericFacade<C extends ModelInterface> {
} }
@Deprecated // @Deprecated
protected List<C> search(int page, int pagesize, String query, String[] fields, String orderfield) { // protected List<C> search(int page, int pagesize, String query, String[]
// fields, String orderfield) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); //
CriteriaQuery<C> cq = cb.createQuery(getEntityClass()); // CriteriaBuilder cb = getEm().getCriteriaBuilder();
// CriteriaQuery<C> cq = cb.createQuery(getEntityClass());
Root<C> root = cq.from(getEntityClass()); //
// Root<C> root = cq.from(getEntityClass());
addPredicates(cq, root, query, fields); //
// addPredicates(cq, root, query, fields);
TypedQuery<C> q = getEm().createQuery(cq); //
if (pagesize > 0) { // TypedQuery<C> q = getEm().createQuery(cq);
q.setFirstResult(page * pagesize); // if (pagesize > 0) {
q.setMaxResults(pagesize); // q.setFirstResult(page * pagesize);
// q.setMaxResults(pagesize);
} //
List<C> ret = q.getResultList(); // }
return ret; // List<C> ret = q.getResultList();
} // return ret;
// }
@Deprecated //
protected void addPredicates(CriteriaQuery<?> cq, Root<C> root, String query, String[] fields) { // @Deprecated
CriteriaBuilder cb = getEm().getCriteriaBuilder(); // protected void addPredicates(CriteriaQuery<?> cq, Root<C> root, String
if (query != null && !query.isEmpty() && fields != null && fields.length > 0) { // query, String[] fields) {
List<Predicate> preds = new ArrayList<Predicate>(); // CriteriaBuilder cb = getEm().getCriteriaBuilder();
for (String field : fields) { // if (query != null && !query.isEmpty() && fields != null && fields.length
Path<String> rootfield = root.get(field); // > 0) {
preds.add(cb.like(cb.lower(rootfield), query)); // List<Predicate> preds = new ArrayList<Predicate>();
} // for (String field : fields) {
cq.where(cb.or(preds.toArray(new Predicate[preds.size()]))); // Path<String> rootfield = root.get(field);
} // preds.add(cb.like(cb.lower(rootfield), query));
// }
} // cq.where(cb.or(preds.toArray(new Predicate[preds.size()])));
// }
@Deprecated //
protected long searchCount(String query, String[] fields) { // }
CriteriaBuilder cb = getEm().getCriteriaBuilder(); //
CriteriaQuery<Long> cq = cb.createQuery(Long.class); // @Deprecated
Root<C> root = cq.from(getEntityClass()); // protected long searchCount(String query, String[] fields) {
// CriteriaBuilder cb = getEm().getCriteriaBuilder();
addPredicates(cq, root, query, fields); // CriteriaQuery<Long> cq = cb.createQuery(Long.class);
cq.select(getEm().getCriteriaBuilder().count(root)); // Root<C> root = cq.from(getEntityClass());
//
TypedQuery<Long> q = getEm().createQuery(cq); // addPredicates(cq, root, query, fields);
return q.getSingleResult(); // cq.select(getEm().getCriteriaBuilder().count(root));
} //
// TypedQuery<Long> q = getEm().createQuery(cq);
// return q.getSingleResult();
// }
// @Deprecated // @Deprecated
// public List<C> findAll(int page, int pagesize, String sort) { // public List<C> findAll(int page, int pagesize, String sort) {
......
...@@ -27,6 +27,7 @@ import fi.insomnia.bortal.model.EventUser_; ...@@ -27,6 +27,7 @@ import fi.insomnia.bortal.model.EventUser_;
import fi.insomnia.bortal.model.LanEvent; 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.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
@Stateless @Stateless
...@@ -104,17 +105,17 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -104,17 +105,17 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
return super.merge(user); return super.merge(user);
} }
public SearchResult<User> searchAllUsers(int page, int pagesize, String sort, String search) { public SearchResult<User> searchAllUsers(SearchQuery search) {
List<FacadeCallback<User>> callbacks = new ArrayList<FacadeCallback<User>>(); List<FacadeCallback<User>> callbacks = new ArrayList<FacadeCallback<User>>();
if (sort == null || sort.isEmpty()) { if (search.getSort() == null || search.getSort().isEmpty()) {
callbacks.add(new OrderCallback<User>(false, User_.id)); callbacks.add(new OrderCallback<User>(false, User_.id));
} else { } else {
callbacks.add(new OrderCallback<User>(false, sort)); callbacks.add(new OrderCallback<User>(false, search.getSort()));
} }
callbacks.add(new StringSearchPredicateCreator<User>(search, getAttrlist())); callbacks.add(new StringSearchPredicateCreator<User>(search.getSearch(), getAttrlist()));
return super.searcher(page, pagesize, callbacks); return super.searcher(search, callbacks);
// return this.search(page, pagesize, query, NAMEFIELDS, sort); // return this.search(page, pagesize, query, NAMEFIELDS, sort);
} }
...@@ -147,7 +148,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -147,7 +148,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
public SearchResult<User> searchEventUsers(int page, int pagesize, String sort, String search) public SearchResult<User> searchEventUsers(SearchQuery query)
{ {
ArrayList<FacadeCallback<EventUser>> callbacks = new ArrayList<FacadeCallback<EventUser>>(); ArrayList<FacadeCallback<EventUser>> callbacks = new ArrayList<FacadeCallback<EventUser>>();
callbacks.add(new OrderCallback<EventUser>(false, EventUser_.id)); callbacks.add(new OrderCallback<EventUser>(false, EventUser_.id));
...@@ -167,9 +168,9 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -167,9 +168,9 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
TypedQuery<Long> countQ = getEm().createQuery(countCQuery); TypedQuery<Long> countQ = getEm().createQuery(countCQuery);
TypedQuery<User> listQ = getEm().createQuery(listCQuery); TypedQuery<User> listQ = getEm().createQuery(listCQuery);
if (pagesize > 0) { if (query.getPagesize() > 0) {
listQ.setFirstResult(page * pagesize); listQ.setFirstResult(query.getPage() * query.getPagesize());
listQ.setMaxResults(pagesize); listQ.setMaxResults(query.getPagesize());
} }
return new SearchResult<User>(listQ.getResultList(), countQ.getSingleResult()); return new SearchResult<User>(listQ.getResultList(), countQ.getSingleResult());
} }
......
...@@ -3,13 +3,14 @@ package fi.insomnia.bortal.beans; ...@@ -3,13 +3,14 @@ package fi.insomnia.bortal.beans;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LogEntry; import fi.insomnia.bortal.model.LogEntry;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
@Local @Local
public interface LoggingBeanLocal { public interface LoggingBeanLocal {
LogEntry logMessage(SecurityLogType paramType, User user, Object... description); LogEntry logMessage(SecurityLogType paramType, LanEvent event, User user, Object... description);
LogEntry logMessage(SecurityLogType paramType, EventUser user, Object... description); LogEntry logMessage(SecurityLogType paramType, EventUser user, Object... description);
......
...@@ -10,6 +10,7 @@ import fi.insomnia.bortal.model.GroupMembership; ...@@ -10,6 +10,7 @@ import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User; 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.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
@Local @Local
...@@ -17,9 +18,9 @@ public interface UserBeanLocal { ...@@ -17,9 +18,9 @@ public interface UserBeanLocal {
List<EventUser> getUsers(); List<EventUser> getUsers();
SearchResult<User> getUsers(int page, int pagesize, String sort, String search); SearchResult<User> getUsers(SearchQuery search);
SearchResult<User> getEventUsers(int page, int pagesize, String sort, String search); SearchResult<User> getEventUsers(SearchQuery search);
EventUser mergeChanges(EventUser user); EventUser mergeChanges(EventUser user);
......
...@@ -5,7 +5,7 @@ import javax.annotation.Generated; ...@@ -5,7 +5,7 @@ import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel; import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-05-12T19:23:44.258+0300") @Generated(value="Dali", date="2012-09-11T02:27:08.849+0300")
@StaticMetamodel(LogEntry.class) @StaticMetamodel(LogEntry.class)
public class LogEntry_ extends GenericEntity_ { public class LogEntry_ extends GenericEntity_ {
public static volatile SingularAttribute<LogEntry, LanEvent> parentEvent; public static volatile SingularAttribute<LogEntry, LanEvent> parentEvent;
......
...@@ -6,9 +6,10 @@ import javax.persistence.metamodel.ListAttribute; ...@@ -6,9 +6,10 @@ import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel; import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-09-09T02:58:31.995+0300") @Generated(value="Dali", date="2012-09-10T17:55:33.516+0300")
@StaticMetamodel(Reader.class) @StaticMetamodel(Reader.class)
public class Reader_ extends GenericEntity_ { public class Reader_ extends GenericEntity_ {
public static volatile SingularAttribute<Reader, ReaderType> type;
public static volatile SingularAttribute<Reader, LanEvent> event; public static volatile SingularAttribute<Reader, LanEvent> event;
public static volatile SingularAttribute<Reader, Integer> gamepoints; public static volatile SingularAttribute<Reader, Integer> gamepoints;
public static volatile SingularAttribute<Reader, Integer> maxEvents; public static volatile SingularAttribute<Reader, Integer> maxEvents;
...@@ -20,5 +21,4 @@ public class Reader_ extends GenericEntity_ { ...@@ -20,5 +21,4 @@ public class Reader_ extends GenericEntity_ {
public static volatile SingularAttribute<Reader, Integer> mapX; public static volatile SingularAttribute<Reader, Integer> mapX;
public static volatile SingularAttribute<Reader, Integer> mapY; public static volatile SingularAttribute<Reader, Integer> mapY;
public static volatile ListAttribute<Reader, ReaderEvent> events; public static volatile ListAttribute<Reader, ReaderEvent> events;
public static volatile SingularAttribute<Reader, ReaderType> type;
} }
package fi.insomnia.bortal.utilities;
import java.io.Serializable;
public class SearchQuery implements Serializable {
private static final long serialVersionUID = -8777921789916093938L;
private int page = 0;
private int pagesize = 20;
private String sort = null;
private String search = null;
public SearchQuery()
{
super();
}
public SearchQuery(int page, int pagesize, String sort, String search) {
super();
this.page = page;
this.pagesize = pagesize;
this.sort = sort;
this.search = search;
}
public int getPage() {
return page;
}
public void setPage(int page) {
if (page < 0) {
this.page = 0;
} else
{
this.page = page;
}
}
public int getPagesize() {
if (pagesize < 1) {
pagesize = 20;
}
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
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 void addPage(Integer count) {
if (count != null) {
page += count;
}
}
}
...@@ -46,13 +46,13 @@ ...@@ -46,13 +46,13 @@
<ui:repeat varStatus="idx" value="#{billEditView.checkoutFiToken}" var="bank"> <ui:repeat varStatus="idx" value="#{billEditView.checkoutFiToken}" var="bank">
<td> <td>
<form action="#{bank.url}" method="post"> <form action="#{bank.url}" method="post">
<ui:repeat value="#{bank.postParams}" var="valp" > <ui:repeat value="#{bank.postParams}" var="valp">
<input type="hidden" name="#{valp.key}" value="#{valp.value}" /> <input type="hidden" name="#{valp.key}" value="#{valp.value}" />
</ui:repeat> </ui:repeat>
<input type='image' src='#{bank.icon}' /> <input type='image' src='#{bank.icon}' />
</form> </form>
</td> </td>
<h:outputText escape="false" value="&lt;/tr>&lt;tr>" rendered="#{idx.index % 4 == 3}"/> <h:outputText escape="false" value="&lt;/tr>&lt;tr>" rendered="#{idx.index % 4 == 3}" />
</ui:repeat> </ui:repeat>
</tr> </tr>
</table> </table>
......
...@@ -71,6 +71,48 @@ ...@@ -71,6 +71,48 @@
</h:panelGrid> </h:panelGrid>
</h:panelGrid> </h:panelGrid>
<h2>#{i18n['bill.billLines']}</h2>
<h:dataTable styleClass="border" border="1" value="#{cc.attrs.bill.billLines}" var="line">
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.name']}" />
</f:facet>
<h:outputText value="#{line.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.quantity']}" />
</f:facet>
<h:outputText value="#{line.quantity}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.unitName']}" />
</f:facet>
<h:outputText value="#{line.unitName}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.unitPrice']}" />
</f:facet>
<h:outputText value="#{line.unitPrice}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['billine.linePrice']}" />
</f:facet>
<h:outputText value="#{line.linePrice}">
<f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
</h:outputText>
</h:column>
</h:dataTable>
</composite:implementation> </composite:implementation>
</html> </html>
...@@ -222,3 +222,11 @@ td ul { ...@@ -222,3 +222,11 @@ td ul {
float: left; float: left;
margin: 4px; margin: 4px;
} }
table {
border-collapse: collapse;
}
table.border td,table.border th {
padding: 1px 4px;
}
\ No newline at end of file
...@@ -38,6 +38,7 @@ bill.addr5 = Address 5 ...@@ -38,6 +38,7 @@ bill.addr5 = Address 5
bill.address = Payers address bill.address = Payers address
bill.billAmount = Bill amount bill.billAmount = Bill amount
bill.billIsPaid = Bill is paid bill.billIsPaid = Bill is paid
bill.billLines = Products
bill.billNumber = Bill number bill.billNumber = Bill number
bill.billPaidDate = Paid date bill.billPaidDate = Paid date
bill.deliveryTerms = Delivery terms bill.deliveryTerms = Delivery terms
...@@ -63,6 +64,7 @@ bill.totalPrice = Total ...@@ -63,6 +64,7 @@ bill.totalPrice = Total
billedit.billnotfound = Bill not found. Select again. billedit.billnotfound = Bill not found. Select again.
billine.linePrice = Total
billine.name = Product billine.name = Product
billine.quantity = Quantity billine.quantity = Quantity
billine.referencedProduct = Referenced product billine.referencedProduct = Referenced product
......
...@@ -38,6 +38,7 @@ bill.addr5 = Osoite 5 ...@@ -38,6 +38,7 @@ bill.addr5 = Osoite 5
bill.address = Maksajan osoite bill.address = Maksajan osoite
bill.billAmount = Laskun summa bill.billAmount = Laskun summa
bill.billIsPaid = Lasku on maksettu bill.billIsPaid = Lasku on maksettu
bill.billLines = Tuotteet
bill.billNumber = Laskun numero bill.billNumber = Laskun numero
bill.billPaidDate = Maksup\u00E4iv\u00E4 bill.billPaidDate = Maksup\u00E4iv\u00E4
bill.deliveryTerms = Toimitusehdot bill.deliveryTerms = Toimitusehdot
...@@ -61,6 +62,7 @@ bill.show = N\u00E4yt\u00E4 ...@@ -61,6 +62,7 @@ bill.show = N\u00E4yt\u00E4
bill.theirReference = Asiakkaan viite bill.theirReference = Asiakkaan viite
bill.totalPrice = Laskun summa bill.totalPrice = Laskun summa
billine.linePrice = Yhteens\u00E4
billine.name = Tuote billine.name = Tuote
billine.quantity = Lukum\u00E4\u00E4r\u00E4 billine.quantity = Lukum\u00E4\u00E4r\u00E4
billine.referencedProduct = Tuoteviittaus billine.referencedProduct = Tuoteviittaus
......
...@@ -7,18 +7,20 @@ import javax.faces.model.ListDataModel; ...@@ -7,18 +7,20 @@ import javax.faces.model.ListDataModel;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.utilities.SearchResult; import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.jpa.ModelInterface; import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class PaginationView<T extends ModelInterface> extends GenericCDIView implements IPaginationView { public abstract class PaginationView<T extends ModelInterface> extends GenericCDIView implements IPaginationView {
private static final long serialVersionUID = -1226554409762987631L; private static final long serialVersionUID = -1226554409762987631L;
protected Integer page = 0; // protected Integer page = 0;
protected Integer pagesize = 20; // protected Integer pagesize = 20;
private SearchQuery searchQuery = new SearchQuery();
protected Long resultcount = 0L; protected Long resultcount = 0L;
private Long pagecount = 0L; private Long pagecount = 0L;
protected String sort; // protected String sort;
protected String search; // protected String search;
private List<T> results; private List<T> results;
private ListDataModel<T> resultdatamodel; private ListDataModel<T> resultdatamodel;
private static Logger logger = LoggerFactory.getLogger(PaginationView.class); private static Logger logger = LoggerFactory.getLogger(PaginationView.class);
...@@ -32,11 +34,10 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -32,11 +34,10 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
public String addToPage(Integer count) { public String addToPage(Integer count) {
pagechangeCallback(); pagechangeCallback();
if (count != null) { searchQuery.addPage(count);
page += count;
} if (searchQuery.getPage() >= pagecount) {
if (page >= pagecount) { searchQuery.setPage(pagecount.intValue() - 1);
page = pagecount.intValue() - 1;
} }
return null; return null;
} }
...@@ -50,17 +51,14 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -50,17 +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();
page = 0; searchQuery.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();
page = pagecount.intValue() - 1; searchQuery.setPage(pagecount.intValue() - 1);
if (page < 0) {
page = 0;
}
return null; return null;
} }
...@@ -74,23 +72,20 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -74,23 +72,20 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
@Override @Override
public Integer getPage() { public Integer getPage() {
return page; return searchQuery.getPage();
} }
public void setPage(Integer page) { public void setPage(Integer page) {
this.page = page; searchQuery.setPage(page);
} }
@Override @Override
public Integer getPagesize() { public Integer getPagesize() {
if (pagesize < 1) { return searchQuery.getPagesize();
pagesize = 20;
}
return pagesize;
} }
public void setPagesize(Integer pagesize) { public void setPagesize(Integer pagesize) {
this.pagesize = pagesize; searchQuery.setPagesize(pagesize);
} }
@Override @Override
...@@ -100,7 +95,7 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -100,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 + pagesize - 1) / pagesize); pagecount = ((resultcount + searchQuery.getPagesize() - 1) / searchQuery.getPagesize());
} }
@Override @Override
...@@ -113,24 +108,24 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -113,24 +108,24 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
} }
public String getSort() { public String getSort() {
return sort; return searchQuery.getSort();
} }
public void setSort(String sort) { public void setSort(String sort) {
this.sort = sort; searchQuery.setSort(sort);
} }
public String getSearch() { public String getSearch() {
return search; return searchQuery.getSearch();
} }
public void setSearch(String search) { public void setSearch(String search) {
this.search = search; searchQuery.setSearch(search);
} }
public String newSearch() { public String newSearch() {
logger.info("Setting new Search for pagination.."); logger.info("Setting new Search for pagination..");
page = 0; setPage(0);
setResults(null); setResults(null);
resultdatamodel = null; resultdatamodel = null;
return null; return null;
...@@ -145,4 +140,12 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD ...@@ -145,4 +140,12 @@ public abstract class PaginationView<T extends ModelInterface> extends GenericCD
resultdatamodel = null; resultdatamodel = null;
} }
public SearchQuery getSearchQuery() {
return searchQuery;
}
public void setSearchQuery(SearchQuery searchQuery) {
this.searchQuery = searchQuery;
}
} }
...@@ -23,6 +23,7 @@ import fi.insomnia.bortal.model.EventMap; ...@@ -23,6 +23,7 @@ import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Place; import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.web.annotations.SelectedUser; import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
...@@ -153,7 +154,7 @@ public class PlaceView extends GenericCDIView { ...@@ -153,7 +154,7 @@ public class PlaceView extends GenericCDIView {
public String searchUser() { public String searchUser() {
super.beginConversation(); super.beginConversation();
userlist = new ListDataModel<User>(userbean.getUsers(0, 0, null, searchuser).getResults()); userlist = new ListDataModel<User>(userbean.getUsers(new SearchQuery(0, 0, null, searchuser)).getResults());
return null; return null;
} }
......
...@@ -17,6 +17,7 @@ import fi.insomnia.bortal.enums.apps.ShopPermission; ...@@ -17,6 +17,7 @@ import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.ReaderEvent; import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.SearchQuery;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named @Named
...@@ -72,7 +73,7 @@ public class ReaderView extends GenericCDIView { ...@@ -72,7 +73,7 @@ public class ReaderView extends GenericCDIView {
if (usersearch == null || usersearch.length() < 2) { if (usersearch == null || usersearch.length() < 2) {
super.addFaceMessage("user.tooShortSearch"); super.addFaceMessage("user.tooShortSearch");
} else { } else {
userlist = UserCardWrapper.initWrapper(userbean.getUsers(0, 0, null, usersearch).getResults(), userbean); userlist = UserCardWrapper.initWrapper(userbean.getUsers(new SearchQuery(0, 0, null, usersearch)).getResults(), userbean);
} }
return null; return null;
......
...@@ -23,7 +23,7 @@ public class UserSearchView extends PaginationView<User> { ...@@ -23,7 +23,7 @@ public class UserSearchView extends PaginationView<User> {
public void initView() { public void initView() {
if (requirePermissions(permbean.hasPermission(UserPermission.VIEW_ALL))) { if (requirePermissions(permbean.hasPermission(UserPermission.VIEW_ALL))) {
super.setResult(userbean.getEventUsers(page, pagesize, sort, search)); super.setResult(userbean.getEventUsers(getSearchQuery()));
} }
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!