JAL-2316 GUI updates to Connections tab in Preferences dialog
[jalview.git] / src / jalview / urls / IdentifiersUrlProvider.java
index 7819136..a74ad07 100644 (file)
@@ -35,6 +35,9 @@ import java.io.InputStream;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
 import java.util.Vector;
 
 import org.json.simple.JSONArray;
@@ -65,11 +68,13 @@ public class IdentifiersUrlProvider extends UrlProviderImpl
     {
       // File idFile = getIdentifiers();
       urls = readIdentifiers(new FileReader(idFileName));
+      selectedUrls = new ArrayList<String>();
       checkSelectionMatchesUrls(cachedUrlList);
 
     } catch (IOException e)
     {
-
+      System.out.println("Exception reading URLs from identifiers.org");
+      System.out.println(e.getMessage());
     }
   }
 
@@ -129,7 +134,7 @@ public class IdentifiersUrlProvider extends UrlProviderImpl
 
   private void checkSelectionMatchesUrls(String cachedUrlList)
   {
-    selectedUrls = new ArrayList<String>();
+
     String[] prevSelected = cachedUrlList.split("\\" + SEP);
     for (String id : prevSelected)
     {
@@ -145,7 +150,6 @@ public class IdentifiersUrlProvider extends UrlProviderImpl
 
   private void checkSelectionMatchesUrls(Vector<String> idList)
   {
-    selectedUrls = new ArrayList<String>();
     String[] prevSelected = new String[idList.size()];
     idList.toArray(prevSelected);
     for (String id : prevSelected)
@@ -183,12 +187,19 @@ public class IdentifiersUrlProvider extends UrlProviderImpl
   @Override
   public String writeUrlsAsString()
   {
-    StringBuffer links = new StringBuffer();
-    for (String k : selectedUrls)
+    if (!selectedUrls.isEmpty())
     {
-      links.append(k);
+      StringBuffer links = new StringBuffer();
+      for (String k : selectedUrls)
+      {
+        links.append(k);
+        links.append(SEP);
+      }
+      // remove last SEP
+      links.setLength(links.length() - 1);
+      return links.toString();
     }
-    return links.toString();
+    return "";
   }
 
   @Override
@@ -197,13 +208,63 @@ public class IdentifiersUrlProvider extends UrlProviderImpl
     Vector<String> links = new Vector<String>();
     for (String key : selectedUrls)
     {
-      links.add(key + SEP + urls.get(key).get("url") + "/" + DELIM
+      links.add(urls.get(key).get("name") + SEP + urls.get(key).get("url")
+              + "/" + DELIM
               + DB_ACCESSION + DELIM);
     }
     return links;
   }
 
   @Override
+  public List<UrlLinkDisplay> getLinksForTable()
+  {
+    ArrayList<UrlLinkDisplay> displayLinks = new ArrayList<UrlLinkDisplay>();
+    for (Entry<String, HashMap<String, String>> entry : urls.entrySet())
+    {
+      String key = entry.getKey();
+      boolean isDefault = (key == defaultUrl);
+      boolean isSelected = (selectedUrls.contains(key));
+      displayLinks.add(new UrlLinkDisplay(key,
+              entry.getValue().get("name"),
+              entry.getValue().get("url")
+              + "/" + DELIM + DB_ACCESSION + DELIM, isSelected, isDefault));
+    }
+    return displayLinks;
+  }
+
+  @Override
+  public void setUrlData(List<UrlLinkDisplay> links)
+  {
+    selectedUrls = new ArrayList<String>();
+
+    Iterator<UrlLinkDisplay> it = links.iterator();
+    while (it.hasNext())
+    {
+      UrlLinkDisplay link = it.next();
+
+      // Handle links with MIRIAM ids only
+      if (isMiriamId(link.getId())) // TODO separate use of name and id
+      {
+        // select/deselect links accordingly and set default url
+
+        if (link.getIsSelected())
+        {
+          if (urls.containsKey(link.getId()))
+          {
+            selectedUrls.add(link.getId());
+          }
+          if (link.getIsDefault())
+          {
+            setDefaultUrl(link.getId());
+          }
+
+        }
+      }
+
+    }
+  }
+
+  @Override
   public String getDefaultUrl(String seqid)
   {
     return urls.get(defaultUrl).get("url") + "/" + seqid;