apply version 2.7 copyright
[jalview.git] / src / jalview / ws / dbsources / Uniprot.java
index f29a555..17d0ca8 100644 (file)
@@ -1,5 +1,19 @@
-/**
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * 
+ * 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/>.
  */
 package jalview.ws.dbsources;
 
@@ -36,11 +50,12 @@ import jalview.ws.seqfetcher.DbSourceProxyImpl;
  */
 public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
 {
-  public Uniprot() {
+  public Uniprot()
+  {
     super();
     addDbSourceProperty(DBRefSource.SEQDB, DBRefSource.SEQDB);
     addDbSourceProperty(DBRefSource.PROTSEQDB);
-//    addDbSourceProperty(DBRefSource.MULTIACC, new Integer(50));
+    // addDbSourceProperty(DBRefSource.MULTIACC, new Integer(50));
   }
 
   /*
@@ -60,7 +75,7 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
    */
   public Regex getAccessionValidator()
   {
-    return null;
+    return new Regex("([A-Z]+[0-9]+[A-Z0-9]+|[A-Z0-9]+_[A-Z0-9]+)");
   }
 
   /*
@@ -91,7 +106,8 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
     try
     {
       // 1. Load the mapping information from the file
-      org.exolab.castor.mapping.Mapping map = new org.exolab.castor.mapping.Mapping(uni.getClass().getClassLoader());
+      org.exolab.castor.mapping.Mapping map = new org.exolab.castor.mapping.Mapping(
+              uni.getClass().getClassLoader());
       java.net.URL url = getClass().getResource("/uniprot_mapping.xml");
       map.loadMapping(url);
 
@@ -99,10 +115,11 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
       Unmarshaller unmar = new Unmarshaller(uni);
       unmar.setIgnoreExtraElements(true);
       unmar.setMapping(map);
-
-      uni = (UniprotFile) unmar.unmarshal(new FileReader(file));
-    }
-    catch (Exception e)
+      if (file != null)
+      {
+        uni = (UniprotFile) unmar.unmarshal(new FileReader(file));
+      }
+    } catch (Exception e)
     {
       System.out.println("Error getUniprotEntries() " + e);
     }
@@ -120,11 +137,15 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
     startQuery();
     try
     {
-      Alignment al=null;
+      queries = queries.toUpperCase().replaceAll(
+              "(UNIPROT\\|?|UNIPROT_|UNIREF\\d+_|UNIREF\\d+\\|?)", "");
+      Alignment al = null;
       ebi = new EBIFetchClient();
-      StringBuffer result=new StringBuffer();
+      StringBuffer result = new StringBuffer();
       // uniprotxml parameter required since december 2007
-      File file = ebi.fetchDataAsFile("uniprot:" + queries, "uniprotxml", null);
+      // uniprotkb dbname changed introduced december 2008
+      File file = ebi.fetchDataAsFile("uniprotkb:" + queries, "uniprotxml",
+              null);
       Vector entries = getUniprotEntries(file);
 
       if (entries != null)
@@ -149,12 +170,13 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
             name.append(en2.nextElement());
           }
 
-          if (entry.getProtein()!=null && entry.getProtein().getName()!=null)
+          if (entry.getProtein() != null
+                  && entry.getProtein().getName() != null)
           {
-              for (int nm=0,nmSize=entry.getProtein().getName().size(); nm<nmSize;nm++)
-              {
-                name.append(" " + entry.getProtein().getName().elementAt(nm));
-              }
+            for (int nm = 0, nmSize = entry.getProtein().getName().size(); nm < nmSize; nm++)
+            {
+              name.append(" " + entry.getProtein().getName().elementAt(nm));
+            }
           }
 
           result.append(name + "\n"
@@ -164,11 +186,13 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
 
         // Then read in the features and apply them to the dataset
         al = parseResult(result.toString());
-        if (al!=null)
+        if (al != null)
         {
           // Decorate the alignment with database entries.
           addUniprotXrefs(al, entries);
-        } else {
+        }
+        else
+        {
           results = result;
         }
       }
@@ -177,15 +201,15 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
     } catch (Exception e)
     {
       stopQuery();
-      throw(e);
+      throw (e);
     }
   }
 
   /**
    * add an ordered set of UniprotEntry objects to an ordered set of seuqences.
    * 
-   * @param al -
-   *          a sequence of n sequences
+   * @param al
+   *          - a sequence of n sequences
    * @param entries
    *          a seuqence of n uniprot entries to be analysed.
    */
@@ -203,17 +227,17 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
         DBRefEntry dbr = new DBRefEntry();
         dbr.setSource(pdb.getType());
         dbr.setAccessionId(pdb.getId());
-        dbr.setVersion(DBRefSource.UNIPROT+":"+getDbVersion());
+        dbr.setVersion(DBRefSource.UNIPROT + ":" + getDbVersion());
         dbxrefs.addElement(dbr);
         if (!pdb.getType().equals("PDB"))
         {
           continue;
         }
-        
+
         onlyPdbEntries.addElement(pdb);
       }
       SequenceI sq = al.getSequenceAt(i);
-      while (sq.getDatasetSequence()!=null)
+      while (sq.getDatasetSequence() != null)
       {
         sq = sq.getDatasetSequence();
       }
@@ -222,16 +246,15 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
       while (en2.hasMoreElements())
       {
         // we always add as uniprot if we retrieved from uniprot or uniprot name
-        sq.addDBRef(
-                new DBRefEntry(DBRefSource.UNIPROT, getDbVersion(), en2.nextElement()
-                        .toString()));
+        sq.addDBRef(new DBRefEntry(DBRefSource.UNIPROT, getDbVersion(), en2
+                .nextElement().toString()));
       }
       en2 = dbxrefs.elements();
       while (en2.hasMoreElements())
       {
-     // we always add as uniprot if we retrieved from uniprot or uniprot name
+        // we always add as uniprot if we retrieved from uniprot or uniprot name
         sq.addDBRef((DBRefEntry) en2.nextElement());
-                    
+
       }
       sq.setPDBId(onlyPdbEntries);
       if (entry.getFeature() != null)
@@ -254,8 +277,11 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
    */
   public boolean isValidReference(String accession)
   {
-    return true;
+    // TODO: make the following a standard validator
+    return (accession == null || accession.length() < 2) ? false
+            : getAccessionValidator().search(accession);
   }
+
   /**
    * return LDHA_CHICK uniprot entry
    */
@@ -263,6 +289,7 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
   {
     return "P00340";
   }
+
   public String getDbName()
   {
     return "Uniprot"; // getDbSource();