/** * Insert patient and set primary key * * @param patient * @return number of patients inserted * @throws Exception */ public void insert(PatientSummaryVO patientSummaryVO) throws Exception { if (patientSummaryVO == null) return; Patient patient = this.toPatient(patientSummaryVO); // submissions are never inserted via patients, just select newest // by date // TODO: Do we still need that??? // List<Submission> submissions = // this.db.query(Submission.class).equals(Submission.DATE_, // patientSummaryVO.getSubmissionDate()).sortDESC("id").find(); // // if (submissions.size() > 0) // { // patientSummaryVO.getPatient().setSubmission(submissions.get(0)); // } // mutations are never inserted via patients, just select for (MutationSummaryVO mutationSummaryVO : patientSummaryVO.getVariantSummaryVOList()) { List<Mutation> mutations = this.db .query(Mutation.class) .equals(Mutation.CDNA_NOTATION, mutationSummaryVO.getCdnaNotation()) .find(); // System.out.println(">>> Queried: " + // mutationSummaryVO.getCdnaNotation() + ", found: " + // mutations.size()); if (mutations.size() != 1) throw new Exception("ERROR: No mutation found for " + mutationSummaryVO.getCdnaNotation()); patient.getMutations_Id().add(mutations.get(0).getId()); } // phenotypes are never inserted via patients, just select // if (patientSummaryVO.getPhenotypeId() == null) // { // // System.out.println(">>> Query: majortype==" + // patientSummaryVO.getPhenotypeMajor() + ", subtype==" + // patientSummaryVO.getPhenotypeSub()); // List<MutationPhenotype> phenotypes = // this.db.query(MutationPhenotype.class).equals(MutationPhenotype.MAJORTYPE, // patientSummaryVO.getPhenotypeMajor()).equals(MutationPhenotype.SUBTYPE, // patientSummaryVO.getPhenotypeSub()).find(); // // if (phenotypes.size() != 1) // throw new Exception("No phenotype found for " + // patientSummaryVO.getPhenotypeMajor() + ", " + // patientSummaryVO.getPhenotypeSub()); // // patientSummaryVO.setPhenotypeId(phenotypes.get(0).getId()); // } // patient.setPhenotype_Id(patientSummaryVO.getPhenotypeId()); // Publications are never inserted via patients, just select if (CollectionUtils.isNotEmpty(patientSummaryVO.getPublicationVOList())) { List<Integer> publicationIds = new ArrayList<Integer>(); for (PublicationVO publicationVO : patientSummaryVO.getPublicationVOList()) { if (publicationVO.getPubmedId() == null) continue; List<OntologyTerm> pubmedTerms = this.db .query(OntologyTerm.class) .equals(OntologyTerm.NAME, publicationVO.getPubmedId()) .find(); if (pubmedTerms.size() != 1) continue; List<Publication> publications = this.db .query(Publication.class) .equals(Publication.PUBMEDID, pubmedTerms.get(0).getId()) .find(); if (publications.size() != 1) throw new Exception("No publication found for Pubmed ID " + publicationVO.getPubmedId()); publicationIds.add(publications.get(0).getId()); } patient.setPatientreferences_Id(publicationIds); } patient.setSubmission_Id(1); // Insert patient this.db.add(patient); // Insert ObservedValues for (ObservedValueVO observedValueVO : patientSummaryVO.getObservedValueVOList()) { if (observedValueVO == null) return; List<ObservableFeature> features = this.db .query(ObservableFeature.class) .equals(ObservableFeature.NAME, observedValueVO.getFeatureName()) .find(); if (features.size() != 1) return; List<Patient> patients = this.db .query(Patient.class) .equals(Patient.IDENTIFIER, observedValueVO.getTargetName()) .find(); if (patients.size() != 1) return; ObservedValue observedValue = new ObservedValue(); observedValue.setFeature(features.get(0)); observedValue.setInvestigation(1); observedValue.setTarget(patient.getId()); observedValue.setValue(observedValueVO.getValue()); this.db.add(observedValue); } }