X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Furls%2FIdentifiersUrlProvider.java;h=0988e7d2aa7eb5670ccdf8c145d351390a83929f;hb=c17981672620e0b780a2338bd0c74e55cf9ddec2;hp=4b88356c714acdd360554b5a6bc27c9e3ed25f72;hpb=cd8c794750ddb1ed286c95e2fd40fa44da84e1ec;p=jalview.git diff --git a/src/jalview/urls/IdentifiersUrlProvider.java b/src/jalview/urls/IdentifiersUrlProvider.java index 4b88356..0988e7d 100644 --- a/src/jalview/urls/IdentifiersUrlProvider.java +++ b/src/jalview/urls/IdentifiersUrlProvider.java @@ -21,8 +21,25 @@ package jalview.urls; -import java.util.Map; -import java.util.Vector; +import static jalview.util.UrlConstants.DB_ACCESSION; +import static jalview.util.UrlConstants.DELIM; +import static jalview.util.UrlConstants.SEP; + +import jalview.util.UrlLink; + +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.StringTokenizer; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; /** * @@ -35,69 +52,217 @@ import java.util.Vector; public class IdentifiersUrlProvider extends UrlProviderImpl { - public IdentifiersUrlProvider(String cachedUrlList, String idFileName) + private static final String LOCAL_KEY = "Local"; + + private static final String ID_ORG_KEY = "identifiers.org"; + + // map of string ids to urls + private HashMap urls; + + // list of selected urls + private ArrayList selectedUrls; + + public IdentifiersUrlProvider(String cachedUrlList) + { + urls = readIdentifiers(IdOrgSettings.getDownloadLocation()); + selectedUrls = new ArrayList(); + checkSelectionMatchesUrls(cachedUrlList); + } + + /** + * Read data from an identifiers.org download file + * + * @param idFileName + * name of identifiers.org download file + * @return hashmap of identifiers.org data, keyed by MIRIAM id + */ + private HashMap readIdentifiers(String idFileName) { + JSONParser parser = new JSONParser(); + + // identifiers.org data + HashMap idData = new HashMap(); + + try + { + FileReader reader = new FileReader(idFileName); + String key = ""; + JSONObject obj = (JSONObject) parser.parse(reader); + if (obj.containsKey(ID_ORG_KEY)) + { + key = ID_ORG_KEY; + } + else if (obj.containsKey(LOCAL_KEY)) + { + key = LOCAL_KEY; + } + else + { + System.out.println( + "Unexpected key returned from identifiers jalview service"); + return idData; + } + JSONArray jsonarray = (JSONArray) obj.get(key); + + // 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); + + String url = (String) item.get("url") + "/" + DELIM + DB_ACCESSION + + DELIM; + UrlLink link = new UrlLink((String) item.get("name"), url, + (String) item.get("prefix")); + idData.put((String) item.get("id"), link); + } + } catch (FileNotFoundException e) + { + e.printStackTrace(); + idData.clear(); + } catch (IOException e) + { + e.printStackTrace(); + idData.clear(); + } catch (ParseException e) + { + e.printStackTrace(); + idData.clear(); + } + return idData; } - public IdentifiersUrlProvider(Map urlList, - String idFileName) + private void checkSelectionMatchesUrls(String cachedUrlList) { + StringTokenizer st = new StringTokenizer(cachedUrlList, SEP); + while (st.hasMoreElements()) + { + String id = st.nextToken(); + if (isMiriamId(id)) + { + // this is an identifiers.org MIRIAM id + if (urls.containsKey(id)) + { + selectedUrls.add(id); + } + } + } + + // reset defaultUrl in case it is no longer selected + setPrimaryUrl(primaryUrl); } @Override - public String getDefaultUrl() + public boolean setPrimaryUrl(String id) { - // TODO Auto-generated method stub - return null; + if (urls.containsKey(id)) + { + primaryUrl = id; + } + else + { + primaryUrl = null; + } + + return urls.containsKey(id); } @Override - public boolean setDefaultUrl(String id) + public String writeUrlsAsString(boolean selected) { - return false; + if (!selected) + { + return ""; // we don't cache unselected identifiers.org urls + } + + StringBuffer links = new StringBuffer(); + if (!selectedUrls.isEmpty()) + { + for (String k : selectedUrls) + { + links.append(k); + links.append(SEP); + } + // remove last SEP + links.setLength(links.length() - 1); + } + return links.toString(); } @Override - public String writeUrlsAsString() + public List getLinksForMenu() { - return ""; + List links = new ArrayList(); + for (String key : selectedUrls) + { + links.add(urls.get(key).toStringWithTarget()); + } + return links; } @Override - public Vector getLinksForDisplay() + public List getLinksForTable() { - // TODO Auto-generated method stub - return null; + return super.getLinksForTable(urls, selectedUrls, false); } @Override - public String getDefaultUrl(String seqid) + public void setUrlData(List links) { - // TODO Auto-generated method stub - return null; + selectedUrls = new ArrayList(); + + Iterator it = links.iterator(); + while (it.hasNext()) + { + UrlLinkDisplay link = it.next(); + + // Handle links with MIRIAM ids only + if (isMiriamId(link.getId())) + { + // select/deselect links accordingly and set default url + if (urls.containsKey(link.getId())) + { + if (link.getIsSelected()) + { + selectedUrls.add(link.getId()); + } + if (link.getIsPrimary()) + { + setPrimaryUrl(link.getId()); + } + } + } + } } @Override - public String getDefaultTarget(String seqid) + public String getPrimaryUrl(String seqid) { - // TODO Auto-generated method stub - return null; + return super.getPrimaryUrl(seqid, urls); } @Override - public void setUrlLinks(Vector names, Vector urls) + public String getPrimaryUrlId() { - // deliberately left empty - // TODO throw exception if called + return primaryUrl; } @Override - public String chooseDefaultUrl() + public String getPrimaryTarget(String seqid) { - // TODO Auto-generated method stub return null; } + @Override + public String choosePrimaryUrl() + { + return null; + } + + @Override + public boolean contains(String id) + { + return (urls.containsKey(id)); + } }