update author list in license for (JAL-826)
[jalview.git] / src / jalview / gui / Jalview2XML_V1.java
index d8e79ce..64d00ff 100755 (executable)
@@ -1,20 +1,19 @@
 /*\r
- * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)\r
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle\r
+ * \r
+ * This file is part of Jalview.\r
+ * \r
+ * Jalview is free software: you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License \r
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\r
+ * \r
+ * Jalview is distributed in the hope that it will be useful, but \r
+ * WITHOUT ANY WARRANTY; without even the implied warranty \r
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
+ * PURPOSE.  See the GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.\r
  */\r
 package jalview.gui;\r
 \r
@@ -28,17 +27,30 @@ import javax.swing.*;
 import org.exolab.castor.xml.*;\r
 import jalview.binding.*;\r
 import jalview.schemes.*;\r
+import jalview.util.jarInputStreamProvider;\r
 \r
 /**\r
  * DOCUMENT ME!\r
- *\r
+ * \r
  * @author $author$\r
  * @version $Revision$\r
  */\r
 public class Jalview2XML_V1\r
 {\r
+  boolean raiseGUI = true;\r
+\r
+  public Jalview2XML_V1()\r
+  {\r
+\r
+  };\r
+\r
+  public Jalview2XML_V1(boolean raiseGUI)\r
+  {\r
+    this.raiseGUI = raiseGUI;\r
+  };\r
+\r
   jalview.schemes.UserColourScheme GetUserColourScheme(\r
-      JalviewModelSequence jms, String id)\r
+          JalviewModelSequence jms, String id)\r
   {\r
     UserColours[] uc = jms.getUserColours();\r
     UserColours colours = null;\r
@@ -58,8 +70,8 @@ public class Jalview2XML_V1
 \r
     for (int i = 0; i < csize; i++)\r
     {\r
-      newColours[i] = new java.awt.Color(Integer.parseInt(\r
-          colours.getUserColourScheme().getColour(i).getRGB(), 16));\r
+      newColours[i] = new java.awt.Color(Integer.parseInt(colours\r
+              .getUserColourScheme().getColour(i).getRGB(), 16));\r
     }\r
 \r
     return new jalview.schemes.UserColourScheme(newColours);\r
@@ -67,46 +79,31 @@ public class Jalview2XML_V1
 \r
   /**\r
    * DOCUMENT ME!\r
-   *\r
-   * @param file DOCUMENT ME!\r
+   * \r
+   * @param file\r
+   *          DOCUMENT ME!\r
    */\r
-  public AlignFrame LoadJalviewAlign(final String file)\r
+  public AlignFrame LoadJalviewAlign(final jarInputStreamProvider jprovider)\r
   {\r
-\r
+    final String file = jprovider.getFilename();\r
     jalview.gui.AlignFrame af = null;\r
 \r
     try\r
     {\r
-      //UNMARSHALLER SEEMS TO CLOSE JARINPUTSTREAM, MOST ANNOYING\r
-      URL url = null;\r
-\r
-      if (file.startsWith("http://"))\r
-      {\r
-        url = new URL(file);\r
-      }\r
-\r
       JarInputStream jin = null;\r
       JarEntry jarentry = null;\r
       int entryCount = 1;\r
 \r
       do\r
       {\r
-        if (url != null)\r
-        {\r
-          jin = new JarInputStream(url.openStream());\r
-        }\r
-        else\r
-        {\r
-          jin = new JarInputStream(new FileInputStream(file));\r
-        }\r
+        jin = jprovider.getJarInputStream();\r
 \r
         for (int i = 0; i < entryCount; i++)\r
         {\r
           jarentry = jin.getNextJarEntry();\r
         }\r
 \r
-        class NoDescIDResolver\r
-            implements IDResolver\r
+        class NoDescIDResolver implements IDResolver\r
         {\r
           public Object resolve(String idref)\r
           {\r
@@ -125,42 +122,43 @@ public class Jalview2XML_V1
           af = LoadFromObject(object, file);\r
           entryCount++;\r
         }\r
-      }\r
-      while (jarentry != null);\r
-    }\r
-    catch (final java.net.UnknownHostException ex)\r
+      } while (jarentry != null);\r
+    } catch (final java.net.UnknownHostException ex)\r
     {\r
       ex.printStackTrace();\r
-      javax.swing.SwingUtilities.invokeLater(new Runnable()\r
+      if (raiseGUI)\r
       {\r
-        public void run()\r
+        javax.swing.SwingUtilities.invokeLater(new Runnable()\r
         {\r
+          public void run()\r
+          {\r
 \r
-          System.err.println("Couldn't locate Jalview XML file : " +\r
-                             ex + "\n");\r
-          JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
-                                                "Couldn't locate " + file,\r
-                                                "URL not found",\r
-                                                JOptionPane.WARNING_MESSAGE);\r
-        }\r
-      });\r
-    }\r
-    catch (Exception ex)\r
+            System.err.println("Couldn't locate Jalview XML file : " + ex\r
+                    + "\n");\r
+            JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
+                    "Couldn't locate " + file, "URL not found",\r
+                    JOptionPane.WARNING_MESSAGE);\r
+          }\r
+        });\r
+      }\r
+      ;\r
+    } catch (Exception ex)\r
     {\r
+      System.err.println("Exception whilst loading jalview XML file : ");\r
       ex.printStackTrace();\r
-      System.err.println("Exception whilst loading jalview XML file : " +\r
-                         ex + "\n");\r
-      javax.swing.SwingUtilities.invokeLater(new Runnable()\r
+      if (raiseGUI)\r
       {\r
-        public void run()\r
+        javax.swing.SwingUtilities.invokeLater(new Runnable()\r
         {\r
+          public void run()\r
+          {\r
 \r
-          JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
-                                                "Error loading  " + file,\r
-                                                "Error loading Jalview file",\r
-                                                JOptionPane.WARNING_MESSAGE);\r
-        }\r
-      });\r
+            JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
+                    "Error loading  " + file, "Error loading Jalview file",\r
+                    JOptionPane.WARNING_MESSAGE);\r
+          }\r
+        });\r
+      }\r
     }\r
 \r
     return af;\r
