public String getLatest()

in clns-eTarget/src/main/java/org/digitalecmt/etarget/GetMutationSelection.java [208:436]


	public String getLatest() {
		if (!super.isUserPermittedEndpoint(userID, "GetMutationSelection")) {
			// Stop the request if user doesn't have permission for this API or web
			// component
			return "User not permitted to access: GetMutationSelection";
		} else {
			// Process the request
			try {
				//get configured sources
				List<ConfigDataSources> addSources = (List<ConfigDataSources>)this.getContext().getBean("configuredDataSources");
				// new version
				List<Map<String,String>> allGenes = new ArrayList<Map<String,String>>();
				List<Map<String,Object>> ctDNA = new ArrayList<Map<String,Object>>();
				List<Map<String,Object>> tumourNGS = new ArrayList<Map<String,Object>>();
				Map<String, List<Map<String,String>>> fmBlood = new HashMap<>();
				Map<String, List<Map<String,String>>> fmTumour = new HashMap<>();
				List<Map<String,String>> fmBloodCNAs = new ArrayList<>();
				List<Map<String,String>> fmBloodRs = new ArrayList<>();
				List<Map<String,String>> fmBloodSVs = new ArrayList<>();
				List<Map<String,String>> fmTumourCNAs = new ArrayList<>();
				List<Map<String,String>> fmTumourRs = new ArrayList<>();
				List<Map<String,String>> fmTumourSVs = new ArrayList<>();
				Map<String,String> meetingOutcomeSummarySV = new HashMap<String,String>();
				Map<String,String> meetingOutcomeSummaryR = new HashMap<String,String>();
				Map<String,String> meetingOutcomeSummaryCNA = new HashMap<String,String>();
				fmBlood.put("copyNumberAlteration", fmBloodCNAs);
				fmBlood.put("rearrangement", fmBloodRs);
				fmBlood.put("shortVariant", fmBloodSVs);
				fmTumour.put("copyNumberAlteration", fmTumourCNAs);
				fmTumour.put("rearrangement", fmTumourRs);
				fmTumour.put("shortVariant", fmTumourSVs);
				Map<String,Map<String,List<Map<String,String>>>> addSourcesMap = new HashMap<>();
				for(ConfigDataSources cds : addSources) {
					List<Map<String,String>> sv = new ArrayList<Map<String,String>>();
					List<Map<String,String>> r = new ArrayList<Map<String,String>>();
					List<Map<String,String>> cna = new ArrayList<Map<String,String>>();
					Map<String,List<Map<String,String>>> newSource = new HashMap<>();
					newSource.put("shortVariant", sv);
					newSource.put("copyNumberAlteration", cna);
					newSource.put("rearrangement", r);
					addSourcesMap.put(cds.getFront_end_name(), newSource);
				}
				MutationSelectionDAO mutationSelectionDao = this.getContext().getBean(MutationSelectionDAO.class);
				GeneSubsetDAO genesubset = this.getContext().getBean(GeneSubsetDAO.class);
				TumourNgsDAO tumourNgs = this.getContext().getBean(TumourNgsDAO.class);
				FoundationMedicineDAO fmdao = this.getContext().getBean(FoundationMedicineDAO.class);
				List<SelectedGeneVariant> resultSet = mutationSelectionDao
						.getLatestSelectedMutationsByPersonID(personIDint);
				
				List<Integer> genePanelIDs=genesubset.findLatestGenePanelIDsBlood(personIDint);
				List<Integer> newlySelected = new ArrayList<Integer>();
				boolean found=false;
				//first in list is newest, second the one to compare against.
				if(genePanelIDs.size()>=2) {
					List<GeneSubset> selectedLast =genesubset.findGeneSubsetByGeneVarientsIDs(mutationSelectionDao.getSelectedByGenePanelID(genePanelIDs.get(0)));
					List<Integer> selectedBefore = mutationSelectionDao.getSelectedByGenePanelID(genePanelIDs.get(1));
					List<GeneSubset> allGenesOfPanelBefore= genesubset.findGeneSubsetByGeneVarientsIDs(genesubset.findGeneVarientsByGenePanelID(genePanelIDs.get(1)));
					if(selectedLast == null || selectedBefore == null || allGenesOfPanelBefore==null) {
						log.info("selectedLast " +selectedLast);
						log.info("selectedBefore " +selectedBefore);
						log.info("allGenesOfPanelBefore " + allGenesOfPanelBefore);
					} else {
						for(GeneSubset check : selectedLast) {
							for(GeneSubset genePrevious: allGenesOfPanelBefore) {
								if(check.sameAs(genePrevious)) {
									if(selectedBefore.contains(genePrevious.getGene_varient_id())) {
										//was selected before --nothing new here
										found = true;
									} else {
										// not selected before
										newlySelected.add(check.getGene_varient_id());
									}
									break;
								}
							}
							if(found==false) {
								//not in previous list -- this is new
								newlySelected.add(check.getGene_varient_id());
							}
							found=false;
						}
					}
				}
				for(SelectedGeneVariant sgv : resultSet) {
					if(sgv.getType().compareTo("CTDNA")==0) {
						GeneSubsetExt result =GeneSubsetExt.getGeneSubsetExt(genesubset.findGeneSubsetByGeneVarientID(personIDint, sgv.getMeasurement_gene_variant_id()));
						if(newlySelected.contains(result.getGene_varient_id())) {
							result.setIsNew(true);
						}
						ctDNA.add(Formater.formatCTDNA(result));
						allGenes.add(Formater.formatCTDNASummery(result));
						String mosEntry=result.getGene_name()+result.getGeneResultPure()+result.getSpecimenDateFormatted1()+sgv.getType();
						mosEntry=mosEntry.replaceAll("[^A-Za-z0-9]", "");
						
						meetingOutcomeSummarySV.put(mosEntry, result.getGene_name().trim()+" "+result.getGeneResultPure().trim());
					} else if(sgv.getType().compareTo("NGS")==0) {
						TumourNgsExt result = TumourNgsExt.getTumourNgsExt(tumourNgs.findTumourNgsByGeneVarientID(personIDint, sgv.getMeasurement_gene_variant_id()));
						tumourNGS.add(Formater.formatTumourNgs(result));
						allGenes.add(Formater.formatTumourNgsSummery(result));
						if(result.getGene_name()==null) {
							result.setGene_name("");
						}
						String mosEntry=result.getGene_name()+result.getGeneResultPure()+result.getSpecimentDateFormatted()+sgv.getType();
						mosEntry=mosEntry.replaceAll("[^A-Za-z0-9]", "");
						meetingOutcomeSummarySV.put(mosEntry, result.getGene_name().trim()+" "+result.getGeneResultPure().trim());
					} else if(sgv.getType().compareTo("FMBloodCNA")==0) {
						CopyNumberAlteration cna = fmdao.getCopyNumberAlterationByGeneVariantID(sgv.getMeasurement_gene_variant_id());
						fmBloodCNAs.add(Formater.formatCopyNumberAlteration(cna));
						if(cna.getGene_name()==null) {
							cna.setGene_name("");
						}
						allGenes.add(Formater.formatCopyNumberAlterationSummery(cna, "FM blood"));
						String mosEntry=cna.getGene_name()+cna.getCna_type()+sgv.getType();
						mosEntry=mosEntry.replaceAll("[^A-Za-z0-9]", "");
						meetingOutcomeSummaryCNA.put(mosEntry, cna.getGene_name().trim()+" "+cna.getCna_type().trim());
					} else if(sgv.getType().compareTo("FMBloodR")==0) {
						Rearrangement r = fmdao.getRearrangementByGeneVariantID(sgv.getMeasurement_gene_variant_id());
						fmBloodRs.add(Formater.formatRearrangement(r));
						allGenes.add(Formater.formatRearrangementSummery(r, "FM blood"));
						if(r.getRearr_gene_1_name()==null) {
							r.setRearr_gene_1_name("");
						}
						if(r.getRearr_gene_2_name()==null) {
							r.setRearr_gene_2_name("");
						}
						String mosEntry=r.getRearr_gene_1_name()+r.getRearr_gene_2_name()+sgv.getType();
						mosEntry=mosEntry.replaceAll("[^A-Za-z0-9]", "");
						meetingOutcomeSummaryR.put(mosEntry, r.getRearr_gene_1_name().trim()+ " "+r.getRearr_gene_2_name().trim()+" "+r.getRearr_description().trim());
					} else if(sgv.getType().compareTo("FMBloodSV")==0) {
						ShortVariant sv = fmdao.getShortVariantByGeneVariantID(sgv.getMeasurement_gene_variant_id());
						fmBloodSVs.add(Formater.formatShortVariant(sv));
						allGenes.add(Formater.formatShortVariantSummery(sv, "FM blood"));
						if(sv.getGene_name()==null) {
							sv.setGene_name("");
						}
						String mosEntry=sv.getGene_name()+sv.getResult()+sgv.getType();
						mosEntry=mosEntry.replaceAll("[^A-Za-z0-9]", "");
						meetingOutcomeSummarySV.put(mosEntry, sv.getGene_name().trim()+" "+sv.getResult().trim());
					} else if(sgv.getType().compareTo("FMTumourCNA")==0) {
						CopyNumberAlteration cna = fmdao.getCopyNumberAlterationByGeneVariantID(sgv.getMeasurement_gene_variant_id());
//						cna.setBaseline(fmdao.getTumourBaseline(cna.getMeasurement_gene_panel_id()));
						fmTumourCNAs.add(Formater.formatCopyNumberAlteration(cna));
						allGenes.add(Formater.formatCopyNumberAlterationSummery(cna, "FM tumour"));
						if(cna.getGene_name()==null) {
							cna.setGene_name("");
						}
						String mosEntry=cna.getGene_name()+cna.getCna_type()+sgv.getType();
						mosEntry=mosEntry.replaceAll("[^A-Za-z0-9]", "");
						meetingOutcomeSummaryCNA.put(mosEntry, cna.getGene_name().trim()+" "+cna.getCna_type().trim());
					} else if(sgv.getType().compareTo("FMTumourR")==0) {
						Rearrangement r = fmdao.getRearrangementByGeneVariantID(sgv.getMeasurement_gene_variant_id());
//						r.setBaseline(fmdao.getTumourBaseline(r.getMeasurement_gene_panel_id()));
						fmTumourRs.add(Formater.formatRearrangement(r));
						allGenes.add(Formater.formatRearrangementSummery(r, "FM tumour"));
						if(r.getRearr_gene_1_name()==null) {
							r.setRearr_gene_1_name("");
						}
						if(r.getRearr_gene_2_name()==null) {
							r.setRearr_gene_2_name("");
						}
						String mosEntry=r.getRearr_gene_1_name()+r.getRearr_gene_2_name()+sgv.getType();
						mosEntry=mosEntry.replaceAll("[^A-Za-z0-9]", "");
						meetingOutcomeSummaryR.put(mosEntry, r.getRearr_gene_1_name().trim()+ " "+r.getRearr_gene_2_name().trim()+" "+ r.getRearr_description().trim());
					} else if(sgv.getType().compareTo("FMTumourSV")==0) {
						ShortVariant sv = fmdao.getShortVariantByGeneVariantID(sgv.getMeasurement_gene_variant_id());
//						sv.setBaseline(fmdao.getTumourBaseline(sv.getMeasurement_gene_panel_id()));
						fmTumourSVs.add(Formater.formatShortVariant(sv));
						allGenes.add(Formater.formatShortVariantSummery(sv, "FM tumour"));
						if(sv.getGene_name()==null) {
							sv.setGene_name("");
						}
						String mosEntry=sv.getGene_name()+sv.getResult()+sgv.getType();
						mosEntry=mosEntry.replaceAll("[^A-Za-z0-9]", "");
						meetingOutcomeSummarySV.put(mosEntry, sv.getGene_name().trim()+" "+sv.getResult().trim());
					}
					for(ConfigDataSources cds : addSources) {
						if(sgv.getType().compareTo(cds.getFront_end_name()+"CNA")==0) {
							CopyNumberAlteration cna = fmdao.getCopyNumberAlterationByGeneVariantID(sgv.getMeasurement_gene_variant_id());
//							if(cds.getIsTumour()) {
//								cna.setBaseline(fmdao.getTumourBaseline(cna.getMeasurement_gene_panel_id()));
//							}
							addSourcesMap.get(cds.getFront_end_name()).get("copyNumberAlteration").add(Formater.formatCopyNumberAlteration(cna));
							allGenes.add(Formater.formatCopyNumberAlterationSummery(cna, cds.getFront_end_name()));
							String mosEntry=cna.getGene_name()+cna.getCna_type()+sgv.getType();
							mosEntry=mosEntry.replaceAll("[^A-Za-z0-9]", "");
							meetingOutcomeSummaryCNA.put(mosEntry, cna.getGene_name().trim()+" "+cna.getCna_type().trim());
						} else if(sgv.getType().compareTo(cds.getFront_end_name()+"R")==0) {
							Rearrangement r = fmdao.getRearrangementByGeneVariantID(sgv.getMeasurement_gene_variant_id());
//							if(cds.getIsTumour()) {
//								r.setBaseline(fmdao.getTumourBaseline(r.getMeasurement_gene_panel_id()));
//							}
							addSourcesMap.get(cds.getFront_end_name()).get("rearrangement").add(Formater.formatRearrangement(r));
							allGenes.add(Formater.formatRearrangementSummery(r, cds.getFront_end_name()));
							String mosEntry=r.getRearr_gene_1_name()+r.getRearr_gene_2_name()+sgv.getType();
							mosEntry=mosEntry.replaceAll("[^A-Za-z0-9]", "");
							meetingOutcomeSummaryR.put(mosEntry, r.getRearr_gene_1_name().trim()+ " "+r.getRearr_gene_2_name().trim()+" "+ r.getRearr_description().trim());
						} else if(sgv.getType().compareTo(cds.getFront_end_name()+"SV")==0) {
							ShortVariant sv = fmdao.getShortVariantByGeneVariantID(sgv.getMeasurement_gene_variant_id());
//							if(cds.getIsTumour()) {
//								sv.setBaseline(fmdao.getTumourBaseline(sv.getMeasurement_gene_panel_id()));
//							}
							addSourcesMap.get(cds.getFront_end_name()).get("shortVariant").add(Formater.formatShortVariant(sv));
							allGenes.add(Formater.formatShortVariantSummery(sv, cds.getFront_end_name()));
							String mosEntry=sv.getGene_name()+sv.getResult()+sgv.getType();
							mosEntry=mosEntry.replaceAll("[^A-Za-z0-9]", "");
							meetingOutcomeSummarySV.put(mosEntry, sv.getGene_name().trim()+" "+sv.getResult().trim());
						}
					}
				}
				log.info("size of list " + fmBloodRs.size());
				Map<String,Object> mutationData=new HashMap<String,Object>();
				mutationData.put("latestTumourNGS", tumourNGS);
				mutationData.put("latestCtDNA", ctDNA);
				mutationData.put("latestFmBlood", fmBlood);
				mutationData.put("latestFmTumour", fmTumour);
				mutationData.put("summery", allGenes);
				mutationData.put("meetingOutcomeSummarySV", meetingOutcomeSummarySV);
				mutationData.put("meetingOutcomeSummaryR", meetingOutcomeSummaryR);
				mutationData.put("meetingOutcomeSummaryCNA", meetingOutcomeSummaryCNA);
				mutationData.put("latestGenericGenomic", addSourcesMap);
				
				return new Gson().toJson(mutationData);

			} catch (Exception e) {
				log.log(Level.SEVERE, e.getMessage(),e);
				return "Failed to get mutation selection.";
			}
		}
	}