JAL-2316 GUI updates to Connections tab in Preferences dialog
[jalview.git] / src / jalview / urls / CustomUrlProvider.java
index d88c571..fb0d676 100644 (file)
@@ -29,9 +29,12 @@ import static jalview.util.UrlConstants.SEQUENCE_ID;
 import jalview.util.MessageManager;
 import jalview.util.UrlLink;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.StringTokenizer;
 import java.util.Vector;
 
@@ -73,19 +76,24 @@ public class CustomUrlProvider extends UrlProviderImpl
       while (st.hasMoreElements())
       {
         String name = st.nextToken();
-        String url = st.nextToken();
-        // check for '|' within a regex
-        int rxstart = url.indexOf(DELIM + DB_ACCESSION + DELIM);
-        if (rxstart == -1)
-        {
-          rxstart = url.indexOf(DELIM + SEQUENCE_ID + DELIM);
-        }
-        while (rxstart == -1 && url.indexOf("/=" + DELIM) == -1
-                && st.hasMoreTokens())
+
+        if (!isMiriamId(name))
         {
-          url = url + SEP + st.nextToken();
+          // this one of our custom urls
+          String url = st.nextToken();
+          // check for '|' within a regex
+          int rxstart = url.indexOf(DELIM + DB_ACCESSION + DELIM);
+          if (rxstart == -1)
+          {
+            rxstart = url.indexOf(DELIM + SEQUENCE_ID + DELIM);
+          }
+          while (rxstart == -1 && url.indexOf("/=" + DELIM) == -1
+                  && st.hasMoreTokens())
+          {
+            url = url + SEP + st.nextToken();
+          }
+          urls.put(name, new UrlLink(name + SEP + url));
         }
-        urls.put(name, new UrlLink(name + SEP + url));
       }
     } catch (Exception ex)
     {
@@ -148,6 +156,27 @@ public class CustomUrlProvider extends UrlProviderImpl
   }
 
   @Override
+  public List<UrlLinkDisplay> getLinksForTable()
+  {
+    ArrayList<UrlLinkDisplay> displayLinks = new ArrayList<UrlLinkDisplay>();
+    for (Entry<String, UrlLink> entry : urls.entrySet())
+    {
+      String key = entry.getKey();
+      boolean isDefault = (key.equals(defaultUrl));
+      boolean isSelected = true; // custom urls always selected
+      String displayLink = entry.getValue().toString().split("\\|")[1]; // TODO
+                                                                        // sort
+                                                                        // this
+                                                                        // out
+                                                                        // properly!
+      displayLinks.add(new UrlLinkDisplay(key, key, displayLink,
+              isSelected,
+              isDefault));
+    }
+    return displayLinks;
+  }
+
+  @Override
   public boolean setDefaultUrl(String id)
   {
     if (urls.containsKey(id))
@@ -248,6 +277,45 @@ public class CustomUrlProvider extends UrlProviderImpl
   }
 
   @Override
+  public void setUrlData(List<UrlLinkDisplay> links)
+  {
+    HashMap<String, UrlLink> newurls = new HashMap<String, UrlLink>();
+
+    Iterator<UrlLinkDisplay> it = links.iterator();
+    while (it.hasNext())
+    {
+      UrlLinkDisplay link = it.next();
+
+      // MIRIAM ids will be handled by a different UrlProvider class
+      if (!isMiriamId(link.getId()))
+      {
+
+        // don't allow duplicate key names as entries will be overwritten
+        if (newurls.containsKey(link.getId()))
+        {
+          throw new IllegalArgumentException(MessageManager.formatMessage(
+                  "exception.url_cannot_have_duplicate_id", link.getId()));
+        }
+        if (link.getIsSelected())
+        {
+          newurls.put(link.getId(),
+                  new UrlLink(link.getId() + SEP + link.getUrl()));
+
+          // sort out default and selected ids
+          if (link.getIsDefault())
+          {
+            setDefaultUrl(link.getId());
+          }
+        }
+          // TODO KM make it possible to set and save selected custom urls
+
+      }
+
+    }
+    urls = newurls;
+  }
+
+  @Override
   public String chooseDefaultUrl()
   {
     // unilaterally set the default id to the EMBL_EBI link