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;
/**
// Specific reference to custom URL link provider
private UrlProviderI customProvider;
- // List of columns which this provider will supply
- private List<String> colNames = new ArrayList<String>();
-
/**
- * 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,
- IdentifiersUrlProvider.ID_ORG_FILE);
- customProvider = new CustomUrlProvider(cachedUrlList);
- providers.add(idProvider);
- providers.add(customProvider);
+ providers = allProviders;
- setUpColumns();
+ customProvider = findCustomProvider();
// check that the defaultUrl still exists
- if (!setDefaultUrl(defaultUrlString))
+ if (!contains(defaultUrlString))
+ {
+ // if the defaultUrl can't be found in any of the providers
+ // set up a custom default url
+ choosePrimaryUrl();
+ }
+ else
{
- chooseDefaultUrl();
+ 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(null,
- IdentifiersUrlProvider.ID_ORG_FILE);
- customProvider = new CustomUrlProvider(urlList);
- providers.add(idProvider);
- providers.add(customProvider);
-
- setUpColumns();
-
- // 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;
}
- private void setUpColumns()
+ @Override
+ public boolean setPrimaryUrl(String id)
{
- colNames.add("Name");
- colNames.add("URL");
- colNames.add("In Menu");
- colNames.add("Default");
- colNames.add("ID");
+ boolean outcome = false;
+ for (UrlProviderI p : providers)
+ {
+ if (p.setPrimaryUrl(id))
+ {
+ outcome = true;
+ }
+ }
+ if (!outcome)
+ {
+ throw new IllegalArgumentException();
+ }
+ 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();
- result += SEP;
+ String next = p.writeUrlsAsString(selected);
+ if (!next.isEmpty())
+ {
+ result += next;
+ result += SEP;
+ }
}
// remove last sep
- result = result.substring(0, result.length() - 1);
+ if (!result.isEmpty())
+ {
+ result = result.substring(0, result.length() - 1);
+ }
return result;
}
}
@Override
- public String getDefaultUrl(String seqid)
+ 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 id = null;
+ for (UrlProviderI p : providers)
+ {
+ if (p.getPrimaryUrlId() == null)
+ {
+ continue;
+ }
+ else
+ {
+ id = p.getPrimaryUrlId();
+ break;
+ }
+ }
+ return id;
+ }
+
+ @Override
+ public String getPrimaryTarget(String seqid)
{
String target = null;
for (UrlProviderI p : providers)
{
- if (p.getDefaultTarget(seqid) == null)
+ if (p.getPrimaryTarget(seqid) == null)
{
continue;
}
else
{
- target = p.getDefaultTarget(seqid);
+ 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
{
return customProvider.isUserEntry(id);
}
-
- @Override
- public List<String> getDisplayColumnNames()
- {
- return colNames.subList(0, 4);
- }
}