--- /dev/null
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ * 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<UrlProviderI> 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>();
+
+ 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<String, String> urlList)
+ {
+ // create all the UrlProviders we need
+ providers = new ArrayList<UrlProviderI>();
+
+ 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<String> getLinksForDisplay()
+ {
+ Vector<String> fullLinks = new Vector<String>();
+ for (UrlProviderI p : providers)
+ {
+ List<String> 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<String> names, Vector<String> 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();
+ }
+
+}