JAL-2069 update spike branch with latest
[jalview.git] / src / jalview / urls / CustomUrlProvider.java
index ab84be2..86d5660 100644 (file)
@@ -37,7 +37,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.StringTokenizer;
-import java.util.Vector;
 
 /**
  * 
@@ -76,7 +75,8 @@ public class CustomUrlProvider extends UrlProviderImpl
       nonselectedUrls = parseUrlStrings(storedUrlList);
     } catch (Exception ex)
     {
-      System.out.println(ex + "\nError parsing sequence links");
+      System.out
+              .println(ex.getMessage() + "\nError parsing sequence links");
     }
   }
 
@@ -98,7 +98,8 @@ public class CustomUrlProvider extends UrlProviderImpl
       nonselectedUrls = parseUrlList(storedUrlList);
     } catch (Exception ex)
     {
-      System.out.println(ex + "\nError parsing sequence links");
+      System.out
+              .println(ex.getMessage() + "\nError parsing sequence links");
     }
   }
 
@@ -128,7 +129,7 @@ public class CustomUrlProvider extends UrlProviderImpl
         {
           url = url + SEP + st.nextToken();
         }
-        urls.put(name, new UrlLink(name + SEP + url));
+        urls.put(name, new UrlLink(name, url, name));
       }
     }
     upgradeOldLinks(urls);
@@ -138,12 +139,17 @@ public class CustomUrlProvider extends UrlProviderImpl
   private HashMap<String, UrlLink> parseUrlList(Map<String, String> urlList)
   {
     HashMap<String, UrlLink> urls = new HashMap<String, UrlLink>();
+    if (urlList == null)
+    {
+      return urls;
+    }
+
     Iterator<Map.Entry<String, String>> it = urlList.entrySet().iterator();
     while (it.hasNext())
     {
       Map.Entry<String, String> pair = it.next();
       urls.put(pair.getKey(),
-              new UrlLink(pair.getKey() + SEP + pair.getValue()));
+              new UrlLink(pair.getKey(), pair.getValue(), pair.getKey()));
     }
     upgradeOldLinks(urls);
     return urls;
@@ -154,18 +160,34 @@ public class CustomUrlProvider extends UrlProviderImpl
    */
   private void upgradeOldLinks(HashMap<String, UrlLink> urls)
   {
+    boolean upgrade = false;
     // upgrade old SRS link
     if (urls.containsKey(SRS_LABEL))
     {
       urls.remove(SRS_LABEL);
-      urls.put(UrlConstants.DEFAULT_LABEL, new UrlLink(UrlConstants.DEFAULT_STRING));
+      upgrade = true;
+    }
+    // upgrade old EBI link - easier just to remove and re-add than faffing
+    // around checking exact url
+    if (urls.containsKey(UrlConstants.DEFAULT_LABEL))
+    {
+      // note because this is called separately for selected and nonselected
+      // urls, the default url will not always be present
+      urls.remove(UrlConstants.DEFAULT_LABEL);
+      upgrade = true;
+    }
+    if (upgrade)
+    {
+      UrlLink link = new UrlLink(UrlConstants.DEFAULT_STRING);
+      link.setLabel(UrlConstants.DEFAULT_LABEL);
+      urls.put(UrlConstants.DEFAULT_LABEL, link);
     }
   }
 
   @Override
-  public Vector<String> getLinksForMenu()
+  public List<String> getLinksForMenu()
   {
-    Vector<String> links = new Vector<String>();
+    List<String> links = new ArrayList<String>();
     Iterator<Map.Entry<String, UrlLink>> it = selectedUrls.entrySet()
             .iterator();
     while (it.hasNext())
@@ -192,23 +214,22 @@ public class CustomUrlProvider extends UrlProviderImpl
   }
 
   @Override