@@ -174,26 +172,25 @@ public class Jalview2XML_V1
 \r
     JalviewModelSequence jms = object.getJalviewModelSequence();\r
 \r
-    //////////////////////////////////\r
-    //LOAD SEQUENCES\r
-    jalview.datamodel.Sequence[] jseqs = new jalview.datamodel.Sequence[\r
-        vamsasSeq.length];\r
+    // ////////////////////////////////\r
+    // LOAD SEQUENCES\r
+    jalview.datamodel.Sequence[] jseqs = new jalview.datamodel.Sequence[vamsasSeq.length];\r
     JSeq[] JSEQ = object.getJalviewModelSequence().getJSeq();\r
     for (int i = 0; i < vamsasSeq.length; i++)\r
     {\r
       jseqs[i] = new jalview.datamodel.Sequence(vamsasSeq[i].getName(),\r
-                                                vamsasSeq[i].getSequence());\r
+              vamsasSeq[i].getSequence());\r
       jseqs[i].setStart(JSEQ[i].getStart());\r
       jseqs[i].setEnd(JSEQ[i].getEnd());\r
       seqids.add(jseqs[i]);\r
     }\r
 \r
-    ///SequenceFeatures are added to the DatasetSequence,\r
+    // /SequenceFeatures are added to the DatasetSequence,\r
     // so we must create the dataset before loading features\r
-    /////////////////////////////////\r
+    // ///////////////////////////////\r
     jalview.datamodel.Alignment al = new jalview.datamodel.Alignment(jseqs);\r
     al.setDataset(null);\r
