package edu.ucsf.mousedatabase; import java.net.URL; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class JaxMiceConnect { private static final String baseUrl = "http://jaxmice.jax.org/strain/"; private static final String urlTail = ".html"; private static final String alleleRegex = "Allele Symbol[^\\n]*\\n[^\\n]*MGI:([\\d]+)"; private static final String stockNumberRegex = "([\\d]{6})"; // <tr><th colspan="2">Allele Symbol</th><td colspan="2"> // <a href="http://www.informatics.jax.org/accession/MGI:2664398" target="_top">Tg(DO11.10)10Dlo</a></td></tr> public static ArrayList<Integer> GetMGINumbersFromJax(String jaxStockNumber) { ArrayList<Integer> mgiNumbers = new ArrayList<Integer>(); String extractedNumber = HTMLUtilities.extractFirstGroup(stockNumberRegex, jaxStockNumber); if (extractedNumber == null) { Log.Error("No JAX stock number in string " + jaxStockNumber); return mgiNumbers; } Log.Info("Extracted JAX stock number '" + extractedNumber + "' from string " + jaxStockNumber); String strainData = getStrainData(extractedNumber); if (strainData == null) { return mgiNumbers; } Pattern ptn = Pattern.compile(alleleRegex); Matcher match = ptn.matcher(strainData); while (match.find()) { if (match.groupCount() <= 0) { continue; } String possibleMgiNumber = match.group(1); try { int mgiNumber = Integer.parseInt(possibleMgiNumber); Log.Info("Conversion from jax: " + extractedNumber + " to MGI: " + mgiNumber); mgiNumbers.add(mgiNumber); } catch(NumberFormatException e) { Log.Error("Failed to convert " + possibleMgiNumber + " to an MGI number",e); } } return mgiNumbers; } private static String getStrainData(String stockNumber) { try { String httpResponse = HTMLUtilities.getHttpResponse(new URL(baseUrl + stockNumber + urlTail),"text/html"); return httpResponse; } catch (Exception e) { Log.Error("Failed to get MGI ID for for stock number " + stockNumber + ": " + e.getMessage()); return null; } } }