UserSearchRepositoryImpl.java
package com.tradecloud.repository.user;
import java.util.List;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.tradecloud.authentication.User;
import com.tradecloud.dto.user.UserSearch;
import com.tradecloud.repository.GeneralRepository;
import com.tradecloud.repository.SearchMetaParams;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
@Repository(value = "userSearchRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class UserSearchRepositoryImpl extends RepositoryBaseImpl<User, UserSearch> implements UserSearchRepository {
private static final String LIKE = "%";
private static final long serialVersionUID = 1L;
private static Logger log = Logger.getLogger(UserSearchRepositoryImpl.class);
@Autowired
private GeneralRepository generalRepository;
@SuppressWarnings("unchecked")
@Override
public List<User> search(UserSearch search) {
String query = addSearchRestrictions(search);
SearchMetaParams searchMetaParams = search.getSearchMetaParams();
Query result = getSession().createQuery(query);
if (null != searchMetaParams) {
result.setMaxResults(searchMetaParams.getRowCount());
result.setFirstResult(searchMetaParams.getRowIndex());
}
return result.list();
}
@SuppressWarnings("unchecked")
@Override
public long countByCriteria(UserSearch search) {
String query = addSearchRestrictions(search);
Query result = getSession().createQuery(query);
List<User> userList = result.list();
long count = userList.size();
log.debug("Count for Class: User is " + count);
return count;
}
private String addSearchRestrictions(UserSearch search) {
StringBuilder stringBuilder = new StringBuilder(" from User where enabled = ");
stringBuilder.append(search.isEnabled() + " ");
boolean whereClause = true;
if (search.getUsername() != null) {
stringBuilder.append(whereClause == true ? " and " : " where ");
stringBuilder.append("lower(username) like '" + LIKE + search.getUsername().trim().toLowerCase() + LIKE + "'");
whereClause = true;
}
if (search.getOrganisationalUnit() != null) {
OrganisationalUnit organisationalUnit = generalRepository.findByCode(OrganisationalUnit.class, search.getOrganisationalUnit());
stringBuilder.append(whereClause == true ? " and " : " where ");
String organisationalUnits = "";
for (OrganisationalUnit organisationalUnit1 : organisationalUnit.getChildren()) {
organisationalUnits += " '" + organisationalUnit1.getCode().trim() + "',";
}
organisationalUnits +=" '" + organisationalUnit.getCode()+"'";
stringBuilder.append("organisationalUnit in (" + organisationalUnits + ")");
whereClause = true;
}
if (search.getFirstName() != null || search.getLastName() != null) {
if (search.getFirstName() != null) {
stringBuilder.append(whereClause == true ? " and " : " where ");
stringBuilder.append("lower(userInfo.firstName) like '" + LIKE + search.getFirstName().trim().toLowerCase() + LIKE + "'");
}
if (search.getLastName() != null) {
stringBuilder.append(whereClause == true ? " and " : " where ");
stringBuilder.append("lower(userInfo.lastName) like '" + LIKE + search.getLastName().trim().toLowerCase() + LIKE + "'");
}
}
stringBuilder.append(" order by username ");
return stringBuilder.toString();
}
}