-    /////////////////////////////////\r
+    // ///////////////////////////////\r
 \r
     for (int i = 0; i < vamsasSeq.length; i++)\r
     {\r
@@ -202,11 +199,10 @@ public class Jalview2XML_V1
         Features[] features = JSEQ[i].getFeatures();\r
         for (int f = 0; f < features.length; f++)\r
         {\r
-          jalview.datamodel.SequenceFeature sf\r
-              = new jalview.datamodel.SequenceFeature(features[f].getType(),\r
-              features[f].getDescription(), features[f].getStatus(),\r
-              features[f].getBegin(), features[f].getEnd(),\r
-              null);\r
+          jalview.datamodel.SequenceFeature sf = new jalview.datamodel.SequenceFeature(\r
+                  features[f].getType(), features[f].getDescription(),\r
+                  features[f].getStatus(), features[f].getBegin(),\r
+                  features[f].getEnd(), null);\r
 \r
           al.getSequenceAt(i).getDatasetSequence().addSequenceFeature(sf);\r
         }\r
@@ -225,9 +221,9 @@ public class Jalview2XML_V1
       }\r
     }\r
 \r
-    /////////////////////////////////\r
-    //////////////////////////////////\r
-    //LOAD ANNOTATIONS\r
+    // ///////////////////////////////\r
+    // ////////////////////////////////\r
+    // LOAD ANNOTATIONS\r
     if (vamsasSet.getAnnotation() != null)\r
     {\r
       Annotation[] an = vamsasSet.getAnnotation();\r
@@ -235,16 +231,15 @@ public class Jalview2XML_V1
       for (int i = 0; i < an.length; i++)\r
       {\r
         AnnotationElement[] ae = an[i].getAnnotationElement();\r
-        jalview.datamodel.Annotation[] anot = new jalview.datamodel.Annotation[\r
-            al.getWidth()];\r
+        jalview.datamodel.Annotation[] anot = new jalview.datamodel.Annotation[al\r
+                .getWidth()];\r
 \r
         for (int aa = 0; aa < ae.length; aa++)\r
         {\r
-          anot[ae[aa].getPosition()] = new jalview.datamodel.Annotation(ae[aa].\r
-              getDisplayCharacter(),\r
-              ae[aa].getDescription(),\r
-              ae[aa].getSecondaryStructure().charAt(0),\r
-              ae[aa].getValue());\r
+          anot[ae[aa].getPosition()] = new jalview.datamodel.Annotation(\r
+                  ae[aa].getDisplayCharacter(), ae[aa].getDescription(),\r
+                  ae[aa].getSecondaryStructure().charAt(0),\r
+                  ae[aa].getValue());\r
         }\r
 \r
         jalview.datamodel.AlignmentAnnotation jaa = null;\r
@@ -252,20 +247,20 @@ public class Jalview2XML_V1
         if (an[i].getGraph())\r
         {\r
           jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),\r
-              an[i].getDescription(), anot, 0, 0,\r
-              jalview.datamodel.AlignmentAnnotation.BAR_GRAPH);\r
+                  an[i].getDescription(), anot, 0, 0,\r
+                  jalview.datamodel.AlignmentAnnotation.BAR_GRAPH);\r
         }\r
         else\r
         {\r
           jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),\r
-              an[i].getDescription(), anot);\r
+                  an[i].getDescription(), anot);\r
         }\r
 \r
         al.addAnnotation(jaa);\r
       }\r
     }\r
 \r
-    /////////////////////////////////\r
+    // ///////////////////////////////\r
     // LOAD VIEWPORT\r
     Viewport[] views = jms.getViewport();\r
     Viewport view = views[0]; // DEAL WITH MULTIPLE VIEWPORTS LATER\r
