X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Furls%2FUrlProvider.java;h=2cb01730681083e0f4edb8c84b850405dea56a49;hb=14307f5cfcbc90c419c892434613a500ca550ecc;hp=17b179b41edc1af6c8c4cec515ad44aadb74d362;hpb=9331850e50bdab97c3a96e7371d2d53265217693;p=jalview.git diff --git a/src/jalview/urls/UrlProvider.java b/src/jalview/urls/UrlProvider.java index 17b179b..2cb0173 100644 --- a/src/jalview/urls/UrlProvider.java +++ b/src/jalview/urls/UrlProvider.java @@ -20,9 +20,12 @@ */ package jalview.urls; +import static jalview.util.UrlConstants.SEP; + +import jalview.urls.api.UrlProviderI; + import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Vector; /** @@ -41,108 +44,111 @@ public class UrlProvider implements UrlProviderI private UrlProviderI customProvider; /** - * Construct URL provider from string of cached URLs, and set default URL + * Constructor for UrlProvider composite * * @param defaultUrlString - * id of the current default URL - * @param cachedUrlList - * string listing current active URLs, expected to be custom URLs - * separated by |, or ids of URLs + * id of default url + * @param allProviders + * list of UrlProviders this provider gives access to */ - public UrlProvider(String defaultUrlString, String cachedUrlList) + public UrlProvider(String defaultUrlString, + List allProviders) { - // create all the UrlProviders we need - providers = new ArrayList(); - - UrlProviderI idProvider = new IdentifiersUrlProvider(cachedUrlList); - customProvider = new CustomUrlProvider(cachedUrlList); - providers.add(idProvider); - providers.add(customProvider); + providers = allProviders; + + customProvider = findCustomProvider(); // check that the defaultUrl still exists - if (!setDefaultUrl(defaultUrlString)) + if (!contains(defaultUrlString)) { - chooseDefaultUrl(); + // if the defaultUrl can't be found in any of the providers + // set up a custom default url + choosePrimaryUrl(); + } + else + { + setPrimaryUrl(defaultUrlString); } } - - /** - * Construct URL provider from a map of (label,url) pairs, and set default URL - * - * @param defaultUrlString - * id of the current default URL - * @param urlList - * vector of (label, url) pairs + + /* + * Store ref to custom url provider */ - public UrlProvider(String defaultUrlString, Map urlList) + private UrlProviderI findCustomProvider() { - // create all the UrlProviders we need - providers = new ArrayList(); - - UrlProviderI idProvider = new IdentifiersUrlProvider(urlList); - customProvider = new CustomUrlProvider(urlList); - providers.add(idProvider); - providers.add(customProvider); - - // check that the defaultUrl still exists - if (!setDefaultUrl(defaultUrlString)) + for (UrlProviderI p : providers) { - chooseDefaultUrl(); + if (p instanceof CustomUrlProvider) + { + return p; + } } + + System.out.println( + "Error initialising UrlProvider - no custom url provider"); + return null; } @Override - public String getDefaultUrl() + public boolean setPrimaryUrl(String id) { - String defaultUrl = null; + boolean outcome = false; for (UrlProviderI p : providers) { - defaultUrl = p.getDefaultUrl(); - if (defaultUrl != null) + if (p.setPrimaryUrl(id)) { - return defaultUrl; + outcome = true; } } - - // no provider has a default set, just choose one - if (defaultUrl == null) + if (!outcome) { - defaultUrl = chooseDefaultUrl(); + throw new IllegalArgumentException(); } - return defaultUrl; + return outcome; } - + @Override - public boolean setDefaultUrl(String id) + public boolean contains(String id) { + boolean outcome = false; for (UrlProviderI p : providers) { - if (p.setDefaultUrl(id)) + if (p.contains(id)) { - return true; + outcome = true; } } - return false; + return outcome; } - + @Override - public String writeUrlsAsString() + public String writeUrlsAsString(boolean selected) { String result = ""; for (UrlProviderI p : providers) { - result += p.writeUrlsAsString(); + String next = p.writeUrlsAsString(selected); + if (!next.isEmpty()) + { + result += next; + result += SEP; + } + } + // remove last sep + if (!result.isEmpty()) + { + result = result.substring(0, result.length() - 1); } return result; } @Override - public Vector getLinksForDisplay() + public Vector getLinksForMenu() { Vector fullLinks = new Vector(); for (UrlProviderI p : providers) { - List links = p.getLinksForDisplay(); + List links = p.getLinksForMenu(); if (links != null) { // will obliterate links with same keys from different providers @@ -154,18 +160,38 @@ public class UrlProvider implements UrlProviderI } @Override - public String getDefaultUrl(String seqid) + public List getLinksForTable() + { + ArrayList displayLinks = new ArrayList(); + for (UrlProviderI p : providers) + { + displayLinks.addAll(p.getLinksForTable()); + } + return displayLinks; + } + + @Override + public void setUrlData(List links) + { + for (UrlProviderI p : providers) + { + p.setUrlData(links); + } + } + + @Override + public String getPrimaryUrl(String seqid) { String link = null; for (UrlProviderI p : providers) { - if (p.getDefaultUrl(seqid) == null) + if (p.getPrimaryUrl(seqid) == null) { continue; } else { - link = p.getDefaultUrl(seqid); + link = p.getPrimaryUrl(seqid); break; } } @@ -173,36 +199,53 @@ public class UrlProvider implements UrlProviderI } @Override - public String getDefaultTarget(String seqid) + public String getPrimaryUrlId() { - String target = null; + String id = null; for (UrlProviderI p : providers) { - if (p.getDefaultTarget(seqid) == null) + if (p.getPrimaryUrlId() == null) { continue; } else { - target = p.getDefaultTarget(seqid); + id = p.getPrimaryUrlId(); break; } } - return target; + return id; } @Override - public void setUrlLinks(Vector names, Vector urls) + public String getPrimaryTarget(String seqid) { - // only allow custom urls to be updated by user - customProvider.setUrlLinks(names, urls); + String target = null; + for (UrlProviderI p : providers) + { + if (p.getPrimaryTarget(seqid) == null) + { + continue; + } + else + { + target = p.getPrimaryTarget(seqid); + break; + } + } + return target; } - + @Override - public String chooseDefaultUrl() + public String choosePrimaryUrl() { // choose a custom url default - return customProvider.chooseDefaultUrl(); + return customProvider.choosePrimaryUrl(); } + @Override + public boolean isUserEntry(String id) + { + return customProvider.isUserEntry(id); + } }