package jalview.util;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Vector;
/**
// List of actual URL link providers
private List<UrlProviderI> providers;
- // Record of default URL
- private String defaultUrl;
-
+ // Specific reference to custom URL link provider
+ private UrlProviderI customProvider;
+
/**
* Construct URL provider from string of cached URLs, and set default URL
*
- * @param defaultUrl
+ * @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 defaultUrl, String cachedUrlList)
+ public UrlProvider(String defaultUrlString, String cachedUrlList)
{
// create all the UrlProviders we need
providers = new ArrayList<UrlProviderI>();
UrlProviderI idProvider = new IdentifiersUrlProvider(cachedUrlList);
- UrlProviderI customProvider = new CustomUrlProvider(cachedUrlList);
+ customProvider = new CustomUrlProvider(cachedUrlList);
providers.add(idProvider);
providers.add(customProvider);
// check that the defaultUrl still exists
+ if (!setDefaultUrl(defaultUrlString))
+ {
+ chooseDefaultUrl();
+ }
}
/**
- * Get all the URL links
- * @return all URL links
+ * 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
*/
- @Override
- public HashMap<String, UrlLink> getUrlLinks()
+ public UrlProvider(String defaultUrlString, Map<String, String> urlList)
{
- HashMap<String, UrlLink> urls = new HashMap<String, UrlLink>();
- for (UrlProviderI p : providers)
+ // 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))
{
- urls.putAll(p.getUrlLinks());
+ chooseDefaultUrl();
}
- return urls;
}
-
- /**
- * Get the default URL
- * @return id of the default URL
- */
+
@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;
}
- /**
- * Set the default URL
- * @param id the id of the URL to set as default
- */
@Override
- public void setDefaultUrl(String id)
+ public boolean setDefaultUrl(String id)
{
- defaultUrl = id;
+ for (UrlProviderI p : providers)
+ {
+ if (p.setDefaultUrl(id))
+ {
+ return true;
+ }
+ }
+ return false;
}
- /**
- * Write out all URLs as a string suitable for serialising
- * @return string representation of available URLs
- */
@Override
public String writeUrlsAsString()
{
}
return result;
}
-
- /**
- * Set URL links from string
- *
- * @param cachedUrl
- * string representation of URL links, i.e. | separated
- */
+
@Override
- public void setUrlLinks(String cachedUrl)
+ public Vector<String> getLinksForDisplay()
{
+ Vector<String> fullLinks = new Vector<String>();
for (UrlProviderI p : providers)
{
- p.setUrlLinks(cachedUrl);
+ 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;
}
-
- /**
- * Set URL links from collection
- *
- * @param links
- * hashmap containing string indexed UrlLinks
- */
+
@Override
- public void setUrlLinks(HashMap<String, UrlLink> links)
+ public String getDefaultUrl(String seqid)
{
+ String link = null;
for (UrlProviderI p : providers)
{
- p.setUrlLinks(links);
+ if (p.getDefaultUrl(seqid) == null)
+ {
+ continue;
+ }
+ else
+ {
+ link = p.getDefaultUrl(seqid);
+ break;
+ }
}
+ return link;
}
@Override
- public void getLinksForDisplay(Vector<String> nameLinks,
- Vector<String> urlLinks)
+ public String getDefaultTarget(String seqid)
{
- Vector<String> names = new Vector<String>();
- Vector<String> links = new Vector<String>();
+ String target = null;
for (UrlProviderI p : providers)
{
- p.getLinksForDisplay(names, links);
- nameLinks.addAll(names);
- urlLinks.addAll(links);
+ 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();
+ }
+
}