UserSearchView.java 5.77 KB
package fi.codecrew.moya.web.cdiview.user;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.User;
import fi.codecrew.moya.util.UserSearchQuery;
import fi.codecrew.moya.utilities.SearchQuery.QuerySortOrder;
import fi.codecrew.moya.utilities.SearchResult;
import fi.codecrew.moya.utilities.jpa.ModelInterface;
import fi.codecrew.moya.web.cdiview.PaginationView;
import fi.codecrew.moya.web.cdiview.user.UserSearchView.UserWrapper;

@Named
@ConversationScoped
public class UserSearchView extends PaginationView<UserWrapper> {

	public static class UserWrapper implements ModelInterface {

		private static final long serialVersionUID = 8881170508994116964L;
		private final User user;
		private final EventUser eventuser;

		public UserWrapper(User u, EventUser eventUser) {
			this.user = u;
			this.eventuser = eventUser;
		}

		public User getUser() {
			return user;
		}

		public EventUser getEventuser() {
			return eventuser;
		}

		@Override
		public Integer getId() {
			return user.getId();
		}

		@Override
		public void setId(Integer id) {
			user.setId(id);

		}

	}

	/**
	 * 
	 */
	private static final long serialVersionUID = -7131921062890234604L;

	@EJB
	private transient UserBeanLocal userbean;
	private List<EventUser> eventUserResults;
	@Inject
	private UserCartView usercart;

	private UserSearchQuery usersearch = new UserSearchQuery();

	private LazyDataModel<EventUser> eventuserModel;
	private LazyDataModel<UserWrapper> userModel;

	private static final Logger logger = LoggerFactory.getLogger(UserSearchView.class);

	public void addToCart()
	{
		int pagesize = usersearch.getPagesize();
		int page = usersearch.getPage();
		usersearch.setPagesize(999999999);
		usersearch.setPage(0);

		SearchResult<EventUser> eventusers = userbean.getThisEventsUsers(usersearch);
		usercart.addUsers(eventusers.getResults());
		usersearch.setPagesize(pagesize);
		usersearch.setPage(page);
		super.beginConversation();
	}

	public void initView() {

		if (requirePermissions(permbean.hasPermission(UserPermission.VIEW_ALL))) {
			super.setSort("id");
			eventuserModel = new LazyDataModel<EventUser>() {

				private static final long serialVersionUID = 1L;

				@Override
				public List<EventUser> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
					UserSearchQuery sq = getSearchQuery();
					sq.setPagesize(pageSize);
					if (pageSize > 0) {
						sq.setPage(first / pageSize);
					}

					sq.setSort(sortField);
					sq.setSortDirection(SortOrder.ASCENDING.equals(sortOrder) ? QuerySortOrder.ASCENDING : (SortOrder.DESCENDING.equals(sortOrder) ? QuerySortOrder.DESCENDING : QuerySortOrder.UNSORTED));
					SearchResult<EventUser> sr = userbean.getThisEventsUsers(sq);
					logger.info("sortfield {}, order {}, querysort: {}", sortField, sortOrder, sq.getSortDirection());

					this.setRowCount(new Long(sr.getResultcount()).intValue());
					this.setWrappedData(sr.getResults());

					setResultcount(sr.getResultcount());
					setEventUserResults(sr.getResults());

					return sr.getResults();

				}

				@Override
				public void setRowIndex(int rowIndex) {
					if (getPageSize() == 0) {
						rowIndex = -1;
					}
					super.setRowIndex(rowIndex);
				}

			};

			userModel = new LazyDataModel<UserWrapper>() {

				private static final long serialVersionUID = 1L;

				@Override
				public List<UserWrapper> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {

					UserSearchQuery sq = getSearchQuery();
					sq.setPagesize(pageSize);
					if (pageSize > 0) {
						sq.setPage(first / pageSize);
					}
					if (sortField == null || sortField.isEmpty()) {
						sortField = "id";
					}
					sq.setSort(sortField);
					sq.setSortDirection(SortOrder.ASCENDING.equals(sortOrder) ? QuerySortOrder.ASCENDING : (SortOrder.DESCENDING.equals(sortOrder) ? QuerySortOrder.DESCENDING : QuerySortOrder.UNSORTED));

					SearchResult<User> sr = userbean.getUsers(sq);

					this.setRowCount(new Long(sr.getResultcount()).intValue());
					setResultcount(sr.getResultcount());

					List<UserWrapper> wrappers = getUserWrappers(sr.getResults());
					setResults(wrappers);
					this.setWrappedData(wrappers);
					return wrappers;

				}

				@Override
				public void setRowIndex(int rowIndex) {
					if (getPageSize() == 0) {
						rowIndex = -1;
					}
					super.setRowIndex(rowIndex);
				}

			};

			super.beginConversation();
		}
	}

	@Override
	public String newSearch() {
		String ret = super.newSearch();
		return ret;
	}

	private List<UserWrapper> getUserWrappers(List<User> users)
	{
		ArrayList<UserWrapper> res = new ArrayList<UserWrapper>();
		for (User u : users) {
			res.add(new UserWrapper(u, userbean.getEventUser(u, false)));
		}
		return res;
	}

	@Override
	public UserSearchQuery getSearchQuery()
	{
		return usersearch;
	}

	public List<EventUser> getEventUserResults() {
		return eventUserResults;
	}

	public void setEventUserResults(List<EventUser> eventUserResults) {
		this.eventUserResults = eventUserResults;
	}

	public LazyDataModel<EventUser> getEventuserModel() {
		return eventuserModel;
	}

	public void setEventuserModel(LazyDataModel<EventUser> eventuserModel) {
		this.eventuserModel = eventuserModel;
	}

	public LazyDataModel<UserWrapper> getUserModel() {
		return userModel;
	}

	public void setUserModel(LazyDataModel<UserWrapper> userModel) {
		this.userModel = userModel;
	}

}