package org.molgenis.mutation.service; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.molgenis.framework.db.Database; import org.molgenis.framework.db.DatabaseException; import org.molgenis.mutation.dto.LovdDTO; import org.molgenis.pheno.ObservedValue; import org.molgenis.variant.Gene; import org.molgenis.variant.Patient; import org.molgenis.variant.Variant; import org.springframework.stereotype.Service; @Service public class LovdService { private Database db; // @Autowired public void setDatabase(Database db) { this.db = db; } /** * Export database contents into an LovdDTO * * @return LovdDTO */ public LovdDTO export() { try { LovdDTO lovdDTO = new LovdDTO(); List<Gene> geneList = this.db.query(Gene.class).find(); lovdDTO.setGeneMap(this.geneListToGeneMap(geneList)); // lovdDTO.setDiseaseMap(this.diseaseListToDiseaseMap(diseaseList)); List<Patient> patientList = this.db.query(Patient.class).find(); lovdDTO.setIndividualMap(this.patientListToPatientMap(patientList)); lovdDTO.setPhenotypeMap(this.patientListToPhenotypeMap(patientList)); List<Variant> variantList = this.db.query(Variant.class).find(); lovdDTO.setVariantGenomeMap(this.variantListToVariantGenomeMap(variantList)); lovdDTO.setVariantTranscriptMap(this.variantListToVariantTranscriptMap(variantList)); return lovdDTO; } catch (DatabaseException e) { e.printStackTrace(); throw new LovdServiceException(e.getMessage()); } } private List<Map<String, String>> geneListToGeneMap(List<Gene> geneList) { List<Map<String, String>> result = new ArrayList<Map<String, String>>(); for (Gene gene : geneList) { Map<String, String> geneMap = new LinkedHashMap<String, String>(); geneMap.put("id", gene.getId().toString()); geneMap.put("name", gene.getName()); geneMap.put("chromosome", ""); geneMap.put("chrom_band", ""); geneMap.put("id_hgnc", ""); geneMap.put("id_entrez", ""); geneMap.put("id_omim", ""); result.add(geneMap); } return result; } // private List<Map<String, String>> diseaseListToDiseaseMap(List<String> diseaseList) // { // List<Map<String, String>> result = new ArrayList<Map<String, String>>(); // // for (String disease : diseaseList) // { // Map<String, String> diseaseMap = new LinkedHashMap<String, String>(); // // diseaseMap.put("id", disease); // diseaseMap.put("symbol", ""); // diseaseMap.put("name", disease); // diseaseMap.put("id_omim", ""); // // result.add(diseaseMap); // } // // return result; // } private List<Map<String, String>> patientListToPatientMap(List<Patient> patientList) { List<Map<String, String>> result = new ArrayList<Map<String, String>>(); for (Patient patient : patientList) { Map<String, String> patientMap = new LinkedHashMap<String, String>(); patientMap.put("id", patient.getId().toString()); patientMap.put("fatherid", ""); patientMap.put("motherid", ""); patientMap.put("panelid", ""); patientMap.put("panel_size", ""); patientMap.put("owned_by", ""); patientMap.put("statusid", ""); patientMap.put("created_by", ""); patientMap.put("created_date", patient.getSubmission().getDate().toString()); patientMap.put("edited_by", ""); patientMap.put("edited_date", ""); patientMap.put("Individual/Lab_ID", ""); patientMap.put("Individual/Reference", ""); patientMap.put("Individual/Remarks", ""); patientMap.put("Individual/Remarks_Non_Public", ""); patientMap.put("Individual/Gender", ""); patientMap.put("Individual/Origin/Ethnic", ""); patientMap.put("Individual/Consanguinity", ""); patientMap.put("Individual/Origin/Geographic", ""); patientMap.put("Individual/Age_of_death", ""); patientMap.put("Individual/Death/Cause", ""); patientMap.put("Individual/Origin/Population", ""); List<ObservedValue> valueList = Arrays.asList(patient.getTargetObservedValueCollection().toArray( new ObservedValue[0])); for (ObservedValue value : valueList) { if (value.getFeature().getName().equalsIgnoreCase("Gender")) { patientMap.put("Individual/Gender", value.getValue()); } else if (value.getFeature().getName().equalsIgnoreCase("Ethnicity")) { patientMap.put("Individual/Origin/Ethnic", value.getValue()); } else if (value.getFeature().getName().equalsIgnoreCase("Consanguinity")) { patientMap.put("Individual/Consanguinity", value.getValue()); } else if (value.getFeature().getName().equalsIgnoreCase("Cause of death")) { patientMap.put("Individual/Death/Cause", ""); } else if (value.getFeature().getName().equalsIgnoreCase("Population")) { patientMap.put("Individual/Origin/Population", ""); } } result.add(patientMap); } return result; } private List<Map<String, String>> patientListToPhenotypeMap(List<Patient> patientList) { List<Map<String, String>> result = new ArrayList<Map<String, String>>(); for (Patient patient : patientList) { Map<String, String> phenotypeMap = new LinkedHashMap<String, String>(); phenotypeMap.put("id", patient.getId().toString()); phenotypeMap.put("dieseaseid", ""); phenotypeMap.put("individualid", patient.getId().toString()); phenotypeMap.put("owned_by", ""); phenotypeMap.put("statusid", ""); phenotypeMap.put("created_by", ""); phenotypeMap.put("created_date", ""); phenotypeMap.put("edited_by", ""); phenotypeMap.put("edited_date", ""); phenotypeMap.put("Phenotype/Enzyme/IVD/Activity", patient.getPhenotype()); result.add(phenotypeMap); } return result; } private List<Map<String, String>> variantListToVariantGenomeMap(List<Variant> variantList) { List<Map<String, String>> result = new ArrayList<Map<String, String>>(); for (Variant variant : variantList) { Map<String, String> variantMap = new LinkedHashMap<String, String>(); variantMap.put("id", variant.getId().toString()); variantMap.put("allele", ""); variantMap.put("effectid", ""); variantMap.put("chromosome", variant.getGene().getName()); variantMap.put("position_g_start", variant.getStartGdna().toString()); variantMap.put("position_g_end", variant.getEndGdna().toString()); variantMap.put("mapping_flags", ""); variantMap.put("owned_by", ""); variantMap.put("statusid", ""); variantMap.put("created_by", ""); variantMap.put("created_date", ""); variantMap.put("edited_by", ""); variantMap.put("edited_date", ""); variantMap.put("VariantOnGenome/DBID", ""); variantMap.put("VariantOnGenome/DNA", ""); variantMap.put("VariantOnGenome/Frequency", ""); variantMap.put("VariantOnGenome/Reference", ""); variantMap.put("VariantOnGenome/Restriction_site", ""); variantMap.put("VariantOnGenome/Published_as", ""); variantMap.put("VariantOnGenome/Remarks", ""); variantMap.put("VariantOnGenome/Genetic_origin", ""); variantMap.put("VariantOnGenome/Segregation", ""); variantMap.put("VariantOnGenome/dbSNP", ""); result.add(variantMap); } return result; } private List<Map<String, String>> variantListToVariantTranscriptMap(List<Variant> variantList) { List<Map<String, String>> result = new ArrayList<Map<String, String>>(); for (Variant variant : variantList) { Map<String, String> variantMap = new LinkedHashMap<String, String>(); String[] startCdnaIntron = StringUtils.split(variant.getNameCdna(), "+-"); variantMap.put("id", variant.getId().toString()); variantMap.put("transcriptid", ""); variantMap.put("effectid", ""); variantMap.put("position_c_start", variant.getStartCdna().toString()); variantMap.put("position_c_start_intron", (variant.getExon().getIsIntron() ? startCdnaIntron[1] : "0")); variantMap.put("position_c_end", variant.getEndCdna().toString()); variantMap.put("position_c_end_intron", (variant.getExon().getIsIntron() ? startCdnaIntron[1] : "0")); variantMap.put("VariantOnTranscript/DNA", variant.getNameCdna()); variantMap.put("VariantOnTranscript/RNA", "r.?"); variantMap.put("VariantOnTranscript/Protein", variant.getNameAa()); variantMap.put("VariantOnTranscript/Published_as", ""); variantMap.put("VariantOnTranscript/Exon", variant.getExon().getName()); variantMap.put("VariantOnTranscript/PolyPhen", ""); variantMap.put("VariantOnTranscript/GVS/Function", ""); result.add(variantMap); } return result; } }