package is.idega.idegaweb.egov.bpm.cases.search.impl; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.logging.Level; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import com.idega.presentation.IWContext; import com.idega.user.data.User; import com.idega.util.CoreUtil; import com.idega.util.ListUtil; import com.idega.util.StringUtil; @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) public class ContactsFilter extends DefaultCasesListSearchFilter { @Override public List<Integer> getSearchResults(List<Integer> casesIds) { String contact = getContact(); List<Integer> casesByContact = getCasesByContactQuery(CoreUtil.getIWContext(), contact); if (ListUtil.isEmpty(casesByContact)) { getLogger().log(Level.INFO, "No BPM cases found by contact: " + contact); } else { getLogger().log(Level.INFO, "Found BPM cases by contact: " + contact); } return casesByContact; } @Override protected String getInfo() { return "Looking for cases by contact: " + getContact(); } private List<Integer> getCasesByContactQuery(IWContext iwc, String contact) { if (StringUtil.isEmpty(contact)) return null; Collection<User> usersByContactInfo = getUserBusiness().getUsersByNameOrEmailOrPhone(contact); if (ListUtil.isEmpty(usersByContactInfo)) { return null; } List<Integer> casesByContactPerson = null; final List<Integer> casesByContact = new ArrayList<Integer>(); for (User contactPerson: usersByContactInfo) { try { casesByContactPerson = getConvertedFromNumbers(getCasesBPMDAO().getCaseIdsByProcessInstanceIds(getRolesManager().getProcessInstancesIdsForUser(iwc, contactPerson, false))); } catch(Exception e) { getLogger().log(Level.SEVERE, "Error getting case IDs from contact query: " + contact, e); } if (!ListUtil.isEmpty(casesByContactPerson)) { for (Integer caseId: casesByContactPerson) { if (!casesByContact.contains(caseId)) { casesByContact.add(caseId); } } } } return casesByContact; } @Override protected String getFilterKey() { return getContact(); } @Override protected boolean isFilterKeyDefined() { String contact = getContact(); if (StringUtil.isEmpty(contact)) { getLogger().info("Contact query is not defined, not filtering by it!"); return false; } return true; } }