List of usage examples for org.hibernate Query setParameterList
Query<R> setParameterList(int position, Object[] values);
From source file:au.org.theark.core.dao.StudyDao.java
License:Open Source License
private List<Long> getSubjectIdsForBioCollectionIds(List<Long> bioCollectionIdsToInclude) { if (bioCollectionIdsToInclude == null || bioCollectionIdsToInclude.isEmpty()) { return new ArrayList<Long>(); }/*w w w .j a v a 2s .c o m*/ String queryString = "select bio.linkSubjectStudy.id from BioCollection bio " + " where bio.id in (:bioCollectionIdsToInclude) "; Query query = getSession().createQuery(queryString); query.setParameterList("bioCollectionIdsToInclude", bioCollectionIdsToInclude); return query.list(); }
From source file:au.org.theark.core.dao.StudyDao.java
License:Open Source License
private List<Long> getBioCollectionIdForSubjectIds(List<Long> subjectIds) { if (subjectIds == null || subjectIds.isEmpty()) { return new ArrayList<Long>(); }/* ww w . jav a 2s . com*/ String queryString = "select bc.id from BioCollection bc " + " where bc.linkSubjectStudy.id in (:subjectIds) "; Query query = getSession().createQuery(queryString); query.setParameterList("subjectIds", subjectIds); return query.list(); }
From source file:au.org.theark.core.dao.StudyDao.java
License:Open Source License
/** * This will get all the pheno data for the given subjects FOR THIS ONE CustomFieldGroup aka questionaire (aka data set) * /*from w w w. jav a2 s . com*/ * @param allTheData * @param search * @param idsToInclude * @return the updated list of uids that are still left after the filtering. */ private List<Long> applyPhenoDataSetFilters(DataExtractionVO allTheData, Search search, List<Long> idsToInclude) { Set<QueryFilter> filters = search.getQueryFilters(); Collection<PhenoDataSetGroup> pdsgWithFilters = getPhenoDataSetGroupsForPhenoFilters(search, filters); List<Long> phenoCollectionIdsSoFar = new ArrayList<Long>(); for (PhenoDataSetGroup phenoGroup : pdsgWithFilters) { log.info("Pheno group: " + phenoGroup.getName()); if (idsToInclude != null && !idsToInclude.isEmpty()) { String queryToGetPhenoIdsForGivenSearchAndCFGFilters = getQueryForPhenoIdsForSearchAndCFGFilters( search, phenoGroup); if (!queryToGetPhenoIdsForGivenSearchAndCFGFilters.isEmpty()) { Query query = getSession().createQuery(queryToGetPhenoIdsForGivenSearchAndCFGFilters); query.setParameterList("idList", idsToInclude);//TODO ASAP...this should be pheno list and not subjuid list now QueryTranslatorFactory translatorFactory = new ASTQueryTranslatorFactory(); SessionFactoryImplementor factory = (SessionFactoryImplementor) getSession() .getSessionFactory(); QueryTranslator translator = translatorFactory.createQueryTranslator(query.getQueryString(), query.getQueryString(), Collections.EMPTY_MAP, factory); translator.compile(Collections.EMPTY_MAP, false); log.info(translator.getSQLString()); List<Long> phenosForThisCFG = query.list(); phenoCollectionIdsSoFar.addAll(phenosForThisCFG); log.info("rows returned = " + phenoCollectionIdsSoFar.size()); } else { log.info("there were no pheno custom data filters, therefore don't run filter query"); } } else { log.info("there are no id's to filter. therefore won't run filtering query"); } } //now that we have all the phenoCollection IDs...get the updated list of subjects if (phenoCollectionIdsSoFar.isEmpty()) { if (!pdsgWithFilters.isEmpty()) { //there were no phenocollectionid's returned because they were validly filtered. leave idsToIncludeAsItWas idsToInclude = new ArrayList<Long>(); } else { //there were no filters so just leave the list of subjects ias it was } } else { idsToInclude = getSubjectIdsForPhenoDataIds(phenoCollectionIdsSoFar); } //now that we have the pheno collection id, we just find the data for the selected customfields if (!idsToInclude.isEmpty()) { Collection<PhenoDataSetFieldDisplay> customFieldToGet = getSelectedPhenoDataSetFieldDisplaysForSearch( search);//getSelectedPhenoCustomFieldDisplaysForSearch(search); // We have the list of phenos, and therefore the list of pheno custom data - now bring back all the custom data rows IF they have any data they need if ((!phenoCollectionIdsSoFar.isEmpty() || (phenoCollectionIdsSoFar.isEmpty() && pdsgWithFilters.isEmpty())) && !customFieldToGet.isEmpty()) { String queryString = "select data from PhenoDataSetData data " + " left join fetch data.phenoDataSetCollection phenoDataSetCollection" + " left join fetch data.phenoDataSetFieldDisplay phenoDataSetFieldDisplay " + " left join fetch phenoDataSetFieldDisplay.phenoDataSetField phenoField " + (((phenoCollectionIdsSoFar.isEmpty() && pdsgWithFilters.isEmpty()) ? (" where data.phenoDataSetCollection.linkSubjectStudy.id in (:idsToInclude) ") : (" where data.phenoDataSetCollection.id in (:phenoIdsToInclude)"))) + " and data.phenoDataSetFieldDisplay in (:customFieldsList)" + " order by data.phenoDataSetCollection.id"; Query query2 = getSession().createQuery(queryString); if (phenoCollectionIdsSoFar.isEmpty() && pdsgWithFilters.isEmpty()) { query2.setParameterList("idsToInclude", idsToInclude); } else { query2.setParameterList("phenoIdsToInclude", phenoCollectionIdsSoFar); } query2.setParameterList("customFieldsList", customFieldToGet); QueryTranslatorFactory translatorFactory = new ASTQueryTranslatorFactory(); SessionFactoryImplementor factory = (SessionFactoryImplementor) getSession().getSessionFactory(); QueryTranslator translator = translatorFactory.createQueryTranslator(query2.getQueryString(), query2.getQueryString(), Collections.EMPTY_MAP, factory); translator.compile(Collections.EMPTY_MAP, false); log.info(translator.getSQLString()); List<PhenoDataSetData> phenoData = query2.list(); HashMap<String, ExtractionVO> hashOfPhenosWithTheirPhenoCustomData = allTheData .getPhenoCustomData(); ExtractionVO valuesForThisPheno = new ExtractionVO(); HashMap<String, String> map = null; Long previousPhenoId = null; //will try to order our results and can therefore just compare to last LSS and either add to or create new Extraction VO for (PhenoDataSetData data : phenoData) { if (previousPhenoId == null) { map = new HashMap<String, String>(); previousPhenoId = data.getPhenoDataSetCollection().getId(); valuesForThisPheno.setSubjectUid( data.getPhenoDataSetCollection().getLinkSubjectStudy().getSubjectUID()); valuesForThisPheno.setRecordDate(data.getPhenoDataSetCollection().getRecordDate()); valuesForThisPheno .setCollectionName(data.getPhenoDataSetCollection().getQuestionnaire().getName()); } else if (data.getPhenoDataSetCollection().getId().equals(previousPhenoId)) { //then just put the data in } else { //if its a new LSS finalize previous map, etc valuesForThisPheno.setKeyValues(map); hashOfPhenosWithTheirPhenoCustomData.put(("" + previousPhenoId), valuesForThisPheno); previousPhenoId = data.getPhenoDataSetCollection().getId(); map = new HashMap<String, String>();//reset valuesForThisPheno = new ExtractionVO(); valuesForThisPheno.setSubjectUid( data.getPhenoDataSetCollection().getLinkSubjectStudy().getSubjectUID()); valuesForThisPheno.setRecordDate(data.getPhenoDataSetCollection().getRecordDate()); valuesForThisPheno .setCollectionName(data.getPhenoDataSetCollection().getQuestionnaire().getName()); } //if any error value, then just use that - though, yet again I really question the acceptance of error data if (data.getErrorDataValue() != null && !data.getErrorDataValue().isEmpty()) { map.put(data.getPhenoDataSetFieldDisplay().getPhenoDataSetField().getName(), data.getErrorDataValue()); } else { // Determine field type and assign key value accordingly if (data.getPhenoDataSetFieldDisplay().getPhenoDataSetField().getFieldType().getName() .equalsIgnoreCase(Constants.FIELD_TYPE_DATE)) { map.put(data.getPhenoDataSetFieldDisplay().getPhenoDataSetField().getName(), data.getDateDataValue().toString()); } if (data.getPhenoDataSetFieldDisplay().getPhenoDataSetField().getFieldType().getName() .equalsIgnoreCase(Constants.FIELD_TYPE_NUMBER)) { map.put(data.getPhenoDataSetFieldDisplay().getPhenoDataSetField().getName(), data.getNumberDataValue().toString()); } if (data.getPhenoDataSetFieldDisplay().getPhenoDataSetField().getFieldType().getName() .equalsIgnoreCase(Constants.FIELD_TYPE_CHARACTER)) { map.put(data.getPhenoDataSetFieldDisplay().getPhenoDataSetField().getName(), data.getTextDataValue()); } } } //finalize the last entered key value sets/extraction VOs if (map != null && previousPhenoId != null) { valuesForThisPheno.setKeyValues(map); hashOfPhenosWithTheirPhenoCustomData.put("" + previousPhenoId, valuesForThisPheno); } //can probably now go ahead and add these to the dataVO...even though inevitable further filters may further axe this list or parts of it. allTheData.setPhenoCustomData(hashOfPhenosWithTheirPhenoCustomData); } } return idsToInclude; }
From source file:au.org.theark.core.dao.StudyDao.java
License:Open Source License
/** * For now this is just forcing all the fields into one new file listing the geno info, given that I believe this whole model will change to include real genetic * analysis going forward, rather than just discussing WHERE the data is and WHAT was done to it. For now they get all of that info * /*from ww w . j av a 2s . com*/ * @param allTheData * @param search * @param idsAfterFiltering * @param maxProcessesPerPipeline */ private Long addGenoData(DataExtractionVO allTheData, Search search, List<Long> idsAfterFiltering, Map<Long, Long> maxInputList, Map<Long, Long> maxOutputList, Long maxProcessesPerPipeline) { log.info("idsAfterFiltering" + idsAfterFiltering); if (!idsAfterFiltering.isEmpty()) { //note. filtering is happening previously...we then do the fetch when we have narrowed down the list of subjects to save a lot of processing String queryString = "select lssp from LinkSubjectStudyPipeline lssp " + " where lssp.linkSubjectStudy.id in (:idsToInclude) " // stoing this to an lss means we should fetch lss and pipeline..and process + " order by lssp.linkSubjectStudy.id "; Query query = getSession().createQuery(queryString); query.setParameterList("idsToInclude", idsAfterFiltering); List<LinkSubjectStudyPipeline> subjectPipelines = query.list(); List<LinkedExtractionVO> allGenoData = allTheData.getGenoData(); log.info("count=" + ((subjectPipelines == null) ? "0" : subjectPipelines.size())); /* this is putting the data we extracted into a generic kind of VO doc that will be converted to an appopriate format later (such as csv/xls/pdf/xml/etc) */ for (LinkSubjectStudyPipeline lssp : subjectPipelines) { log.info("adding geno info for lss= " + lssp.getLinkSubjectStudy().getId()); LinkedExtractionVO sev = new LinkedExtractionVO(); // todo with geno in some way sev.setKeyValues(constructKeyValueHashmap(lss, personFields, lssFields, addressFields, phoneFields)); LinkedHashMap map = new LinkedHashMap<String, String>(); sev.setSubjectUid(lssp.getLinkSubjectStudy().getSubjectUID()); /* * public static final String GENO_FIELDS_PIPELINE_ID = "pipelineId"; public static final String GENO_FIELDS_PIPELINE_NAME = "pipelineName"; public static final String GENO_FIELDS_PIPELINE_DECSRIPTION = "pipelineDescription"; public static final String GENO_FIELDS_PROCESS_ID = "processId"; public static final String GENO_FIELDS_PROCESS_NAME = "processName"; public static final String GENO_FIELDS_PROCESS_DESCRIPTION = "processDescription"; public static final String GENO_FIELDS_PROCESS_START_TIME = "startTime"; public static final String GENO_FIELDS_PROCESS_END_TIME = "endTime"; public static final String GENO_FIELDS_PROCESS_COMMAND_SERVER_URL = "commandServerUrl"; public static final String GENO_FIELDS_PROCESS_COMMAND_NAME = "commandName"; public static final String GENO_FIELDS_PROCESS_COMMAND_LOCATION = "commandLocation"; // public static final String GENO_FIELDS_PROCESS_COMMAND_INPUT_FILE_FORMAT; // public static final String GENO_FIELDS_PROCESS_COMMAND_OUTPUT_FILE_FORMAT; public static final String GENO_FIELDS_PROCESS_INPUT_SERVER = "inputServer"; public static final String GENO_FIELDS_PROCESS_INPUT_LOCATION = "inputLocation"; public static final String GENO_FIELDS_PROCESS_INPUT_FILE_HASH = "inputFileHash"; public static final String GENO_FIELDS_PROCESS_INPUT_FILE_TYPE = "inputFileType"; public static final String GENO_FIELDS_PROCESS_INPUT_KEPT = "outputKept"; public static final String GENO_FIELDS_PROCESS_OUTPUT_SERVER = "outputServer"; public static final String GENO_FIELDS_PROCESS_OUTPUT_LOCATION = "outputLocation"; public static final String GENO_FIELDS_PROCESS_OUTPUT_FILE_HASH = "outputFileHash"; public static final String GENO_FIELDS_PROCESS_OUTPUT_FILE_TYPE = "outputFileType"; public static final String GENO_FIELDS_PROCESS_OUTPUT_KEPT = "outputKept";*/ //TODO : NULL CHECK EVERY SINGLE APPROPRIATE PLACE //TODO ASAP : change this to do all fields in a precise order (possibly defined somewhere common) Pipeline pl = lssp.getPipeline(); map.put(Constants.GENO_FIELDS_PIPELINE_ID, pl.getId().toString()); map.put(Constants.GENO_FIELDS_PIPELINE_NAME, pl.getName()); map.put(Constants.GENO_FIELDS_PIPELINE_DECSRIPTION, pl.getDescription()); long processIndex = 0L; log.info("we have process..." + pl.getPipelineProcesses().size()); for (Process p : pl.getPipelineProcesses()) { processIndex++; if (processIndex >= maxProcessesPerPipeline) { log.info("processIndex maxProcessesPerPipeline = " + processIndex + " " + maxProcessesPerPipeline); maxProcessesPerPipeline = Long.valueOf(processIndex); } else { log.info("processIndex maxProcessesPerPipeline = " + processIndex + " " + maxProcessesPerPipeline); } //TODO : obvbiously need to pre=append the pipeline info/count too map.put((Constants.GENO_FIELDS_PROCESS_ID + (processIndex > 1 ? ("_" + processIndex) : "")), p.getId().toString()); map.put((Constants.GENO_FIELDS_PROCESS_NAME + (processIndex > 1 ? ("_" + processIndex) : "")), p.getName()); map.put((Constants.GENO_FIELDS_PROCESS_DESCRIPTION + (processIndex > 1 ? ("_" + processIndex) : "")), p.getDescription()); map.put((Constants.GENO_FIELDS_PROCESS_START_TIME + (processIndex > 1 ? ("_" + processIndex) : "")), p.getStartTime() != null ? p.getStartTime().toLocaleString() : ""); map.put((Constants.GENO_FIELDS_PROCESS_END_TIME + (processIndex > 1 ? ("_" + processIndex) : "")), p.getEndTime() != null ? p.getEndTime().toLocaleString() : ""); Command command = p.getCommand(); map.put((Constants.GENO_FIELDS_PROCESS_COMMAND_NAME + (processIndex > 1 ? ("_" + processIndex) : "")), (command == null ? "" : command.getName())); map.put((Constants.GENO_FIELDS_PROCESS_COMMAND_LOCATION + (processIndex > 1 ? ("_" + processIndex) : "")), (command == null ? "" : command.getLocation())); map.put((Constants.GENO_FIELDS_PROCESS_COMMAND_SERVER_URL + (processIndex > 1 ? ("_" + processIndex) : "")), (command == null ? "" : command.getServerUrl())); //map.put((Constants.GENO_FIELDS_PROCESS_COMMAND_LOCATION + (index>1?("_"+index):"")), (command==null?"":command.getName()));//space keeper for file format info //map.put((Constants.GENO_FIELDS_PROCESS_COMMAND_LOCATION + (index>1?("_"+index):"")), (command==null?"":command.getName())); Set<ProcessInput> inputs = p.getProcessInputs(); long inputIndex = 0L; for (ProcessInput input : inputs) { inputIndex++; map.put((Constants.GENO_FIELDS_PROCESS_INPUT_SERVER + "_" + processIndex + "_" + inputIndex), (input == null ? "" : input.getInputServer())); map.put((Constants.GENO_FIELDS_PROCESS_INPUT_LOCATION + "_" + processIndex + "_" + inputIndex), (input == null ? "" : input.getinputFileLocation())); map.put((Constants.GENO_FIELDS_PROCESS_INPUT_FILE_HASH + "_" + processIndex + "_" + inputIndex), (input == null ? "" : input.getInputFileHash())); map.put((Constants.GENO_FIELDS_PROCESS_INPUT_FILE_TYPE + "_" + processIndex + "_" + inputIndex), (input == null ? "" : input.getInputFileType())); map.put((Constants.GENO_FIELDS_PROCESS_INPUT_KEPT + "_" + processIndex + "_" + inputIndex), (input == null ? "" : ("" + input.getInputKept()))); //TODO ASAP : now put all the input info in with a similar _<index> suffix } long maxInputCurrent = (maxInputList.get(processIndex) == null) ? 0L : maxInputList.get(processIndex);//get the procesIndex'th max input and see if it is bigger than maxInputList.put(processIndex, (maxInputCurrent > inputIndex) ? maxInputCurrent : inputIndex); long outputIndex = 0L; Set<ProcessOutput> outputs = p.getProcessOutputs(); for (ProcessOutput output : outputs) { outputIndex++;//TODO ASAP : now put all the output info in with a similar _<index> suffix map.put((Constants.GENO_FIELDS_PROCESS_OUTPUT_SERVER + "_" + processIndex + "_" + outputIndex), (output == null ? "" : output.getOutputServer())); map.put((Constants.GENO_FIELDS_PROCESS_OUTPUT_LOCATION + "_" + processIndex + "_" + outputIndex), (output == null ? "" : output.getOutputFileLocation())); map.put((Constants.GENO_FIELDS_PROCESS_OUTPUT_FILE_HASH + "_" + processIndex + "_" + outputIndex), (output == null ? "" : output.getOutputFileHash())); map.put((Constants.GENO_FIELDS_PROCESS_OUTPUT_FILE_TYPE + "_" + processIndex + "_" + outputIndex), (output == null ? "" : output.getOutputFileType())); map.put((Constants.GENO_FIELDS_PROCESS_OUTPUT_KEPT + "_" + processIndex + "_" + outputIndex), (output == null ? "" : ("" + output.getOutputKept()))); } long maxOutputCurrent = (maxOutputList.get(processIndex) == null) ? 0L : maxOutputList.get(processIndex);//get the procesOutdex'th max output and see if it is bigger than maxOutputList.put(processIndex, (maxOutputCurrent > outputIndex) ? maxOutputCurrent : outputIndex); /* public static final String GENO_FIELDS_PROCESS_INPUT_SERVER = "inputServer"; public static final String GENO_FIELDS_PROCESS_INPUT_LOCATION = "inputLocation"; public static final String GENO_FIELDS_PROCESS_INPUT_FILE_HASH = "inputFileHash"; public static final String GENO_FIELDS_PROCESS_INPUT_FILE_TYPE = "inputFileType"; public static final String GENO_FIELDS_PROCESS_INPUT_KEPT = "outputKept"; public static final String GENO_FIELDS_PROCESS_OUTPUT_SERVER = "outputServer"; public static final String GENO_FIELDS_PROCESS_OUTPUT_LOCATION = "outputLocation"; public static final String GENO_FIELDS_PROCESS_OUTPUT_FILE_HASH = "outputFileHash"; public static final String GENO_FIELDS_PROCESS_OUTPUT_FILE_TYPE = "outputFileType"; public static final String GENO_FIELDS_PROCESS_OUTPUT_KEPT = "outputKept"; */ //map.put((Constants.GENO_FIELDS_PROCESS_INPUT_KEPT + (index>1?("_"+index):"")), p.getId()); } sev.setKeyValues(map); allGenoData.add(sev); } } return maxProcessesPerPipeline; }
From source file:au.org.theark.core.dao.StudyDao.java
License:Open Source License
/** * /*w ww. j a va 2s.c om*/ * * @param allTheData * @param personFields * @param lssFields * @param addressFields * @param phoneFields * @param otherIDFields * @param subjectCFDs * @param search * @param idsAfterFiltering */ private void addDataFromMegaDemographicQuery(DataExtractionVO allTheData, Collection<DemographicField> personFields, Collection<DemographicField> lssFields, Collection<DemographicField> addressFields, Collection<DemographicField> phoneFields, Collection<DemographicField> otherIDFields, Collection<DemographicField> linkSubjectTwinsFields, Collection<CustomFieldDisplay> subjectCFDs, Search search, List<Long> idsAfterFiltering) { log.info("in addDataFromMegaDemographicQuery"); //if no id's, no need to run this if ((!lssFields.isEmpty() || !personFields.isEmpty() || !addressFields.isEmpty() || !phoneFields.isEmpty() || !linkSubjectTwinsFields.isEmpty() || !subjectCFDs.isEmpty()) && !idsAfterFiltering.isEmpty()) { // hasEmailFields(dfs) //note. filtering is happening previously...we then do the fetch when we have narrowed down the list of subjects to save a lot of processing String queryString = "select distinct lss " // , address, lss, email " + + " from LinkSubjectStudy lss " + ((!personFields.isEmpty()) ? " left join fetch lss.person person " : "") + ((!addressFields.isEmpty()) ? " left join lss.person.addresses a " : "") + ((!phoneFields.isEmpty()) ? " left join lss.person.phones p " : "") + ((!linkSubjectTwinsFields.isEmpty()) ? " left join lss.linkSubjectTwinsAsFirstSubject lstAsFirst " : "") + ((!linkSubjectTwinsFields.isEmpty()) ? " left join lss.linkSubjectTwinsAsSecondSubject lstAsSecond " : "") + " where lss.study.id = " + search.getStudy().getId() + " and lss.id in (:idsToInclude) " + " order by lss.subjectUID"; Query query = getSession().createQuery(queryString); query.setParameterList("idsToInclude", idsAfterFiltering); List<LinkSubjectStudy> subjects = query.list(); QueryTranslatorFactory translatorFactory = new ASTQueryTranslatorFactory(); SessionFactoryImplementor factory = (SessionFactoryImplementor) getSession().getSessionFactory(); QueryTranslator translator = translatorFactory.createQueryTranslator(query.getQueryString(), query.getQueryString(), Collections.EMPTY_MAP, factory); translator.compile(Collections.EMPTY_MAP, false); log.info(translator.getSQLString()); // DataExtractionVO devo; = new DataExtractionVO(); HashMap<String, ExtractionVO> hashOfSubjectsWithTheirDemographicData = allTheData.getDemographicData(); /* this is putting the data we extracted into a generic kind of VO doc that will be converted to an appopriate format later (such as csv/xls/pdf/xml/etc) */ for (LinkSubjectStudy lss : subjects) { ExtractionVO sev = new ExtractionVO(); sev.setKeyValues(constructKeyValueHashmap(lss, personFields, lssFields, addressFields, phoneFields, otherIDFields, linkSubjectTwinsFields)); hashOfSubjectsWithTheirDemographicData.put(lss.getSubjectUID(), sev); } } }
From source file:au.org.theark.core.dao.StudyDao.java
License:Open Source License
private List<Long> addDataFromMegaBiocollectionQuery(DataExtractionVO allTheData, Collection<BiocollectionField> biocollectionFields, Collection<CustomFieldDisplay> collectionCFDs, Search search, List<Long> idsToInclude, List<Long> biocollectionIdsAfterFiltering) { String bioCollectionFilters = getBiocollectionFilters(search); Collection<BioCollection> bioCollectionList = Collections.EMPTY_LIST; if (biocollectionFields.isEmpty() && bioCollectionFilters.isEmpty()) { if (idsToInclude.isEmpty()) { // no need - skip querying } else {/*from w w w . j a va 2 s . com*/ biocollectionIdsAfterFiltering = getBioCollectionIdForSubjectIds(idsToInclude); if (!biocollectionIdsAfterFiltering.isEmpty()) { bioCollectionList = getSession().createCriteria(BioCollection.class) .add(Restrictions.in("id", biocollectionIdsAfterFiltering)).list(); } } } if (!idsToInclude.isEmpty() && biocollectionIdsAfterFiltering.isEmpty() && (!bioCollectionFilters.isEmpty() || !biocollectionFields.isEmpty())) { StringBuffer queryBuffer = new StringBuffer("select distinct biocollection "); queryBuffer.append("from BioCollection biocollection "); // TODO: improve preformance by prefetch queryBuffer.append(" where biocollection.study.id = " + search.getStudy().getId()); if (!bioCollectionFilters.isEmpty()) { queryBuffer.append(bioCollectionFilters); } queryBuffer.append(" and biocollection.linkSubjectStudy.id in (:idsToInclude) "); Query query = getSession().createQuery(queryBuffer.toString()); query.setParameterList("idsToInclude", idsToInclude); bioCollectionList = query.list(); } HashSet uniqueSubjectIDs = new HashSet<Long>(); HashMap<String, ExtractionVO> hashOfBioCollectionData = allTheData.getBiocollectionData(); for (BioCollection bioCollection : bioCollectionList) { ExtractionVO sev = new ExtractionVO(); sev.setKeyValues(constructKeyValueHashmap(bioCollection, biocollectionFields)); hashOfBioCollectionData.put(bioCollection.getBiocollectionUid(), sev); uniqueSubjectIDs.add(bioCollection.getLinkSubjectStudy().getId()); sev.setSubjectUid(bioCollection.getLinkSubjectStudy().getSubjectUID()); //TODO: mow that we haevb this probably need to fetch join to save us a bunch of hits to the db biocollectionIdsAfterFiltering.add(bioCollection.getId()); } //maintaining list of subject IDs for filtering past results if (!bioCollectionFilters.isEmpty()) { idsToInclude = new ArrayList(uniqueSubjectIDs); } return biocollectionIdsAfterFiltering; }
From source file:au.org.theark.core.dao.StudyDao.java
License:Open Source License
private List<Long> addDataFromMegaBiospecimenQuery(DataExtractionVO allTheData, Collection<BiospecimenField> biospecimenFields, //Collection<CustomFieldDisplay> specimenCFDs, Search search, List<Long> idsToInclude, List<Long> biospecimenIdsAfterFiltering, List<Long> bioCollectionIdsAfterFiltering) { String biospecimenFilters = getBiospecimenFilters(search); HashMap<String, ExtractionVO> hashOfBiospecimenData = allTheData.getBiospecimenData(); Collection<Biospecimen> biospecimenList = null; if ((biospecimenFields.isEmpty() && biospecimenFilters.isEmpty())) { if (idsToInclude.isEmpty()) { // no need } else {//from w w w . j a v a 2s . com biospecimenIdsAfterFiltering = getBiospecimenIdForSubjectIds(idsToInclude); if (biospecimenIdsAfterFiltering.isEmpty()) { return Collections.EMPTY_LIST; } else { biospecimenList = getSession().createCriteria(Biospecimen.class) .add(Restrictions.in("id", biospecimenIdsAfterFiltering)).list(); } } } else if ((!biospecimenFields.isEmpty() || !biospecimenFilters.isEmpty()) && !idsToInclude.isEmpty()) { StringBuffer queryBuffer = new StringBuffer("select distinct biospecimen "); queryBuffer.append("from Biospecimen biospecimen "); queryBuffer.append(" left join fetch biospecimen.sampleType sampleType "); queryBuffer.append(" left join fetch biospecimen.invCell invCell "); //Not lookup compatible queryBuffer.append(" left join fetch biospecimen.storedIn storedIn "); queryBuffer.append(" left join fetch biospecimen.grade grade "); queryBuffer.append(" left join fetch biospecimen.species species "); queryBuffer.append(" left join fetch biospecimen.unit unit "); queryBuffer.append(" left join fetch biospecimen.treatmentType treatmentType "); queryBuffer.append(" left join fetch biospecimen.quality quality "); queryBuffer.append(" left join fetch biospecimen.anticoag anticoag "); queryBuffer.append(" left join fetch biospecimen.status status "); queryBuffer.append(" left join fetch biospecimen.biospecimenProtocol biospecimenProtocol "); queryBuffer.append(" left join fetch biospecimen.bioCollection biocollection "); queryBuffer.append(" where biospecimen.study.id = " + search.getStudy().getId()); if (!biospecimenFilters.isEmpty()) { queryBuffer.append(biospecimenFilters); } queryBuffer.append(" and biospecimen.linkSubjectStudy.id in (:idsToInclude) "); if (!bioCollectionIdsAfterFiltering.isEmpty()) { queryBuffer.append(" and biospecimen.bioCollection.id in (:biocollectionsToFilter) "); } else { biospecimenIdsAfterFiltering = new ArrayList<Long>(); return new ArrayList<Long>(); } Query query = getSession().createQuery(queryBuffer.toString()); query.setParameterList("idsToInclude", idsToInclude); if (!bioCollectionIdsAfterFiltering.isEmpty()) { query.setParameterList("biocollectionsToFilter", bioCollectionIdsAfterFiltering); } biospecimenList = query.list(); } HashSet uniqueSubjectIDs = new HashSet<Long>(); for (Biospecimen biospecimen : biospecimenList) { ExtractionVO sev = new ExtractionVO(); sev.setKeyValues(constructKeyValueHashmap(biospecimen, biospecimenFields)); sev.setSubjectUid(biospecimen.getLinkSubjectStudy().getSubjectUID()); hashOfBiospecimenData.put(biospecimen.getBiospecimenUid(), sev); uniqueSubjectIDs.add(biospecimen.getLinkSubjectStudy().getId()); biospecimenIdsAfterFiltering.add(biospecimen.getId()); } //maintaining list of subject IDs for filtering past results if (!biospecimenFilters.isEmpty()) { idsToInclude.clear(); for (Object id : uniqueSubjectIDs) { idsToInclude.add((Long) id); } log.info("LATEST LIST OF IDS SIZE=" + idsToInclude.size()); } allTheData.setBiospecimenData(hashOfBiospecimenData);//wouldnt think I need to set ht //log.info("addDataFromMegaBiospecimenQuery.biospecimenIdsAfterFiltering: " + biospecimenIdsAfterFiltering.size()); return biospecimenIdsAfterFiltering; }
From source file:au.org.theark.core.dao.StudyDao.java
License:Open Source License
@Override public List<FamilyCustomFieldData> getfamilyCustomFieldDataFor(Study study, Collection customFieldDisplaysThatWeNeed, List familyUidsToBeIncluded) { if (customFieldDisplaysThatWeNeed == null || customFieldDisplaysThatWeNeed.isEmpty() || familyUidsToBeIncluded == null || familyUidsToBeIncluded.isEmpty()) { return new ArrayList<FamilyCustomFieldData>(); } else {// w w w . ja v a2 s. c om String queryString = "select fcfd from FamilyCustomFieldData fcfd where fcfd.familyUid in (:familyUidsToBeIncluded) " + " and fcfd.customFieldDisplay in (:customFieldDisplaysThatWeNeed) and fcfd.study=:study"; Query query = getSession().createQuery(queryString); query.setParameterList("familyUidsToBeIncluded", familyUidsToBeIncluded); query.setParameterList("customFieldDisplaysThatWeNeed", customFieldDisplaysThatWeNeed); query.setParameter("study", study); return query.list(); } }
From source file:au.org.theark.core.dao.StudyDao.java
License:Open Source License
@Override public List<CustomFieldDisplay> getCustomFieldDisplaysInWithCustomFieldType(List<String> fieldNameCollection, Study study, ArkFunction arkFunction, CustomFieldType customFieldType) { if (fieldNameCollection == null || fieldNameCollection.isEmpty()) { return new ArrayList<CustomFieldDisplay>(); } else {/*www . j a v a 2s . c om*/ List<String> lowerCaseNames = new ArrayList<String>(); for (String name : fieldNameCollection) { lowerCaseNames.add(name.toLowerCase()); } String queryString = "select cfd " + "from CustomFieldDisplay cfd " + "where customField.id in ( " + " SELECT id from CustomField cf " + " where cf.study =:study " + " and lower(cf.name) in (:names) " + " and cf.arkFunction =:arkFunction and cf.customFieldType=:customFieldType )"; Query query = getSession().createQuery(queryString); query.setParameter("study", study); // query.setParameterList("names", fieldNameCollection); query.setParameterList("names", lowerCaseNames); query.setParameter("arkFunction", arkFunction); query.setParameter("customFieldType", customFieldType); return query.list(); } }
From source file:au.org.theark.lims.model.dao.BioCollectionDao.java
License:Open Source License
public List<BioCollectionCustomFieldData> getBioCollectionCustomFieldDataList( BioCollection bioCollectionCriteria, ArkFunction arkFunction, int first, int count) { List<BioCollectionCustomFieldData> bioCollectionCustomFieldDataList = new ArrayList<BioCollectionCustomFieldData>(); StringBuffer sb = new StringBuffer(); sb.append(" FROM CustomFieldDisplay AS cfd "); sb.append("LEFT JOIN cfd.bioCollectionCustomFieldData as fieldList "); sb.append(" with fieldList.bioCollection.id = :bioCollectionId "); sb.append(" WHERE cfd.customField.study.id IN (:studyId)"); sb.append(" AND cfd.customField.arkFunction.id = :functionId"); sb.append(" ORDER BY cfd.sequence"); Query query = getSession().createQuery(sb.toString()); query.setParameter("bioCollectionId", bioCollectionCriteria.getId()); // Allow child studies to inherit parent defined custom fields List studyList = new ArrayList(); studyList.add(bioCollectionCriteria.getStudy().getId()); if (bioCollectionCriteria.getStudy().getParentStudy() != null && bioCollectionCriteria.getStudy().getParentStudy() != bioCollectionCriteria.getStudy()) { studyList.add(bioCollectionCriteria.getStudy().getParentStudy().getId()); }/*from w w w. j ava 2 s . c o m*/ query.setParameterList("studyId", studyList); query.setParameter("functionId", arkFunction.getId()); query.setFirstResult(first); query.setMaxResults(count); List<Object[]> listOfObjects = query.list(); for (Object[] objects : listOfObjects) { CustomFieldDisplay cfd = new CustomFieldDisplay(); BioCollectionCustomFieldData bccfd = new BioCollectionCustomFieldData(); if (objects.length > 0 && objects.length >= 1) { cfd = (CustomFieldDisplay) objects[0]; if (objects[1] != null) { bccfd = (BioCollectionCustomFieldData) objects[1]; } else { bccfd.setCustomFieldDisplay(cfd); } bioCollectionCustomFieldDataList.add(bccfd); } } return bioCollectionCustomFieldDataList; }