JAL-3949 - refactor logging from jalview.bin.Cache to jalview.bin.Console
[jalview.git] / src / jalview / ws / dbsources / Xfam.java
index d06151b..e39f0ab 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.ws.dbsources;
 
+import java.util.Locale;
+
+import jalview.bin.Console;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefEntry;
+import jalview.io.DataSourceType;
+import jalview.io.FileFormat;
+import jalview.io.FormatAdapter;
 import jalview.ws.seqfetcher.DbSourceProxyImpl;
 
 /**
@@ -32,18 +38,24 @@ import jalview.ws.seqfetcher.DbSourceProxyImpl;
  */
 public abstract class Xfam extends DbSourceProxyImpl
 {
-
   public Xfam()
   {
     super();
   }
 
-  protected abstract String getXFAMURL();
+  /**
+   * the base URL for this Xfam-like service
+   * 
+   * @return
+   */
+  protected abstract String getURLPrefix();
 
+  @Override
   public abstract String getDbVersion();
 
   abstract String getXfamSource();
 
+  @Override
   public AlignmentI getSequenceRecords(String queries) throws Exception
   {
     // TODO: this is not a perfect implementation. We need to be able to add
@@ -51,23 +63,51 @@ public abstract class Xfam extends DbSourceProxyImpl
     // retrieved.
     startQuery();
     // TODO: trap HTTP 404 exceptions and return null
-    AlignmentI rcds = new jalview.io.FormatAdapter().readFile(getXFAMURL()
-            + queries.trim().toUpperCase(), jalview.io.FormatAdapter.URL,
-            "STH");
+    String xfamUrl = getURL(queries);
+
+    Console.debug("XFAM URL for retrieval is: " + xfamUrl);
+
+    AlignmentI rcds = new FormatAdapter().readFile(xfamUrl,
+            DataSourceType.URL, FileFormat.Stockholm);
+
     for (int s = 0, sNum = rcds.getHeight(); s < sNum; s++)
     {
       rcds.getSequenceAt(s).addDBRef(new DBRefEntry(getXfamSource(),
-      // getDbSource(),
-              getDbVersion(), queries.trim().toUpperCase()));
+              // getDbSource(),
+              getDbVersion(), queries.trim().toUpperCase(Locale.ROOT)));
       if (!getDbSource().equals(getXfamSource()))
       { // add the specific ref too
-        rcds.getSequenceAt(s).addDBRef(
-                new DBRefEntry(getDbSource(), getDbVersion(), queries
-                        .trim().toUpperCase()));
+        rcds.getSequenceAt(s).addDBRef(new DBRefEntry(getDbSource(),
+                getDbVersion(), queries.trim().toUpperCase(Locale.ROOT)));
       }
     }
     stopQuery();
     return rcds;
   }
 
+  String getURL(String queries)
+  {
+    return getURLPrefix() + "/family/" + queries.trim().toUpperCase(Locale.ROOT)
+            + getURLSuffix();
+  }
+
+  /**
+   * Pfam and Rfam provide alignments
+   */
+  @Override
+  public boolean isAlignmentSource()
+  {
+    return true;
+  }
+
+  /**
+   * default suffix to append the retrieval URL for this source.
+   * 
+   * @return "" for most Xfam sources
+   */
+  public String getURLSuffix()
+  {
+    return "";
+  }
+
 }