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();
+ }
+
+}