*/
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;
/**
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<UrlProviderI> allProviders)
{
- // create all the UrlProviders we need
- providers = new ArrayList<UrlProviderI>();
-
- UrlProviderI idProvider = new IdentifiersUrlProvider(cachedUrlList,
- ID_ORG_FILE);
- 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<String, String> urlList)
+ private UrlProviderI findCustomProvider()
{
- // create all the UrlProviders we need
- providers = new ArrayList<UrlProviderI>();
-
- UrlProviderI idProvider = new IdentifiersUrlProvider(urlList,
- ID_ORG_FILE);
- 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<String> getLinksForDisplay()
+ public Vector<String> getLinksForMenu()
{
Vector<String> fullLinks = new Vector<String>();
for (UrlProviderI p : providers)
{
- List<String> links = p.getLinksForDisplay();
+ List<String> links = p.getLinksForMenu();
if (links != null)
{
// will obliterate links with same keys from different providers
}
@Override
- public String getDefaultUrl(String seqid)
+ public List<UrlLinkDisplay> getLinksForTable()
+ {
+ ArrayList<UrlLinkDisplay> displayLinks = new ArrayList<UrlLinkDisplay>();
+ for (UrlProviderI p : providers)
+ {
+ displayLinks.addAll(p.getLinksForTable());
+ }
+ return displayLinks;
+ }
+
+ @Override
+ public void setUrlData(List<UrlLinkDisplay> 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;
}
}
}
@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<String> names, Vector<String> 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);
+ }
}