JAL-2755 correct Javadoc and error handling
[jalview.git] / src / jalview / ws / dbsources / das / datamodel / JalviewSource.java
index c9caf6e..07ba027 100644 (file)
@@ -1,5 +1,29 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.ws.dbsources.das.datamodel;
 
+import jalview.util.MessageManager;
+import jalview.ws.dbsources.das.api.jalviewSourceI;
+import jalview.ws.seqfetcher.DbSourceProxy;
+
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Date;
@@ -7,9 +31,9 @@ import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
 
+import org.biodas.jdas.client.threads.MultipleConnectionPropertyProviderI;
 import org.biodas.jdas.dassources.Capabilities;
 import org.biodas.jdas.dassources.utils.DasTimeFormat;
-import org.biodas.jdas.dassources.utils.RegistrySourceAdapter;
 import org.biodas.jdas.schema.sources.CAPABILITY;
 import org.biodas.jdas.schema.sources.COORDINATES;
 import org.biodas.jdas.schema.sources.MAINTAINER;
@@ -17,15 +41,16 @@ import org.biodas.jdas.schema.sources.PROP;
 import org.biodas.jdas.schema.sources.SOURCE;
 import org.biodas.jdas.schema.sources.VERSION;
 
-import jalview.ws.dbsources.das.api.jalviewSourceI;
-import jalview.ws.seqfetcher.DbSourceProxy;
-
 public class JalviewSource implements jalviewSourceI
 {
   SOURCE source;
 
-  public JalviewSource(SOURCE local2, boolean local)
+  MultipleConnectionPropertyProviderI connprov;
+
+  public JalviewSource(SOURCE local2,
+          MultipleConnectionPropertyProviderI connprov, boolean local)
   {
+    this.connprov = connprov;
     this.local = local;
     source = local2;
   }
@@ -191,9 +216,8 @@ public class JalviewSource implements jalviewSourceI
   {
     for (CAPABILITY p : getVersion().getCAPABILITY())
     {
-      if (p.getType().equalsIgnoreCase(capability.getName())
-              || p.getType().equalsIgnoreCase(
-                      "das1:" + capability.getName()))
+      if (p.getType().equalsIgnoreCase(capability.getName()) || p.getType()
+              .equalsIgnoreCase("das1:" + capability.getName()))
       {
         return p;
       }
@@ -233,10 +257,9 @@ public class JalviewSource implements jalviewSourceI
       for (COORDINATES cs : v.getCOORDINATES())
       {
         COORDINATES ltst = latestc.get(cs.getUri());
-        if (ltst == null
-                || ltst.getVersion() == null
-                || (ltst.getVersion() != null && cs.getVersion() != null && isLaterThan(
-                        ltst.getVersion(), cs.getVersion())))
+        if (ltst == null || ltst.getVersion() == null
+                || (ltst.getVersion() != null && cs.getVersion() != null
+                        && isLaterThan(ltst.getVersion(), cs.getVersion())))
         {
           latestc.put(cs.getUri(), cs);
         }
@@ -254,10 +277,13 @@ public class JalviewSource implements jalviewSourceI
          */
         try
         {
-          seqsources.add(ds = new DasSequenceSource(getTitle() + " ("
-                  + cs.getAuthority() + " " + cs.getSource()
-                  + (cs.getVersion() != null ? " " + cs.getVersion() : "")
-                  + ")", cs.getAuthority(), source, v, cs));
+          seqsources.add(ds = new DasSequenceSource(
+                  getTitle() + " (" + cs.getAuthority() + " "
+                          + cs.getSource()
+                          + (cs.getVersion() != null ? " " + cs.getVersion()
+                                  : "")
+                          + ")",
+                  cs.getAuthority(), source, v, cs, connprov));
           if (seqsources.size() > 1)
           {
             System.err.println("Added another sequence DB source for "
@@ -276,8 +302,8 @@ public class JalviewSource implements jalviewSourceI
     {
       try
       {
-        seqsources.add(new DasSequenceSource(getTitle(), getTitle(),
-                source, getVersion(), null));
+        seqsources.add(new DasSequenceSource(getTitle(), getTitle(), source,
+                getVersion(), null, connprov));
       } catch (Exception e)
       {
         // TODO Auto-generated catch block
@@ -309,9 +335,29 @@ public class JalviewSource implements jalviewSourceI
   {
     try
     {
-      String url = new RegistrySourceAdapter(source)
-              .getOriginalDataSourceUri();
-      return url;
+      // kind of dumb, since
+      // org.biodas.jdas.dassources.utils.VersionAdapter.getSourceUriFromQueryUri()
+      // does this,
+      // but this way, we can access non DAS 1.6 compliant sources (which have
+      // to have a URL like <sourcename>/das/ and cause a validation exception)
+
+      for (CAPABILITY cap : getVersion().getCAPABILITY())
+      {
+        String capname = cap.getType()
+                .substring(cap.getType().indexOf(":") + 1);
+        int p = cap.getQueryUri().lastIndexOf(capname);
+        if (p < -1)
+        {
+          throw new Exception(MessageManager.formatMessage(
+                  "exception.invalid_das_source", new String[]
+                  { source.getUri() }));
+        }
+        if (cap.getQueryUri().charAt(p) == '/')
+        {
+          p--;
+        }
+        return cap.getQueryUri().substring(0, p);
+      }
     } catch (Exception x)
     {
       System.err.println("Serious: Couldn't get the URL for source "
@@ -324,7 +370,15 @@ public class JalviewSource implements jalviewSourceI
   @Override
   public boolean isNewerThan(jalviewSourceI other)
   {
-    return isLaterThan(getVersion().getCreated(), other.getVersion()
-            .getCreated());
+    return isLaterThan(getVersion().getCreated(),
+            other.getVersion().getCreated());
+  }
+
+  @Override
+  public boolean isReferenceSource()
+  {
+    // TODO check source object for indication that we are the primary for a DAS
+    // coordinate system
+    return false;
   }
 }