package org.jboss.seam.wiki.core.action; import org.jboss.seam.annotations.*; import org.jboss.seam.annotations.datamodel.DataModel; import org.jboss.seam.ScopeType; import org.jboss.seam.international.StatusMessages; import org.jboss.seam.wiki.core.dao.UserDAO; import org.jboss.seam.wiki.core.model.User; import static org.jboss.seam.international.StatusMessage.Severity.INFO; import java.util.List; import java.io.Serializable; @Name("userSearch") @Scope(ScopeType.CONVERSATION) public class UserSearch implements Serializable { @In private UserDAO userDAO; @In private StatusMessages statusMessages; private User exampleUser; private String orderByProperty; private boolean orderDescending; private String[] ignoreProperties; private int rowCount; private int maxPageSize; private int pageSize; private int page; @DataModel private List<User> usersList; @Create public void initialize() { pageSize = 15; maxPageSize = 1000; exampleUser = new User(); orderByProperty = "username"; orderDescending = false; ignoreProperties = new String[]{"passwordHash", "activated", "createdOn", "lastLoginOn", "ratingScore" }; } public void find() { page = 0; queryRowCount(); if (rowCount != 0) queryUsers(); } public void nextPage() { page++; queryUsers(); } public void previousPage() { page--; queryUsers(); } public void firstPage() { page = 0; queryUsers(); } public void lastPage() { page = (rowCount / pageSize); if (rowCount % pageSize == 0) page--; queryUsers(); } private void queryRowCount() { rowCount = userDAO.getRowCountByExample(exampleUser, ignoreProperties); if (rowCount == 0) { statusMessages.addFromResourceBundleOrDefault( INFO, "lacewiki.msg.NoUserFound", "No user with given attributes was found, please try again." ); } } private void queryUsers() { usersList = userDAO.findByExample(exampleUser, orderByProperty, orderDescending, page * pageSize, pageSize, ignoreProperties); } public boolean isNextPageAvailable() { return usersList != null && rowCount > ((page * pageSize) + pageSize); } public boolean isPreviousPageAvailable() { return usersList != null && page > 0; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize > maxPageSize ? maxPageSize : pageSize; // Prevent tampering } public int getRowCount() { return rowCount; } public User getExampleUser() { return exampleUser; } public void setExampleUser(User exampleUser) { this.exampleUser = exampleUser; } public String getOrderByProperty() { return orderByProperty; } public boolean isOrderDescending() { return orderDescending; } public void sortBy(String propertyName) { orderByProperty = propertyName; orderDescending = !isOrderDescending(); // Switch between ASC and DESC page = 0; // Reset to first page queryUsers(); } }