package edu.ualberta.med.biobank.server.reports;
import java.util.ArrayList;
import java.util.List;
import edu.ualberta.med.biobank.common.reports.BiobankReport;
import edu.ualberta.med.biobank.model.AliquotedSpecimen;
import edu.ualberta.med.biobank.model.SpecimenType;
import gov.nih.nci.system.applicationservice.ApplicationException;
import gov.nih.nci.system.applicationservice.WritableApplicationService;
import gov.nih.nci.system.query.hibernate.HQLCriteria;
public class SpecimenTypeReport2 extends AbstractReport {
private final static String USED_SPECIMEN_TYPES_QUERY = "SELECT alqs.specimenType.nameShort," //$NON-NLS-1$
+ " alqs.study.nameShort" //$NON-NLS-1$
+ (" FROM " + AliquotedSpecimen.class.getName() + " alqs ") //$NON-NLS-1$ //$NON-NLS-2$
+ " ORDER BY alqs.specimenType.nameShort, alqs.study.nameShort"; //$NON-NLS-1$
private final static String NOT_USED_QUERY = "SELECT st.nameShort " //$NON-NLS-1$
+ (" FROM " + SpecimenType.class.getName() + " st ") //$NON-NLS-1$ //$NON-NLS-2$
+ " WHERE st not in (SELECT ss.specimenType " //$NON-NLS-1$
+ (" FROM " + AliquotedSpecimen.class.getName() + " ss") + ")" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ "ORDER BY st.nameShort"; //$NON-NLS-1$
public SpecimenTypeReport2(BiobankReport report) {
super("", report); //$NON-NLS-1$
}
@Override
public List<Object> executeQuery(WritableApplicationService appService)
throws ApplicationException {
List<Object> results = new ArrayList<Object>();
List<Object> parameters = report.getParams();
HQLCriteria c1 = new HQLCriteria(USED_SPECIMEN_TYPES_QUERY, parameters);
results.addAll(appService.query(c1));
HQLCriteria c2 = new HQLCriteria(NOT_USED_QUERY, parameters);
results.addAll(specialPostProcess(appService.query(c2)));
return results;
}
protected List<Object> specialPostProcess(List<Object> results) {
List<Object> expandedResults = new ArrayList<Object>();
for (Object ob : results) {
expandedResults
.add(new Object[] {
ob,
Messages
.getString(
"SpecimenTypeSUsageImpl.unused.label", report.getLocale()) }); //$NON-NLS-1$
}
return expandedResults;
}
}