JAL-2418 source formatting
[jalview.git] / src / jalview / urls / UrlProvider.java
index 37e95e2..2cb0173 100644 (file)
@@ -22,9 +22,10 @@ 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;
 
 /**
@@ -43,113 +44,111 @@ public class UrlProvider implements UrlProviderI
   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(null,
-            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();
-      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 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
@@ -181,18 +180,18 @@ public class UrlProvider implements UrlProviderI
   }
 
   @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;
       }
     }
@@ -200,36 +199,48 @@ public class UrlProvider implements UrlProviderI
   }
 
   @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