-  public boolean setDefaultUrl(String id)
+  public boolean setPrimaryUrl(String id)
   {
     if (selectedUrls.containsKey(id))
     {
-      defaultUrl = id;
+      primaryUrl = id;
     }
     else if (nonselectedUrls.containsKey(id))
     {
-      selectedUrls.put(id, nonselectedUrls.get(id));
-      nonselectedUrls.remove(id);
-      defaultUrl = id;
+      primaryUrl = id;
     }
     else
     {
-      defaultUrl = null;
+      primaryUrl = null;
     }
-    return (defaultUrl != null);
+
+    return (primaryUrl != null);
   }
 
   @Override
@@ -243,21 +264,26 @@ public class CustomUrlProvider extends UrlProviderImpl
   }
 
   @Override
-  public String getDefaultUrl(String seqid)
+  public String getPrimaryUrl(String seqid)
   {
-    return super.getDefaultUrl(seqid, selectedUrls);
+    String result = super.getPrimaryUrl(seqid, selectedUrls);
+    if (result == null)
+    {
+      result = super.getPrimaryUrl(seqid, nonselectedUrls);
+    }
+    return result;
   }
 
   @Override
-  public String getDefaultUrlId()
+  public String getPrimaryUrlId()
   {
-    return defaultUrl;
+    return primaryUrl;
   }
 
   @Override
-  public String getDefaultTarget(String seqid)
+  public String getPrimaryTarget(String seqid)
   {
-    return selectedUrls.get(defaultUrl).getTarget();
+    return selectedUrls.get(primaryUrl).getTarget();
   }
 
   @Override
@@ -283,19 +309,18 @@ public class CustomUrlProvider extends UrlProviderImpl
         }
         if (link.getIsSelected())
         {
-          selurls.put(link.getId(),
-                  new UrlLink(link.getId() + SEP + link.getUrl()));
-
-          // sort out default and selected ids
-          if (link.getIsDefault())
-          {
-            setDefaultUrl(link.getId());
-          }
+          selurls.put(link.getId(), new UrlLink(link.getDescription(),
+                  link.getUrl(), link.getDescription()));
         }
         else
         {
-          unselurls.put(link.getId(),
-                new UrlLink(link.getId() + SEP + link.getUrl()));
+          unselurls.put(link.getId(), new UrlLink(link.getDescription(),
+                  link.getUrl(), link.getDescription()));
+        }
+        // sort out primary and selected ids
+        if (link.getIsPrimary())
+        {
+          setPrimaryUrl(link.getId());
         }
       }
 
@@ -305,23 +330,25 @@ public class CustomUrlProvider extends UrlProviderImpl
   }
 
   @Override
-  public String chooseDefaultUrl()
+  public String choosePrimaryUrl()
   {
-    // unilaterally set the default id to the EMBL_EBI link
-    
-    if (nonselectedUrls.containsKey(UrlConstants.DEFAULT_LABEL))
-    {
-      // default key must be selected so remove from nonselected list
-      nonselectedUrls.remove(UrlConstants.DEFAULT_LABEL);
-    }
-
-    if (!selectedUrls.containsKey(UrlConstants.DEFAULT_LABEL))
+    // unilaterally set the primary id to the EMBL_EBI link
+    if ((!nonselectedUrls.containsKey(UrlConstants.DEFAULT_LABEL))
+            && (!selectedUrls.containsKey(UrlConstants.DEFAULT_LABEL)))
     {
-      selectedUrls.put(UrlConstants.DEFAULT_LABEL, new UrlLink(
-              UrlConstants.DEFAULT_STRING));
+      UrlLink link = new UrlLink(UrlConstants.DEFAULT_STRING);
+      link.setLabel(UrlConstants.DEFAULT_LABEL);
+      selectedUrls.put(UrlConstants.DEFAULT_LABEL, link);
     }
-    defaultUrl = UrlConstants.DEFAULT_LABEL;
+    primaryUrl = UrlConstants.DEFAULT_LABEL;
     return UrlConstants.DEFAULT_LABEL;
   }
 
+  @Override
+  public boolean contains(String id)
+  {
+    return (selectedUrls.containsKey(id)
+            || nonselectedUrls.containsKey(id));
+  }
+
 }