package edu.ualberta.med.biobank.common.wrappers; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import edu.ualberta.med.biobank.common.peer.LogPeer; import edu.ualberta.med.biobank.common.util.AbstractRowPostProcess; import edu.ualberta.med.biobank.common.util.PostProcessListProxy; import edu.ualberta.med.biobank.common.wrappers.base.LogBaseWrapper; import edu.ualberta.med.biobank.model.Log; import gov.nih.nci.system.applicationservice.ApplicationException; import gov.nih.nci.system.applicationservice.WritableApplicationService; import gov.nih.nci.system.query.hibernate.HQLCriteria; @SuppressWarnings("nls") public class LogWrapper extends LogBaseWrapper { public LogWrapper(WritableApplicationService appService) { super(appService); } public LogWrapper(WritableApplicationService appService, Log log) { super(appService, log); } @Deprecated public static List<LogWrapper> getLogs( final WritableApplicationService appService, String center, String username, Date startDate, Date endDate, String action, String patientNumber, String inventoryId, String locationLabel, String details, String type) { StringBuffer parametersString = new StringBuffer(); List<Object> parametersArgs = new ArrayList<Object>(); addParam(parametersString, parametersArgs, LogPeer.USERNAME.getName(), username, true); StringBuffer datePart = new StringBuffer(); if ((startDate != null) && (endDate != null)) { datePart.append(" ").append(LogPeer.CREATED_AT.getName()) .append(" >= ? and ").append(LogPeer.CREATED_AT.getName()) .append(" <= ?"); parametersArgs.add(startDate); parametersArgs.add(endDate); } else if (startDate != null) { datePart.append(" ").append(LogPeer.CREATED_AT.getName()) .append(" >= ?"); parametersArgs.add(startDate); } else if (endDate != null) { datePart.append(" ").append(LogPeer.CREATED_AT.getName()) .append(" <= ?"); parametersArgs.add(endDate); } if (datePart.length() > 0) { if (parametersString.length() > 0) { parametersString.append(" and"); } parametersString.append(" " + datePart); } addParam(parametersString, parametersArgs, LogPeer.CENTER.getName(), center, true); addParam(parametersString, parametersArgs, LogPeer.ACTION.getName(), action, true); addParam(parametersString, parametersArgs, LogPeer.PATIENT_NUMBER.getName(), patientNumber, true); addParam(parametersString, parametersArgs, LogPeer.INVENTORY_ID.getName(), inventoryId, true); addLocationLabelParam(parametersString, parametersArgs, locationLabel); addParam(parametersString, parametersArgs, LogPeer.DETAILS.getName(), details, false); addParam(parametersString, parametersArgs, LogPeer.TYPE.getName(), type, true); StringBuilder qry = new StringBuilder("from ").append(Log.class .getName()); if (parametersString.length() > 0) { qry.append(" where").append(parametersString.toString()); } List<LogWrapper> logs = new PostProcessListProxy<LogWrapper>( appService, new HQLCriteria(qry.toString(), parametersArgs), new AbstractRowPostProcess() { private static final long serialVersionUID = 1L; @Override public Object rowPostProcess(Object element) { return new LogWrapper(appService, (Log) element); } }); return logs; } private static void addParam(StringBuffer sb, List<Object> parameters, String property, Object value, boolean strict) { if (value != null) { if (sb.length() > 0) { sb.append(" and"); } sb.append(" ").append(property); if (strict) { sb.append("=?"); parameters.add(value); } else { sb.append(" like ?"); parameters.add("%" + value + "%"); } } } private static void addLocationLabelParam(StringBuffer sb, List<Object> parameters, Object value) { if (value != null) { if (sb.length() > 0) { sb.append(" and"); } sb.append(" ").append(LogPeer.LOCATION_LABEL.getName()) .append(" like ?"); parameters.add(value + " (%"); } } public static final String POSSIBLE_CENTERS_QRY = "select distinct(" + LogPeer.CENTER.getName() + ") from " + Log.class.getName() + " where " + LogPeer.CENTER.getName() + "!='' ORDER BY " + LogPeer.CENTER.getName(); public static List<String> getPossibleCenters( WritableApplicationService appService) throws ApplicationException { return appService.query(new HQLCriteria(POSSIBLE_CENTERS_QRY)); } public static final String POSSIBLE_USER_NAMES_QRY = "select distinct(" + LogPeer.USERNAME.getName() + ") from " + Log.class.getName() + " ORDER BY " + LogPeer.USERNAME.getName(); public static List<String> getPossibleUsernames( WritableApplicationService appService) throws ApplicationException { return appService.query(new HQLCriteria(POSSIBLE_USER_NAMES_QRY)); } public static final String POSSIBLE_ACTIONS_QRY = "select distinct(" + LogPeer.ACTION.getName() + ") from " + Log.class.getName() + " ORDER BY " + LogPeer.ACTION.getName(); public static List<String> getPossibleActions( WritableApplicationService appService) throws ApplicationException { return appService.query(new HQLCriteria(POSSIBLE_ACTIONS_QRY)); } public static final String POSSIBLE_TYPES_QRY = "select distinct(" + LogPeer.TYPE.getName() + ") from " + Log.class.getName() + " where type !='' ORDER BY " + LogPeer.TYPE.getName(); public static List<String> getPossibleTypes( WritableApplicationService appService) throws ApplicationException { return appService.query(new HQLCriteria(POSSIBLE_TYPES_QRY)); } @Override public String toString() { return getCreatedAt() + " -- " + LogPeer.ACTION.getName() + ": " + getAction() + " / " + LogPeer.TYPE.getName() + ": " + getType() + " / " + LogPeer.PATIENT_NUMBER.getName() + ": " + getPatientNumber() + " / " + LogPeer.INVENTORY_ID.getName() + ": " + getInventoryId() + " / " + LogPeer.LOCATION_LABEL.getName() + ": " + getLocationLabel() + " / " + LogPeer.DETAILS.getName() + ": " + getDetails(); } @SuppressWarnings("rawtypes") private static Map<String, Property> logFields; /** * Used on the server side */ @SuppressWarnings({ "unchecked", "rawtypes" }) public synchronized void setLogStringValue(String attributeName, String value) throws Exception { if (logFields == null) { logFields = new HashMap<String, Property>(); for (Field field : LogPeer.class.getFields()) { if (field.getType().getName().equals(Property.class.getName()) && Modifier.isStatic(field.getModifiers())) { Property property = (Property) field.get(null); logFields.put(property.getName(), property); } } } Property property = logFields.get(attributeName); if (property != null) setProperty(property, value); } }