@@ -276,15 +271,13 @@ public class Jalview2XML_V1
 \r
     for (int i = 0; i < JSEQ.length; i++)\r
     {\r
-      af.viewport.setSequenceColour(\r
-          af.viewport.alignment.getSequenceAt(i),\r
-          new java.awt.Color(\r
-              JSEQ[i].getColour()));\r
+      af.viewport.setSequenceColour(af.viewport.alignment.getSequenceAt(i),\r
+              new java.awt.Color(JSEQ[i].getColour()));\r
     }\r
 \r
-    //  af.changeColour() );\r
-    /////////////////////////\r
-    //LOAD GROUPS\r
+    // af.changeColour() );\r
+    // ///////////////////////\r
+    // LOAD GROUPS\r
     if (jms.getJGroupCount() > 0)\r
     {\r
       JGroup[] groups = jms.getJGroup();\r
@@ -301,8 +294,7 @@ public class Jalview2XML_V1
           }\r
           else\r
           {\r
-            cs = ColourSchemeProperty.getColour(al,\r
-                                                groups[i].getColour());\r
+            cs = ColourSchemeProperty.getColour(al, groups[i].getColour());\r
           }\r
 \r
           if (cs != null)\r
@@ -317,25 +309,22 @@ public class Jalview2XML_V1
 \r
         for (int s = 0; s < ids.length; s++)\r
         {\r
-          seqs.addElement( (jalview.datamodel.SequenceI) seqids.elementAt(\r
-              ids[s]));\r
+          seqs.addElement((jalview.datamodel.SequenceI) seqids\r
+                  .elementAt(ids[s]));\r
         }\r
 \r
-        jalview.datamodel.SequenceGroup sg = new jalview.datamodel.\r
-            SequenceGroup(seqs,\r
-                          groups[i].getName(), cs, groups[i].getDisplayBoxes(),\r
-                          groups[i].getDisplayText(), groups[i].getColourText(),\r
-                          groups[i].getStart(), groups[i].getEnd());\r
+        jalview.datamodel.SequenceGroup sg = new jalview.datamodel.SequenceGroup(\r
+                seqs, groups[i].getName(), cs, groups[i].getDisplayBoxes(),\r
+                groups[i].getDisplayText(), groups[i].getColourText(),\r
+                groups[i].getStart(), groups[i].getEnd());\r
 \r
-        sg.setOutlineColour(new java.awt.Color(\r
-            groups[i].getOutlineColour()));\r
+        sg.setOutlineColour(new java.awt.Color(groups[i].getOutlineColour()));\r
 \r
         if (groups[i].getConsThreshold() != 0)\r
         {\r
           jalview.analysis.Conservation c = new jalview.analysis.Conservation(\r
-              "All",\r
-              ResidueProperties.propHash, 3, sg.getSequences(null), 0,\r
-              sg.getWidth() - 1);\r
+                  "All", ResidueProperties.propHash, 3,\r
+                  sg.getSequences(null), 0, sg.getWidth() - 1);\r
           c.calculate();\r
           c.verdict(false, 25);\r
           sg.cs.setConservation(c);\r
@@ -346,7 +335,7 @@ public class Jalview2XML_V1
     }\r
 \r
     af.setBounds(view.getXpos(), view.getYpos(), view.getWidth(),\r
-                 view.getHeight());\r
+            view.getHeight());\r
     af.viewport.setStartRes(view.getStartRes());\r
     af.viewport.setStartSeq(view.getStartSeq());\r
     af.viewport.setShowAnnotation(view.getShowAnnotation());\r
@@ -354,8 +343,8 @@ public class Jalview2XML_V1
     af.viewport.setColourText(view.getShowColourText());\r
     af.viewport.setConservationSelected(view.getConservationSelected());\r
     af.viewport.setShowJVSuffix(view.getShowFullId());\r
-    af.viewport.setFont(new java.awt.Font(view.getFontName(),\r
-                                          view.getFontStyle(), view.getFontSize()));\r
+    af.viewport.setFont(new java.awt.Font(view.getFontName(), view\r
+            .getFontStyle(), view.getFontSize()));\r
     af.alignPanel.fontChanged();\r
 \r
     af.viewport.setRenderGaps(view.getRenderGaps());\r
