formatting
[jalview.git] / src / jalview / ws / dbsources / das / datamodel / DasSourceRegistry.java
index 7257d0c..7b3435f 100644 (file)
@@ -10,6 +10,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
@@ -46,7 +47,7 @@ public class DasSourceRegistry implements DasSourceRegistryI,
 
   private Hashtable<String, jalviewSourceI> localSources = null;
 
-  public static String DEFAULT_REGISTRY = "http://www.dasregistry.org/das1/sources/";
+  public static String DEFAULT_REGISTRY = "http://www.dasregistry.org/das/";
 
   /**
    * true if thread is running and we are talking to DAS registry service
@@ -69,6 +70,14 @@ public class DasSourceRegistry implements DasSourceRegistryI,
               DEFAULT_REGISTRY);
       registry = DEFAULT_REGISTRY;
     }
+    if (registry.lastIndexOf("sources.xml") == registry.length() - 11)
+    {
+      // no trailing sources.xml document for registry in JDAS
+      jalview.bin.Cache.setProperty(
+              jalview.bin.Cache.DAS_REGISTRY_URL,
+              registry = registry.substring(0,
+                      registry.lastIndexOf("sources.xml")));
+    }
     return registry;
   }
 
@@ -82,7 +91,7 @@ public class DasSourceRegistry implements DasSourceRegistryI,
   private List<jalviewSourceI> getDASSources()
   {
 
-    return getDASSources(getDasRegistryURL());
+    return getDASSources(getDasRegistryURL(), this);
   }
 
   /**
@@ -91,7 +100,8 @@ public class DasSourceRegistry implements DasSourceRegistryI,
    * @param registryURL
    *          return sources from registryURL
    */
-  private static List<jalviewSourceI> getDASSources(String registryURL)
+  private static List<jalviewSourceI> getDASSources(String registryURL,
+          MultipleConnectionPropertyProviderI registry)
   {
     try
     {
@@ -103,9 +113,29 @@ public class DasSourceRegistry implements DasSourceRegistryI,
 
       List<SOURCE> dassources = sources.getSOURCE();
       ArrayList<jalviewSourceI> dsrc = new ArrayList<jalviewSourceI>();
+      HashMap<String, Integer> latests = new HashMap<String, Integer>();
+      Integer latest;
       for (SOURCE src : dassources)
       {
-        dsrc.add(new JalviewSource(src, false));
+        JalviewSource jsrc = new JalviewSource(src, registry, false);
+        latest = latests.get(jsrc.getSourceURL());
+        if (latest != null)
+        {
+          if (jsrc.isNewerThan(dsrc.get(latest.intValue())))
+          {
+            dsrc.set(latest.intValue(), jsrc);
+          }
+          else
+          {
+            System.out.println("Debug: Ignored older source "
+                    + jsrc.getTitle());
+          }
+        }
+        else
+        {
+          latests.put(jsrc.getSourceURL(), Integer.valueOf(dsrc.size()));
+          dsrc.add(jsrc);
+        }
       }
       return dsrc;
     } catch (Exception ex)
@@ -207,7 +237,7 @@ public class DasSourceRegistry implements DasSourceRegistryI,
     {
       localSources = new Hashtable<String, jalviewSourceI>();
     }
-    jalviewSourceI src = new JalviewSource(local, true);
+    jalviewSourceI src = new JalviewSource(local, this, true);
     localSources.put(local.getTitle(), src);
     return src;
   }