JAL-2418 source formatting
[jalview.git] / src / jalview / urls / UrlProvider.java
index 9e8d7bc..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;
 
 /**
@@ -42,99 +43,102 @@ public class UrlProvider implements UrlProviderI
   // 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;
   }
 
@@ -176,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;
       }
     }
@@ -195,29 +199,48 @@ public class UrlProvider implements UrlProviderI
   }
 
   @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
@@ -225,10 +248,4 @@ public class UrlProvider implements UrlProviderI
   {
     return customProvider.isUserEntry(id);
   }
-
-  @Override
-  public List<String> getDisplayColumnNames()
-  {
-    return colNames.subList(0, 4);
-  }
 }