From: kiramt Date: Fri, 18 Nov 2016 07:16:48 +0000 (+0000) Subject: JAL-2316 First pass identifiers.org downloading working X-Git-Tag: Release_2_10_3b1~346^2~30 X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=commitdiff_plain;h=7b733c615ca6ef20fd2e330c89aa566de0d4836f JAL-2316 First pass identifiers.org downloading working --- diff --git a/src/jalview/urls/CustomUrlProvider.java b/src/jalview/urls/CustomUrlProvider.java index 2d26883..d88c571 100644 --- a/src/jalview/urls/CustomUrlProvider.java +++ b/src/jalview/urls/CustomUrlProvider.java @@ -21,11 +21,6 @@ package jalview.urls; -//import static jalview.util.UrlConstants.EMBLEBI_LABEL; -//import static jalview.util.UrlConstants.EMBLEBI_STRING; -//import static jalview.util.UrlConstants.SRS_LABEL; - - import static jalview.util.UrlConstants.DB_ACCESSION; import static jalview.util.UrlConstants.DELIM; import static jalview.util.UrlConstants.SEP; diff --git a/src/jalview/urls/IdentifiersUrlProvider.java b/src/jalview/urls/IdentifiersUrlProvider.java index 4b88356..7819136 100644 --- a/src/jalview/urls/IdentifiersUrlProvider.java +++ b/src/jalview/urls/IdentifiersUrlProvider.java @@ -21,9 +21,27 @@ package jalview.urls; -import java.util.Map; +import static jalview.util.UrlConstants.DB_ACCESSION; +import static jalview.util.UrlConstants.DELIM; +import static jalview.util.UrlConstants.SEP; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; import java.util.Vector; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + /** * * Implements the UrlProviderI interface for a UrlProvider object which serves @@ -35,48 +53,160 @@ import java.util.Vector; public class IdentifiersUrlProvider extends UrlProviderImpl { + // map of string ids to urls + private HashMap> urls; + + // list of selected urls + private ArrayList selectedUrls; + public IdentifiersUrlProvider(String cachedUrlList, String idFileName) { + try + { + // File idFile = getIdentifiers(); + urls = readIdentifiers(new FileReader(idFileName)); + checkSelectionMatchesUrls(cachedUrlList); + + } catch (IOException e) + { + + } + } + + private File getIdentifiers() throws IOException + { + String identifiersorgUrl = "http://identifiers.org/rest/collections/"; + String outfile = "identifiers.json"; + int BUFFER_SIZE = 4096; + + URL url = new URL(identifiersorgUrl); + InputStream is = new BufferedInputStream(url.openStream()); + FileOutputStream os = new FileOutputStream(outfile); + byte[] buffer = new byte[BUFFER_SIZE]; + int bytesRead = -1; + while ((bytesRead = is.read(buffer)) != -1) + { + os.write(buffer, 0, bytesRead); + } + os.close(); + is.close(); + + return new File(outfile); + } + private HashMap> readIdentifiers( + FileReader reader) + { + JSONParser parser = new JSONParser(); + HashMap> idData = new HashMap>(); + + try + { + JSONArray jsonarray = (JSONArray) parser.parse(reader); + + // loop over each entry in JSON array and build HashMap entry + for (int i = 0; i < jsonarray.size(); i++) + { + JSONObject item = (JSONObject) jsonarray.get(i); + + HashMap idEntry = new HashMap(); + idEntry.put("name", (String) item.get("name")); + idEntry.put("url", (String) item.get("url")); + idData.put((String) item.get("id"), idEntry); + } + } catch (FileNotFoundException e) + { + e.printStackTrace(); + } catch (IOException e) + { + e.printStackTrace(); + } catch (ParseException e) + { + e.printStackTrace(); + } + return idData; } - public IdentifiersUrlProvider(Map urlList, - String idFileName) + private void checkSelectionMatchesUrls(String cachedUrlList) { + selectedUrls = new ArrayList(); + String[] prevSelected = cachedUrlList.split("\\" + SEP); + for (String id : prevSelected) + { + if (urls.containsKey(id)) + { + selectedUrls.add(id); + } + } + + // reset defaultUrl in case it is no longer selected + setDefaultUrl(defaultUrl); + } + private void checkSelectionMatchesUrls(Vector idList) + { + selectedUrls = new ArrayList(); + String[] prevSelected = new String[idList.size()]; + idList.toArray(prevSelected); + for (String id : prevSelected) + { + if (urls.containsKey(id)) + { + selectedUrls.add(id); + } + } + + // reset defaultUrl in case it is no longer selected + setDefaultUrl(defaultUrl); } @Override public String getDefaultUrl() { - // TODO Auto-generated method stub - return null; + return defaultUrl; } @Override public boolean setDefaultUrl(String id) { - return false; + if (selectedUrls.contains(id)) + { + defaultUrl = id; + } + else + { + defaultUrl = null; + } + return selectedUrls.contains(id); } @Override public String writeUrlsAsString() { - return ""; + StringBuffer links = new StringBuffer(); + for (String k : selectedUrls) + { + links.append(k); + } + return links.toString(); } @Override public Vector getLinksForDisplay() { - // TODO Auto-generated method stub - return null; + Vector links = new Vector(); + for (String key : selectedUrls) + { + links.add(key + SEP + urls.get(key).get("url") + "/" + DELIM + + DB_ACCESSION + DELIM); + } + return links; } @Override public String getDefaultUrl(String seqid) { - // TODO Auto-generated method stub - return null; + return urls.get(defaultUrl).get("url") + "/" + seqid; } @Override @@ -89,8 +219,8 @@ public class IdentifiersUrlProvider extends UrlProviderImpl @Override public void setUrlLinks(Vector names, Vector urls) { - // deliberately left empty - // TODO throw exception if called + // ignores urls, only uses names (as ids) + checkSelectionMatchesUrls(names); } @Override diff --git a/src/jalview/urls/UrlProvider.java b/src/jalview/urls/UrlProvider.java index 4ae9d13..af618f0 100644 --- a/src/jalview/urls/UrlProvider.java +++ b/src/jalview/urls/UrlProvider.java @@ -57,7 +57,7 @@ public class UrlProvider implements UrlProviderI UrlProviderI idProvider = new IdentifiersUrlProvider(cachedUrlList, ID_ORG_FILE); customProvider = new CustomUrlProvider(cachedUrlList); - providers.add(idProvider); + // providers.add(idProvider); providers.add(customProvider); // check that the defaultUrl still exists @@ -80,7 +80,7 @@ public class UrlProvider implements UrlProviderI // create all the UrlProviders we need providers = new ArrayList(); - UrlProviderI idProvider = new IdentifiersUrlProvider(urlList, + UrlProviderI idProvider = new IdentifiersUrlProvider(null, ID_ORG_FILE); customProvider = new CustomUrlProvider(urlList); providers.add(idProvider); diff --git a/test/jalview/urls/IdentifiersUrlProviderTest.java b/test/jalview/urls/IdentifiersUrlProviderTest.java index d8776f4..843e2d5 100644 --- a/test/jalview/urls/IdentifiersUrlProviderTest.java +++ b/test/jalview/urls/IdentifiersUrlProviderTest.java @@ -25,10 +25,13 @@ import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertTrue; +import java.io.File; +import java.io.FileWriter; import java.util.Arrays; import java.util.HashMap; import java.util.Vector; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class IdentifiersUrlProviderTest @@ -49,14 +52,27 @@ public class IdentifiersUrlProviderTest "MIR:00000011|http://identifiers.org/interpro/$DB_ACCESSION$", "MIR:00000372|http://identifiers.org/ena.embl/$DB_ACCESSION$"}; + private static final String[] dlinks1 = { + "MIR:00000011|http://identifiers.org/interpro/$DB_ACCESSION$", + "MIR:00000372|http://identifiers.org/ena.embl/$DB_ACCESSION$" }; + + private static final String[] dlinks2 = { + "MIR:00000005|http://identifiers.org/uniprot/$DB_ACCESSION$", + "MIR:00000011|http://identifiers.org/interpro/$DB_ACCESSION$" }; + private static final String stringLinks = "MIR:00000005|http://identifiers.org/uniprot/$DB_ACCESSION$" + "MIR:00000011|http://identifiers.org/interpro/$DB_ACCESSION$" + "MIR:00000372|http://identifiers.org/ena.embl/$DB_ACCESSION$"; - private static final Vector displayLinks = new Vector( Arrays.asList(dlinks)); + private static final Vector displayLinks1 = new Vector( + Arrays.asList(dlinks1)); + + private static final Vector displayLinks2 = new Vector( + Arrays.asList(dlinks2)); + private static final HashMap urlMap = new HashMap() { { @@ -66,6 +82,31 @@ public class IdentifiersUrlProviderTest } }; + private String testfile = ""; + + + @BeforeClass(alwaysRun = true) + public void setup() + { + // setup test ids in a file + File outFile = null; + try + { + outFile = File.createTempFile("testidsfile", "txt"); + outFile.deleteOnExit(); + + FileWriter fw = new FileWriter(outFile); + fw.write(testIdOrgFile); + fw.close(); + + testfile = outFile.getAbsolutePath(); + + } catch (Exception ex) + { + System.err.println(ex); + } + } + /* * Test urls are set and returned correctly */ @@ -74,14 +115,14 @@ public class IdentifiersUrlProviderTest { // creation from cached id list String idList = "MIR:00000005|MIR:00000011|MIR:00000372"; - UrlProviderI idProv = new IdentifiersUrlProvider(idList, testIdOrgFile); + UrlProviderI idProv = new IdentifiersUrlProvider(idList, testfile); assertTrue(displayLinks.containsAll(idProv.getLinksForDisplay())); // because UrlProvider does not guarantee order of links, we can't just // compare the output of writeUrlsAsString to a string, hence the hoops here String result = idProv.writeUrlsAsString(); - UrlProviderI up = new IdentifiersUrlProvider(result, testIdOrgFile); + UrlProviderI up = new IdentifiersUrlProvider(result, testfile); assertTrue(displayLinks.containsAll(up.getLinksForDisplay())); } @@ -94,7 +135,7 @@ public class IdentifiersUrlProviderTest { // creation from cached id list String idList = "MIR:00000005|MIR:00000011|MIR:00000372"; - UrlProviderI idProv = new IdentifiersUrlProvider(idList, testIdOrgFile); + UrlProviderI idProv = new IdentifiersUrlProvider(idList, testfile); // initially no default assertEquals(null, idProv.getDefaultUrl()); @@ -122,21 +163,25 @@ public class IdentifiersUrlProviderTest { // creation from cached id list String idList = "MIR:00000005|MIR:00000011|MIR:00000372"; - UrlProviderI idProv = new IdentifiersUrlProvider(idList, testIdOrgFile); + UrlProviderI idProv = new IdentifiersUrlProvider(idList, testfile); // set url links String[] ids = { "MIR:00000372", "MIR:00000011" }; Vector names = new Vector(Arrays.asList(ids)); Vector urls = null; idProv.setUrlLinks(names, urls); - assertEquals(names, idProv.getLinksForDisplay()); + Vector result = idProv.getLinksForDisplay(); + assertEquals(displayLinks1.size(), result.size()); + assertTrue(displayLinks1.containsAll(result)); //set default url then reset url links, default should be unset if not present String[] moreids = { "MIR:00000005", "MIR:00000011" }; names = new Vector(Arrays.asList(moreids)); idProv.setDefaultUrl("MIR:00000372"); idProv.setUrlLinks(names, urls); - assertEquals(names, idProv.getLinksForDisplay()); + result = idProv.getLinksForDisplay(); + assertEquals(displayLinks2.size(), result.size()); + assertTrue(displayLinks2.containsAll(result)); assertEquals(null, idProv.getDefaultUrl()); }