package org.akaza.openclinica.dao.managestudy; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class ListNotesFilter implements CriteriaCommand { List<Filter> filters = new ArrayList<Filter>(); HashMap<String, String> columnMapping = new HashMap<String, String>(); public ListNotesFilter() { columnMapping.put("studySubject.label", "ss.label"); columnMapping.put("siteId", "ss.label"); columnMapping.put("studySubject.labelExact", "ss.label"); columnMapping.put("discrepancyNoteBean.createdDate", "dn.date_created"); columnMapping.put("discrepancyNoteBean.updatedDate", "dn.date_created"); columnMapping.put("discrepancyNoteBean.description", "dn.description"); columnMapping.put("discrepancyNoteBean.user", "ua.user_name"); columnMapping.put("discrepancyNoteBean.disType", "dn.discrepancy_note_type_id"); columnMapping.put("discrepancyNoteBean.entityType", "dn.entity_type"); columnMapping.put("discrepancyNoteBean.resolutionStatus", "dn.resolution_status_id"); columnMapping.put("age", "age"); columnMapping.put("days", "days"); } public void addFilter(String property, Object value) { filters.add(new Filter(property, value)); } public String execute(String criteria) { String theCriteria = ""; for (Filter filter : filters) { if (columnMapping.get(filter.getProperty()) == null) { continue; } theCriteria += buildCriteria(criteria, filter.getProperty(), filter.getValue()); } return theCriteria; } private String buildCriteria(String criteria, String property, Object value) { if (value != null) { if (property.equals("studySubject.labelExact")){ criteria = criteria + " and "; criteria = criteria + " UPPER(" + columnMapping.get(property) + ") = UPPER('" + value.toString() + "')" + " "; }else if (property.equals("studySubject.label") || property.equals("discrepancyNoteBean.description") || property.equals("discrepancyNoteBean.user")) { criteria = criteria + " and "; criteria = criteria + " UPPER(" + columnMapping.get(property) + ") like UPPER('%" + value.toString() + "%')" + " "; } else if (property.equals("siteId")) { criteria = criteria + " and "; criteria = criteria + "ss.study_id in ( SELECT study_id FROM study WHERE unique_identifier like '%"+ value.toString() +"%')"; } else if (property.equals("age")) { if(value.toString().startsWith(">") || value.toString().startsWith("<") || value.toString().startsWith("=")){ criteria = criteria + " and "; criteria = criteria + " age " + value.toString(); } } else if (property.equals("days")) { if(value.toString().startsWith(">") || value.toString().startsWith("<") || value.toString().startsWith("=")){ criteria = criteria + " and "; criteria = criteria + " days " + value.toString(); } } else if ("discrepancyNoteBean.disType".equalsIgnoreCase(property)) { if("31".equals(value.toString())) { criteria = criteria + " and "; criteria = criteria + " (dn.discrepancy_note_type_id = 1 or dn.discrepancy_note_type_id = 3)"; } else { criteria = criteria + " and "; criteria = criteria + " " + columnMapping.get(property) + " = '" + value.toString() + "' "; } } else if ("discrepancyNoteBean.resolutionStatus".equalsIgnoreCase(property)) { if("21".equals(value.toString())) { criteria = criteria + " and "; criteria = criteria + " (dn.resolution_status_id = 1 or dn.resolution_status_id = 2)"; } else { criteria = criteria + " and "; criteria = criteria + " " + columnMapping.get(property) + " = '" + value.toString() + "' "; } } else if ("discrepancyNoteBean.createdDate".equalsIgnoreCase(property) || "discrepancyNoteBean.updatedDate".equalsIgnoreCase(property) ) { criteria = criteria + " and "; criteria = criteria + " " + columnMapping.get(property) + "::timestamp::date = '" + value.toString() + "' "; } else { criteria = criteria + " and "; criteria = criteria + " " + columnMapping.get(property) + " = '" + value.toString() + "' "; } } return criteria; } public static class Filter { private final String property; private final Object value; public Filter(String property, Object value) { this.property = property; this.value = value; } public String getProperty() { return property; } public Object getValue() { return value; } } public List<Filter> getFilters() { return filters; } }