@@ -400,35 +389,33 @@ public class Jalview2XML_V1
     if (jms.getFeatureSettings() != null)\r
     {\r
       af.viewport.featuresDisplayed = new Hashtable();\r
-      String[] renderOrder = new String[jms.getFeatureSettings().\r
-          getSettingCount()];\r
+      String[] renderOrder = new String[jms.getFeatureSettings()\r
+              .getSettingCount()];\r
       for (int fs = 0; fs < jms.getFeatureSettings().getSettingCount(); fs++)\r
       {\r
         Setting setting = jms.getFeatureSettings().getSetting(fs);\r
 \r
-        af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setColour(setting.\r
-            getType(),\r
-            new java.awt.Color(setting.getColour()));\r
+        af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setColour(\r
+                setting.getType(), new java.awt.Color(setting.getColour()));\r
 \r
         renderOrder[fs] = setting.getType();\r
 \r
         if (setting.getDisplay())\r
         {\r
-          af.viewport.featuresDisplayed.put(\r
-              setting.getType(), new Integer(setting.getColour()));\r
+          af.viewport.featuresDisplayed.put(setting.getType(), new Integer(\r
+                  setting.getColour()));\r
         }\r
       }\r
-      af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().renderOrder =\r
-          renderOrder;\r
+      af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().renderOrder = renderOrder;\r
     }\r
 \r
     af.setMenusFromViewport(af.viewport);\r
 \r
-    Desktop.addInternalFrame(af, view.getTitle(),\r
-                             view.getWidth(), view.getHeight());\r
+    Desktop.addInternalFrame(af, view.getTitle(), view.getWidth(),\r
+            view.getHeight());\r
 \r
-    //LOAD TREES\r
-    ///////////////////////////////////////\r
+    // LOAD TREES\r
+    // /////////////////////////////////////\r
     if (jms.getTreeCount() > 0)\r
     {\r
       try\r
@@ -438,25 +425,23 @@ public class Jalview2XML_V1
 \r
           Tree tree = jms.getTree(t);\r
 \r
-          TreePanel tp = af.ShowNewickTree(new jalview.io.NewickFile(\r
-              tree.getNewick()), tree.getTitle(),\r
-                                           tree.getWidth(), tree.getHeight(),\r
-                                           tree.getXpos(), tree.getYpos());\r
+          TreePanel tp = af.ShowNewickTree(\r
+                  new jalview.io.NewickFile(tree.getNewick()),\r
+                  tree.getTitle(), tree.getWidth(), tree.getHeight(),\r
+                  tree.getXpos(), tree.getYpos());\r
 \r
           tp.fitToWindow.setState(tree.getFitToWindow());\r
           tp.fitToWindow_actionPerformed(null);\r
 \r
           if (tree.getFontName() != null)\r
           {\r
-            tp.setTreeFont(new java.awt.Font(tree.getFontName(),\r
-                                             tree.getFontStyle(),\r
-                                             tree.getFontSize()));\r
+            tp.setTreeFont(new java.awt.Font(tree.getFontName(), tree\r
+                    .getFontStyle(), tree.getFontSize()));\r
           }\r
           else\r
           {\r
-            tp.setTreeFont(new java.awt.Font(view.getFontName(),\r
-                                             view.getFontStyle(),\r
-                                             tree.getFontSize()));\r
+            tp.setTreeFont(new java.awt.Font(view.getFontName(), view\r
+                    .getFontStyle(), tree.getFontSize()));\r
           }\r
 \r
           tp.showPlaceholders(tree.getMarkUnlinked());\r
@@ -471,8 +456,7 @@ public class Jalview2XML_V1
           }\r
         }\r
 \r
-      }\r
-      catch (Exception ex)\r
+      } catch (Exception ex)\r
       {\r
         ex.printStackTrace();\r
       }\r