JAL-2089 patch broken merge to master for Release 2.10.0b1
[jalview.git] / src / jalview / structures / models / AAStructureBindingModel.java
index 86c9a21..b00f1bc 100644 (file)
@@ -1,9 +1,25 @@
+/*
+ * 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.structures.models;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
 import jalview.api.StructureSelectionManagerProvider;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.PDBEntry;
@@ -15,6 +31,10 @@ import jalview.structure.StructureSelectionManager;
 import jalview.util.Comparison;
 import jalview.util.MessageManager;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * 
  * A base class to hold common function for protein structure model binding.
@@ -31,6 +51,10 @@ public abstract class AAStructureBindingModel extends
 
   private StructureSelectionManager ssm;
 
+  /*
+   * distinct PDB entries (pdb files) associated
+   * with sequences
+   */
   private PDBEntry[] pdbEntry;
 
   /*
@@ -52,6 +76,13 @@ public abstract class AAStructureBindingModel extends
 
   private boolean nucleotide;
 
+  private boolean finishedInit = false;
+
+  /**
+   * current set of model filenames loaded in the Jmol instance
+   */
+  protected String[] modelFileNames = null;
+
   /**
    * Data bean class to simplify parameterisation in superposeStructures
    */
@@ -200,7 +231,9 @@ public abstract class AAStructureBindingModel extends
   /**
    * Construct a title string for the viewer window based on the data Jalview
    * knows about
-   * @param viewerName TODO
+   * 
+   * @param viewerName
+   *          TODO
    * @param verbose
    * 
    * @return
@@ -208,33 +241,28 @@ public abstract class AAStructureBindingModel extends
   public String getViewerTitle(String viewerName, boolean verbose)
   {
     if (getSequence() == null || getSequence().length < 1
-            || getPdbCount() < 1
-            || getSequence()[0].length < 1)
+            || getPdbCount() < 1 || getSequence()[0].length < 1)
     {
       return ("Jalview " + viewerName + " Window");
     }
     // TODO: give a more informative title when multiple structures are
     // displayed.
     StringBuilder title = new StringBuilder(64);
-    final PDBEntry pdbEntry = getPdbEntry(0);
+    final PDBEntry pdbe = getPdbEntry(0);
     title.append(viewerName + " view for " + getSequence()[0][0].getName()
-            + ":"
-            + pdbEntry.getId());
-  
+            + ":" + pdbe.getId());
+
     if (verbose)
     {
-      if (pdbEntry.getProperty() != null)
+      String method = (String) pdbe.getProperty("method");
+      if (method != null)
       {
-        if (pdbEntry.getProperty().get("method") != null)
-        {
-          title.append(" Method: ");
-          title.append(pdbEntry.getProperty().get("method"));
-        }
-        if (pdbEntry.getProperty().get("chains") != null)
-        {
-          title.append(" Chain:");
-          title.append(pdbEntry.getProperty().get("chains"));
-        }
+        title.append(" Method: ").append(method);
+      }
+      String chain = (String) pdbe.getProperty("chains");
+      if (chain != null)
+      {
+        title.append(" Chain:").append(chain);
       }
     }
     return title.toString();
@@ -266,8 +294,7 @@ public abstract class AAStructureBindingModel extends
     {
       throw new Error(MessageManager.formatMessage(
               "error.implementation_error_no_pdbentry_from_index",
-              new Object[]
-              { Integer.valueOf(pe).toString() }));
+              new Object[] { Integer.valueOf(pe).toString() }));
     }
     final String nullChain = "TheNullChain";
     List<SequenceI> s = new ArrayList<SequenceI>();
@@ -337,8 +364,8 @@ public abstract class AAStructureBindingModel extends
    * 
    * @returns the pdb entries added to the current set.
    */
-  public synchronized PDBEntry[] addSequenceAndChain(PDBEntry[] pdbe, SequenceI[][] seq,
-          String[][] chns)
+  public synchronized PDBEntry[] addSequenceAndChain(PDBEntry[] pdbe,
+          SequenceI[][] seq, String[][] chns)
   {
     List<PDBEntry> v = new ArrayList<PDBEntry>();
     List<int[]> rtn = new ArrayList<int[]>();
@@ -351,8 +378,7 @@ public abstract class AAStructureBindingModel extends
       int r = v.indexOf(pdbe[i]);
       if (r == -1 || r >= getPdbCount())
       {
-        rtn.add(new int[]
-        { v.size(), i });
+        rtn.add(new int[] { v.size(), i });
         v.add(pdbe[i]);
       }
       else
@@ -501,6 +527,10 @@ public abstract class AAStructureBindingModel extends
   {
     int refStructure = -1;
     String[] files = getPdbFile();
+    if (files == null)
+    {
+      return -1;
+    }
     for (int pdbfnum = 0; pdbfnum < files.length; pdbfnum++)
     {
       StructureMapping[] mappings = getSsm().getMapping(files[pdbfnum]);
@@ -545,7 +575,11 @@ public abstract class AAStructureBindingModel extends
             }
             structures[pdbfnum].pdbId = mapping.getPdbId();
             structures[pdbfnum].isRna = theSequence.getRNA() != null;
-            // move on to next pdb file
+
+            /*
+             * move on to next pdb file (ignore sequences for other chains
+             * for the same structure)
+             */
             s = seqCountForPdbFile;
             break;
           }
@@ -578,6 +612,10 @@ public abstract class AAStructureBindingModel extends
       for (String file : files)
       {
         notLoaded = file;
+        if (file == null)
+        {
+          continue;
+        }
         try
         {
           StructureMapping[] sm = getSsm().getMapping(file);
@@ -601,4 +639,39 @@ public abstract class AAStructureBindingModel extends
     }
     return true;
   }
-}
\ No newline at end of file
+
+  @Override
+  public boolean isListeningFor(SequenceI seq)
+  {
+    if (sequence != null)
+    {
+      for (SequenceI[] seqs : sequence)
+      {
+        if (seqs != null)
+        {
+          for (SequenceI s : seqs)
+          {
+            if (s == seq
+                    || (s.getDatasetSequence() != null && s
+                            .getDatasetSequence() == seq
+                            .getDatasetSequence()))
+            {
+              return true;
+            }
+          }
+        }
+      }
+    }
+    return false;
+  }
+
+  public boolean isFinishedInit()
+  {
+    return finishedInit;
+  }
+
+  public void setFinishedInit(boolean fi)
+  {
+    this.finishedInit = fi;
+  }
+}