package edu.ucsf.mousedatabase.admin; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import edu.ucsf.mousedatabase.DBConnect; import edu.ucsf.mousedatabase.HTMLGeneration; import edu.ucsf.mousedatabase.MGIConnect; import edu.ucsf.mousedatabase.objects.Gene; import edu.ucsf.mousedatabase.objects.MGIResult; import edu.ucsf.mousedatabase.objects.MouseHolder; import edu.ucsf.mousedatabase.objects.MouseRecord; public class RecordManager { public static class PopulateMouseResult { public boolean Success; public String Message; public PopulateMouseResult(boolean success, String message) { super(); Success = success; Message = message; } } public static class GeneInfo { public String mgiGeneID; public String targetMgiGeneID; public String manualGeneName; public String manualGeneSymbol; public String manualTargetGeneName; public String manualTargetGeneSymbol; } public static class AddGeneResult { public boolean Success; public String Message; public AddGeneResult(boolean success, String message) { Success = success; Message = message; } } public static PopulateMouseResult PopulateMouseDataFromRequest(MouseRecord newMouse, HttpServletRequest request) { PopulateMouseResult result = new PopulateMouseResult(true, null); GeneInfo geneInfo = new GeneInfo(); geneInfo.manualGeneName = request.getParameter("geneManualName"); geneInfo.manualGeneSymbol = request.getParameter("geneManualSymbol"); geneInfo.manualTargetGeneName = request.getParameter("targetGeneManualName"); geneInfo.manualTargetGeneSymbol = request.getParameter("targetGeneManualSymbol"); geneInfo.mgiGeneID = request.getParameter("geneMGIID"); geneInfo.targetMgiGeneID = request.getParameter("targetGeneMGIID"); AddGeneResult geneResult = CreateAndAddGenes(newMouse,geneInfo); if (!geneResult.Success) { result.Message += result.Message + "<br/>"; result.Success = false; } AddHolders(newMouse,request); AddPubMedIds(newMouse,request); return new PopulateMouseResult(true, null); } public static AddGeneResult CreateAndAddGenes(MouseRecord newMouse, GeneInfo geneInfo) { //convert MGI Gene IDs into mouse db gene IDs if(geneInfo.mgiGeneID != null && !geneInfo.mgiGeneID.isEmpty()) { String geneID; Gene geneObj = DBConnect.findGene(geneInfo.mgiGeneID); if (geneObj == null) { MGIResult result = MGIConnect.doMGIQuery(geneInfo.mgiGeneID,MGIConnect.MGI_MARKER,"This ID is not a valid MGI Gene Accession ID",false); if(result.isValid()) { geneID = DBConnect.addGeneManually(result.getAccessionID(),result.getName(),result.getSymbol()); } else if (geneInfo.manualGeneName == null || geneInfo.manualGeneName.isEmpty() || geneInfo.manualGeneSymbol == null || geneInfo.manualGeneSymbol.isEmpty()) { String message = "Unable to automatically add gene because: " + result.getErrorString() + "<br>.Please go back and manually enter the symbol and full name for the gene at MGI ID: " + geneInfo.mgiGeneID; return new AddGeneResult(false,message); } else { geneID = DBConnect.addGeneManually(result.getAccessionID(),geneInfo.manualGeneName,geneInfo.manualGeneSymbol); } } else { geneID = Integer.toString(geneObj.getGeneRecordID()); } newMouse.setGeneID(geneID); } //mgiGeneID = request.getParameter("targetGeneMGIID"); if(geneInfo.targetMgiGeneID != null && !geneInfo.targetMgiGeneID.isEmpty()) { String geneID; Gene geneObj = DBConnect.findGene(geneInfo.targetMgiGeneID); if (geneObj == null) { MGIResult result = MGIConnect.doMGIQuery(geneInfo.targetMgiGeneID,MGIConnect.MGI_MARKER,"This ID is not a valid MGI Gene Accession ID",false); if(result.isValid()) { geneID = DBConnect.addGeneManually(result.getAccessionID(),result.getName(),result.getSymbol()); } else if (geneInfo.manualTargetGeneName == null || geneInfo.manualTargetGeneName.isEmpty() || geneInfo.manualTargetGeneSymbol == null || geneInfo.manualTargetGeneSymbol.isEmpty()) { String message = "Unable to automatically add gene because: " + result.getErrorString() + "<br>.Please go back and manually enter the symbol and full name for the gene at MGI ID: " + geneInfo.targetMgiGeneID; return new AddGeneResult(false,message); } else { geneID = DBConnect.addGeneManually(result.getAccessionID(),geneInfo.manualTargetGeneName,geneInfo.manualTargetGeneSymbol); } } else { geneID = Integer.toString(geneObj.getGeneRecordID()); } newMouse.setTargetGeneID(geneID); } return new AddGeneResult(true, null); } public static int RecordExists(MouseRecord newMouse) { if (newMouse.getRepositoryCatalogNumber() != null && !(newMouse.getRepositoryCatalogNumber().trim().equalsIgnoreCase("none"))) { try { int mID = -1; String recordIDString = newMouse.getMouseID(); if (recordIDString != null && !recordIDString.isEmpty() && !recordIDString.equalsIgnoreCase("null")) { mID = Integer.parseInt(newMouse.getMouseID()); } return DBConnect.checkForDuplicates(Integer.parseInt(newMouse.getRepositoryCatalogNumber()), mID); } catch (NumberFormatException ex) { //ignore these exceptions, caused by abnormal mgi id } } return -1; } public static void AddHolders(MouseRecord newMouse, HttpServletRequest request) { //create nice and neat ArrayList of holders ArrayList<MouseHolder> holders = new ArrayList<MouseHolder>(); String holderIDStr; int k = 0; while ((holderIDStr = request.getParameter("holder_id-" + k)) != null) { int holderID = HTMLGeneration.stringToInt(holderIDStr); if(holderID > 1) { MouseHolder holder = new MouseHolder(); holder.setFacilityID(HTMLGeneration.stringToInt(request.getParameter("facility_id-" + k))); holder.setCovert(request.getParameter("covertHolder_-" + k) != null); holder.setCryoLiveStatus(request.getParameter("cryoLiveStatus-" + k)); holder.setHolderID(holderID); holders.add(holder); } k++; } newMouse.setHolders(holders); } public static void AddPubMedIds(MouseRecord newMouse, HttpServletRequest request) { //create nice and neat ArrayList of PM IDs ArrayList<String> pmIDs = new ArrayList<String>(); String pmID; int k = 1; while((pmID = request.getParameter("pmid" + k)) != null) { pmIDs.add(pmID); k++; } newMouse.setPubmedIDs(pmIDs); } }