X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Furls%2FUrlProvider.java;fp=src%2Fjalview%2Furls%2FUrlProvider.java;h=17b179b41edc1af6c8c4cec515ad44aadb74d362;hb=9331850e50bdab97c3a96e7371d2d53265217693;hp=0000000000000000000000000000000000000000;hpb=d3cabbfdd38d554bb8a8b17d3e2c4b113c102545;p=jalview.git diff --git a/src/jalview/urls/UrlProvider.java b/src/jalview/urls/UrlProvider.java new file mode 100644 index 0000000..17b179b --- /dev/null +++ b/src/jalview/urls/UrlProvider.java @@ -0,0 +1,208 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.urls; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Vector; + +/** + * + * Implements the UrlProviderI interface for a composite UrlProvider object + * + * @author $author$ + * @version $Revision$ + */ +public class UrlProvider implements UrlProviderI +{ + // List of actual URL link providers + private List providers; + + // Specific reference to custom URL link provider + private UrlProviderI customProvider; + + /** + * Construct URL provider from string of cached URLs, and set default URL + * + * @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 + */ + public UrlProvider(String defaultUrlString, String cachedUrlList) + { + // create all the UrlProviders we need + providers = new ArrayList(); + + UrlProviderI idProvider = new IdentifiersUrlProvider(cachedUrlList); + customProvider = new CustomUrlProvider(cachedUrlList); + providers.add(idProvider); + providers.add(customProvider); + + // check that the defaultUrl still exists + if (!setDefaultUrl(defaultUrlString)) + { + chooseDefaultUrl(); + } + } + + /** + * 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 + */ + public UrlProvider(String defaultUrlString, Map urlList) + { + // 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)) + { + chooseDefaultUrl(); + } + } + + @Override + public String getDefaultUrl() + { + String defaultUrl = null; + for (UrlProviderI p : providers) + { + defaultUrl = p.getDefaultUrl(); + if (defaultUrl != null) + { + return defaultUrl; + } + } + + // no provider has a default set, just choose one + if (defaultUrl == null) + { + defaultUrl = chooseDefaultUrl(); + } + return defaultUrl; + } + + @Override + public boolean setDefaultUrl(String id) + { + for (UrlProviderI p : providers) + { + if (p.setDefaultUrl(id)) + { + return true; + } + } + return false; + } + + @Override + public String writeUrlsAsString() + { + String result = ""; + for (UrlProviderI p : providers) + { + result += p.writeUrlsAsString(); + } + return result; + } + + @Override + public Vector getLinksForDisplay() + { + Vector fullLinks = new Vector(); + for (UrlProviderI p : providers) + { + List links = p.getLinksForDisplay(); + if (links != null) + { + // will obliterate links with same keys from different providers + // must have checks in place to prevent user from duplicating ids + fullLinks.addAll(links); + } + } + return fullLinks; + } + + @Override + public String getDefaultUrl(String seqid) + { + String link = null; + for (UrlProviderI p : providers) + { + if (p.getDefaultUrl(seqid) == null) + { + continue; + } + else + { + link = p.getDefaultUrl(seqid); + break; + } + } + return link; + } + + @Override + public String getDefaultTarget(String seqid) + { + String target = null; + for (UrlProviderI p : providers) + { + if (p.getDefaultTarget(seqid) == null) + { + continue; + } + else + { + target = p.getDefaultTarget(seqid); + break; + } + } + return target; + } + + @Override + public void setUrlLinks(Vector names, Vector urls) + { + // only allow custom urls to be updated by user + customProvider.setUrlLinks(names, urls); + } + + @Override + public String chooseDefaultUrl() + { + // choose a custom url default + return customProvider.chooseDefaultUrl(); + } + +}