package io.oasp.gastronomy.restaurant.staffmanagement.dataaccess.impl.dao;
import static com.mysema.query.alias.Alias.$;
import io.oasp.gastronomy.restaurant.general.common.api.constants.NamedQueries;
import io.oasp.gastronomy.restaurant.general.common.api.datatype.Role;
import io.oasp.gastronomy.restaurant.general.dataaccess.base.dao.ApplicationMasterDataDaoImpl;
import io.oasp.gastronomy.restaurant.staffmanagement.dataaccess.api.StaffMemberEntity;
import io.oasp.gastronomy.restaurant.staffmanagement.dataaccess.api.dao.StaffMemberDao;
import io.oasp.gastronomy.restaurant.staffmanagement.logic.api.to.StaffMemberSearchCriteriaTo;
import io.oasp.module.jpa.common.api.to.PaginatedListTo;
import javax.inject.Named;
import javax.persistence.TypedQuery;
import com.mysema.query.alias.Alias;
import com.mysema.query.jpa.impl.JPAQuery;
import com.mysema.query.types.path.EntityPathBase;
/**
* Implementation of {@link StaffMemberDao}.
*
*/
@Named
public class StaffMemberDaoImpl extends ApplicationMasterDataDaoImpl<StaffMemberEntity> implements StaffMemberDao {
/**
* The constructor.
*/
public StaffMemberDaoImpl() {
super();
}
@Override
public Class<StaffMemberEntity> getEntityClass() {
return StaffMemberEntity.class;
}
@Override
public StaffMemberEntity findByLogin(String login) {
TypedQuery<StaffMemberEntity> query =
getEntityManager().createNamedQuery(NamedQueries.GET_STAFF_MEMBER_BY_LOGIN, StaffMemberEntity.class);
query.setParameter("login", login);
return query.getSingleResult();
}
/**
* {@inheritDoc}
*/
@Override
public PaginatedListTo<StaffMemberEntity> findStaffMembers(StaffMemberSearchCriteriaTo criteria) {
StaffMemberEntity staffMember = Alias.alias(StaffMemberEntity.class);
EntityPathBase<StaffMemberEntity> alias = $(staffMember);
JPAQuery query = new JPAQuery(getEntityManager()).from(alias);
String firstName = criteria.getFirstName();
if (firstName != null) {
query.where($(staffMember.getFirstName()).eq(firstName));
}
String lastName = criteria.getLastName();
if (lastName != null) {
query.where($(staffMember.getLastName()).eq(lastName));
}
String name = criteria.getName();
if (name != null) {
query.where($(staffMember.getName()).eq(name));
}
Role role = criteria.getRole();
if (role != null) {
query.where($(staffMember.getRole()).eq(role));
}
return findPaginated(criteria, query, alias);
}
}