package is.idega.idegaweb.egov.bpm.cases.search.impl;
import is.idega.idegaweb.egov.cases.business.CasesBusiness;
import java.util.Arrays;
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.block.process.business.CasesRetrievalManager;
import com.idega.presentation.IWContext;
import com.idega.util.ArrayUtil;
import com.idega.util.CoreConstants;
import com.idega.util.CoreUtil;
import com.idega.util.ListUtil;
import com.idega.util.StringUtil;
@Service
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class GeneralCasesFilter extends DefaultCasesListSearchFilter {
@Override
public List<Integer> getSearchResults(List<Integer> casesIds) {
IWContext iwc = CoreUtil.getIWContext();
CasesBusiness casesBusiness = getCasesBusiness();
String description = getDescription() == null ? null : getDescription().toLowerCase(iwc.getCurrentLocale());
Collection<Integer> casesIDs = null;
try {
casesIDs = casesBusiness.getCasesIDsByCriteria(null, description, getName(), getPersonalId(), getStatuses(), getDateFrom(),
getDateTo(), null, null, false, CasesRetrievalManager.CASE_LIST_TYPE_USER.equals(getCaseListType()));
} catch (Exception e) {
getLogger().log(Level.WARNING, "Error getting cases by criterias", e);
}
List<Integer> casesByCriteria = null;
if (casesIDs != null && ListUtil.isEmpty(casesIDs)) {
getLogger().log(Level.INFO, new StringBuilder("No cases found by criterias: description: ").append(getDescription()).append(", name: ")
.append(getName()).append(", personalId: ").append(getPersonalId()).append(", statuses: ").append(getStatuses())
.append(", dateRange: ").append(getDateRange())
.toString());
} else {
casesByCriteria = getUniqueIds(casesIDs);
getLogger().log(Level.INFO, "Cases by criterias: " + casesByCriteria);
}
return casesByCriteria;
}
@Override
protected String getInfo() {
return "Looking for cases by criteria: " + getDescription();
}
@Override
protected String getFilterKey() {
return new StringBuffer().append(getDescription() == null ? CoreConstants.MINUS : getDescription())
.append(getName() == null ? CoreConstants.MINUS : getName())
.append(getPersonalId() == null ? CoreConstants.MINUS : getPersonalId())
.append(getStatuses() == null ? CoreConstants.MINUS : Arrays.asList(getStatuses()))
.append(getDateFrom() == null ? CoreConstants.MINUS : getDateFrom())
.append(getDateTo() == null ? CoreConstants.MINUS : getDateTo())
.toString();
}
@Override
protected boolean isFilterKeyDefined() {
if (StringUtil.isEmpty(getDescription()) && StringUtil.isEmpty(getName()) && StringUtil.isEmpty(getPersonalId()) &&
ArrayUtil.isEmpty(getStatuses()) && getDateFrom() == null && getDateTo() == null) {
getLogger().log(Level.INFO, "None of general criterias (description, name, personal ID, statuses, dates) are defined, not filtering by it!");
return false;
}
return true;
}
}