VipFacade.java 2.87 KB
package fi.codecrew.moya.facade;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
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;

import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.facade.callbacks.StringSearchPredicateCreator;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.Vip;
import fi.codecrew.moya.model.Vip_;
import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult;
import fi.codecrew.moya.utilities.jpa.FacadeCallback;

@Stateless
@LocalBean
public class VipFacade extends IntegerPkGenericFacade<Vip> {

	private static List<SingularAttribute<Vip, String>> SEARCHATTRS;

	public static List<SingularAttribute<Vip, String>> getAttrlist() {
		if (SEARCHATTRS == null) {
			ArrayList<SingularAttribute<Vip, String>> buildAttrs = new ArrayList<>();

			buildAttrs.add(Vip_.description);
			buildAttrs.add(Vip_.shortdescr);

			SEARCHATTRS = Collections.unmodifiableList(buildAttrs);
		}
		return SEARCHATTRS;
	}

	public VipFacade() {
		super(Vip.class);
	}

	@EJB
	private EventBeanLocal eventBean;

	public List<Vip> findForEvent() {
		CriteriaBuilder cb = getEm().getCriteriaBuilder();
		CriteriaQuery<Vip> cq = cb.createQuery(Vip.class);
		Root<Vip> root = cq.from(Vip.class);
		LanEvent event = eventBean.getCurrentEvent();

		cq.where(cb.equal(root.get(Vip_.event), event));
		return getEm().createQuery(cq).getResultList();
	}

	public SearchResult<Vip> search(SearchQuery search) {

		List<FacadeCallback<Vip>> callbacks = new ArrayList<>();

		// Ascending if null or not descending..
		// boolean asc = search.getSortDirection() == null ||
		// !QuerySortOrder.DESCENDING.equals(search.getSortDirection());
		// SingularAttribute<? super User, ?> sortfield =
		// getUserField(search.getSort());
		// callbacks.add(new OrderCallback<Vip>(asc, sortfield));
		if (search.getSearch() != null && !search.getSearch().isEmpty())
			callbacks.add(new StringSearchPredicateCreator<Vip>(search.getSearch(), getAttrlist()));

		LanEvent event = eventBean.getCurrentEvent();
		callbacks.add(new VipEventLimiter(event));
		return super.searcher(search, callbacks);
		// return this.search(page, pagesize, query, NAMEFIELDS, sort);

	}

	private static class VipEventLimiter implements FacadeCallback<Vip> {

		private LanEvent ev;

		public VipEventLimiter(LanEvent event) {
			this.ev = event;
		}

		

		@Override
		public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Path<Vip> root, List<Predicate> predicates, boolean isFullQuery) {
			predicates.add(cb.equal(root.get(Vip_.event), ev));
		}


	}
}