Merge branch 'merge/develop_JAL-1780_JAL-653_JAL-1892' into features/JAL-653_JAL...
authorJim Procter <jprocter@issues.jalview.org>
Tue, 23 Jun 2015 09:13:52 +0000 (10:13 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Tue, 23 Jun 2015 09:13:52 +0000 (10:13 +0100)
150 files changed:
.classpath
.externalToolBuilders/Jalview Release indices [Builder].launch
.gitignore
.settings/org.eclipse.jdt.ui.prefs
build.xml
examples/testdata/rna-alignment.xml [new file with mode: 0644]
src/MCview/PDBfile.java
src/jalview/api/AlignExportSettingI.java [new file with mode: 0644]
src/jalview/api/AlignViewportI.java
src/jalview/api/FeatureRenderer.java
src/jalview/appletgui/APopupMenu.java
src/jalview/appletgui/AlignFrame.java
src/jalview/appletgui/AlignViewport.java
src/jalview/appletgui/CutAndPasteTransfer.java
src/jalview/appletgui/IdCanvas.java
src/jalview/appletgui/OverviewPanel.java
src/jalview/bin/JalviewLite.java
src/jalview/bin/JalviewLiteURLRetrieve.java
src/jalview/datamodel/ColumnSelection.java
src/jalview/gui/AlignExportSettings.java [new file with mode: 0644]
src/jalview/gui/AlignFrame.java
src/jalview/gui/AlignViewport.java
src/jalview/gui/AppJmol.java
src/jalview/gui/CutAndPasteTransfer.java
src/jalview/gui/Desktop.java
src/jalview/gui/IdCanvas.java
src/jalview/gui/OverviewPanel.java
src/jalview/gui/PopupMenu.java
src/jalview/gui/SequenceFetcher.java
src/jalview/io/AlignFile.java
src/jalview/io/AlignmentProperties.java
src/jalview/io/AppletFormatAdapter.java
src/jalview/io/BLCFile.java
src/jalview/io/BioJsHTMLOutput.java
src/jalview/io/FeaturesFile.java
src/jalview/io/FileParse.java
src/jalview/io/FormatAdapter.java
src/jalview/io/Gff3File.java
src/jalview/io/HtmlFile.java
src/jalview/io/HtmlSvgOutput.java
src/jalview/io/JSONFile.java
src/jalview/jbgui/GAlignExportSettings.java [new file with mode: 0644]
src/jalview/jbgui/GFinder.java
src/jalview/viewmodel/AlignmentViewport.java
src/jalview/ws/dbsources/EbiFileRetrievedProxy.java
src/jalview/ws/dbsources/Uniprot.java
src/jalview/ws/jws1/JPredThread.java
src/jalview/ws/seqfetcher/DbSourceProxyImpl.java
test/MCview/AtomTest.java
test/MCview/BondTest.java
test/MCview/PDBChainTest.java
test/MCview/PDBfileTest.java
test/MCview/ResidueTest.java
test/com/stevesoft/pat/RegexWriterTest.java
test/jalview/analysis/AAFrequencyTest.java
test/jalview/analysis/AlignmentAnnotationUtilsTest.java
test/jalview/analysis/AlignmentUtilsTests.java
test/jalview/analysis/AnnotationSorterTest.java
test/jalview/analysis/CodingUtilsTest.java
test/jalview/analysis/CrossRefTest.java
test/jalview/analysis/DnaTest.java
test/jalview/analysis/GroupingTest.java
test/jalview/analysis/ParsePropertiesTest.java
test/jalview/analysis/TestAlignSeq.java
test/jalview/analysis/scoremodels/FeatureScoreModelTest.java
test/jalview/bin/CommandLineOperations.java
test/jalview/commands/EditCommandTest.java
test/jalview/datamodel/AlignedCodonFrameTest.java
test/jalview/datamodel/AlignedCodonIteratorTest.java
test/jalview/datamodel/AlignedCodonTest.java
test/jalview/datamodel/AlignmentAnnotationTests.java
test/jalview/datamodel/AlignmentTest.java
test/jalview/datamodel/ColumnSelectionTest.java
test/jalview/datamodel/DBRefEntryTest.java
test/jalview/datamodel/MappingTest.java
test/jalview/datamodel/PDBEntryTest.java
test/jalview/datamodel/SearchResultsTest.java
test/jalview/datamodel/SeqCigarTest.java
test/jalview/datamodel/SequenceTest.java
test/jalview/datamodel/xdb/embl/EmblFileTest.java
test/jalview/ext/jmol/PDBFileWithJmolTest.java
test/jalview/ext/paradise/TestAnnotate3D.java
test/jalview/ext/rbvi/chimera/ChimeraCommandsTest.java
test/jalview/ext/rbvi/chimera/ChimeraConnect.java
test/jalview/ext/rbvi/chimera/JalviewChimeraView.java
test/jalview/gui/AlignViewportTest.java
test/jalview/gui/AnnotationChooserTest.java
test/jalview/gui/FontChooserTest.java
test/jalview/gui/HelpTest.java
test/jalview/gui/JAL1353bugdemo.java
test/jalview/gui/JvSwingUtilsTest.java
test/jalview/gui/PDBSearchPanelTest.java
test/jalview/gui/PaintRefresherTest.java
test/jalview/gui/PopupMenuTest.java
test/jalview/gui/ProgressBarTest.java
test/jalview/gui/SequenceRendererTest.java
test/jalview/gui/StructureChooserTest.java
test/jalview/io/AnnotatedPDBFileInputTest.java
test/jalview/io/AnnotationFileIOTest.java
test/jalview/io/BioJsHTMLOutputTest.java
test/jalview/io/FileIOTester.java
test/jalview/io/Gff3tests.java
test/jalview/io/HtmlFileTest.java
test/jalview/io/JSONFileTest.java
test/jalview/io/Jalview2xmlTests.java
test/jalview/io/NewickFileTests.java
test/jalview/io/PhylipFileTests.java
test/jalview/io/RNAMLfileTest.java
test/jalview/io/StockholmFileTest.java
test/jalview/io/TCoffeeScoreFileTest.java
test/jalview/schemes/DnaCodonTests.java
test/jalview/schemes/ResiduePropertiesTest.java
test/jalview/schemes/ScoreMatrixPrinter.java
test/jalview/structure/Mapping.java
test/jalview/structure/StructureSelectionManagerTest.java
test/jalview/structures/models/AAStructureBindingModelTest.java
test/jalview/util/ColorUtilsTest.java
test/jalview/util/ComparisonTest.java
test/jalview/util/DBRefUtilsTest.java
test/jalview/util/MapListTest.java
test/jalview/util/MappingUtilsTest.java
test/jalview/util/QuickSortTest.java
test/jalview/util/ShiftListTest.java
test/jalview/util/StringUtilsTest.java
test/jalview/viewmodel/styles/ViewStyleTest.java
test/jalview/ws/PDBSequenceFetcherTest.java
test/jalview/ws/dbsources/PDBRestClientTest.java
test/jalview/ws/dbsources/UniprotTest.java
test/jalview/ws/gui/Jws2ParamView.java
test/jalview/ws/jabaws/DisorderAnnotExportImport.java
test/jalview/ws/jabaws/JalviewJabawsTestUtils.java
test/jalview/ws/jabaws/JpredJabaStructExportImport.java
test/jalview/ws/jabaws/MinJabawsClientTests.java
test/jalview/ws/jabaws/RNAStructExportImport.java
test/jalview/ws/jws2/ParameterUtilsTest.java
test/jalview/ws/rest/RestClientTest.java
test/jalview/ws/rest/ShmmrRSBSService.java
test/jalview/ws/seqfetcher/DasSequenceFetcher.java
test/jalview/ws/seqfetcher/DbRefFetcherTest.java
utils/hamcrest-core-1.3.jar [new file with mode: 0644]
utils/jalview_testng.xml [new file with mode: 0644]
utils/junit-4.12.jar [new file with mode: 0644]
utils/testnglibs/bsh-2.0b4.jar [new file with mode: 0644]
utils/testnglibs/guava-base-r03.jar [new file with mode: 0644]
utils/testnglibs/guava-collections-r03.jar [new file with mode: 0644]
utils/testnglibs/jcommander.jar [new file with mode: 0644]
utils/testnglibs/junit-4.12.jar [new file with mode: 0644]
utils/testnglibs/snakeyaml.jar [new file with mode: 0644]
utils/testnglibs/testng-sources.jar [new file with mode: 0644]
utils/testnglibs/testng.jar [new file with mode: 0644]

index 46988ce..255010a 100644 (file)
@@ -67,5 +67,6 @@
        <classpathentry kind="lib" path="lib/jetty-http-9.2.10.v20150310.jar"/>
        <classpathentry kind="lib" path="lib/jetty-io-9.2.10.v20150310.jar"/>
        <classpathentry kind="lib" path="lib/java-json.jar"/>
+       <classpathentry kind="con" path="org.testng.TESTNG_CONTAINER"/>
        <classpathentry kind="output" path="classes"/>
 </classpath>
index 9d81cc8..7d2c125 100644 (file)
@@ -5,10 +5,10 @@
 <booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
 <booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/jalview/build.xml"/>
+<listEntry value="/jalview"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
+<listEntry value="4"/>
 </listAttribute>
 <booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
index 0c12fb0..2b6921b 100644 (file)
@@ -1,6 +1,9 @@
 .project
 /dist
 /classes
+/tests
+/test-reports
+/test-output
 .externalToolBuilders/Jalview Release indices [Builder].launch
 /.DS_Store
 .DS_Store
index 1986e85..5b61305 100644 (file)
@@ -2,6 +2,10 @@ eclipse.preferences.version=1
 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
 formatter_profile=_Jalview
 formatter_settings_version=12
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=jalview;java;javax;org;com;
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
 sp_cleanup.add_default_serial_version_id=true
 sp_cleanup.add_generated_serial_version_id=false
 sp_cleanup.add_missing_annotations=true
index c079df9..dbf1df3 100755 (executable)
--- a/build.xml
+++ b/build.xml
     <property name="jsonSimple" value="json_simple-1.1.jar" />
     <property name="javaJson" value="java-json.jar" />
     <property name="jalviewLiteJar" value="jalviewApplet.jar" />
+       <property name="reportDir" value="test-reports" />
+       <property name="testDir" value="test" />
+       <property name="testOutputDir" value="tests" />
     <!-- switch to indicate if we should obfuscate jalviewLite -->
     <!-- <property name="donotobfuscate" value="true"/> -->
     <!-- switch to exclude associations from generated jnlp files -->
       <exclude name="com/stevesoft/**" />
     </javac>
   </target>
+  
+  
+  <target name="testclean" depends="init">
+    <delete dir="${testOutputDir}" includes="*,**/*"/>
+  </target>
+  
+  <target name="prepareTests" depends="init">
+       <mkdir dir="${testOutputDir}" />
+       <copy todir="${testOutputDir}">
+               <fileset dir=".">
+                       <include name="${docDir}/**/*.*" />
+                       <include name="${helpDir}/**/*.*" />
+                       <include name="${libDir}/*.jar" />
+               </fileset>
+               <fileset dir="${resourceDir}">
+                       <include name="**/*.*" />
+               </fileset>
+       </copy>
+  </target>  
+  
+  <target name="buildTests" depends="prepareTests">
+       <javac source="1.5" target="1.5" srcdir="${sourceDir}" destdir="${testOutputDir}"
+               debug="${javac.debug}" classpathref="build.classpath" includeantruntime="false" >
+               <exclude name="jalview/*applet*" />
+               <exclude name="jalview/appletgui/**" />
+       </javac>
+       <javac source="1.5" target="1.5" srcdir="${testDir}" destdir="${testOutputDir}"
+               debug="${javac.debug}" classpathref="build.classpath" includeantruntime="false" >
+       </javac>
+  </target>
+  
+  <taskdef name="testng" classname="org.testng.TestNGAntTask" >            
+       <classpath location="utils/testnglibs/testng.jar" />
+  </taskdef>
+  
+  <target name="testng" depends="buildTests">
+       <testng classpathref="build.classpath" outputDir="${reportDir}"
+               haltOnFailure="false">
+               <classpath location="${testOutputDir}" />
+               <xmlfileset dir="utils" includes="jalview_testng.xml" />
+       </testng>
+  </target>
+  
   <target name="buildindices" depends="init, prepare" unless="help.uptodate">
     <java classname="com.sun.java.help.search.Indexer" classpathref="build.classpath" fork="true" dir="${outputDir}/${helpDir}">
       <arg line="html" />
diff --git a/examples/testdata/rna-alignment.xml b/examples/testdata/rna-alignment.xml
new file mode 100644 (file)
index 0000000..60aa433
--- /dev/null
@@ -0,0 +1,1326 @@
+<?xml version="1.0"?>
+<!--
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 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.
+-->
+<!DOCTYPE rnaml SYSTEM "rnaml.dtd">
+
+<rnaml version="1.0">
+
+   <molecule id="1">
+      <sequence>
+         <numbering-system id="1" used-in-file="false">
+            <numbering-range>
+               <start>1</start>
+               <end>249</end>
+            </numbering-range>
+         </numbering-system>
+         <seq-data>
+            gaggaaaguc cggacUUCGC AGAAAAAGGU GCCAGUGAAA AACUGGGGGC CGUAAGGCUA
+            CGGAAAGUGU AACAGAAAAC AAACCGCUAA UUCUACCUAG GUAAGAUUAG ACAGGAUGAA
+            AAUGUCGAGC UUAUGGCUCG ACCUCUUUGU GGAAACACAA GGACGCUGCA AACCCCACCU
+            GAAGCAAGAA AGAGUUCGUU UCAGUUUUUC GCUCAGGAAC UCUUAGAGUC GCUCGAGGAU
+            UUUGGUGAC
+         </seq-data>
+      </sequence>
+      <structure>
+         <model id="?">
+            <str-annotation>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>15</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>184</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>16</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>183</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>17</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>182</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>18</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>181</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>22</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>210</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>23</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>209</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>24</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>208</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>25</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>207</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>27</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>180</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>28</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>179</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>29</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>178</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>30</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>177</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>31</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>176</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>32</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>46</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>33</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>45</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>34</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>44</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>35</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>43</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>36</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>42</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>47</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>61</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>48</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>59</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>49</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>58</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>50</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>57</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>51</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>56</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>62</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>175</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>63</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>174</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>67</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>173</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>68</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>172</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>69</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>169</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>70</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>168</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>71</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>167</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>84</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>115</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>85</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>114</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>86</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>111</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>87</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>110</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>88</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>109</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>89</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>108</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>90</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>107</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>91</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>106</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>92</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>105</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>93</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>104</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>94</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>103</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>95</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>102</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>96</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>101</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>124</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>142</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>125</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>141</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>126</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>140</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>127</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>139</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>128</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>138</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>129</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>137</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>143</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>165</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>144</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>163</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>145</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>162</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>146</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>161</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>147</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>160</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>148</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>159</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>149</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>158</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>150</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>157</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>151</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>156</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>188</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>230</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>189</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>229</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>190</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>224</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>191</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>223</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>192</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>222</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>193</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>221</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>194</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>220</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>195</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>219</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>196</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>218</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>197</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>217</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>203</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>213</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>204</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>212</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>205</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>211</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>244</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>249</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+            </str-annotation>
+         </model>
+      </structure>
+   </molecule>
+<molecule id="2">
+      <sequence>
+         <numbering-system id="2" used-in-file="false">
+            <numbering-range>
+               <start>1</start>
+               <end>294</end>
+            </numbering-range>
+         </numbering-system>
+         <seq-data>
+            gaggaaaguc cgggCUCCAU AGGGCAGAGU GCCAGGUAAC GCCUGGGAGG CGCGAGCCUA
+            CGGAAAGUGC CACAGAAAAC AACCGCCUAA GCGCGCAAGC GCCGGUAAGG GUGAAAAGGU
+            GCGGUAAGAG CGCACCGCAC GGCUGGCAAC AGUUCGUGGC UAGGUAAACC CCACUCGGAG
+            CAAGACCAAA UAGGGAUCCA UUGGCGUGGC CCGCGCUGGA UCCGGGUAGG UUGCUAAAGG
+            CGGCCAGCGA UGGUCGUCGU AGAGGAAUGA CUGUCCUCGa cagaacccgg cuua
+         </seq-data>
+      </sequence>
+      <structure>
+         <model id="?">
+            <str-annotation>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>6</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>293</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>7</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>292</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>8</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>291</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>10</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>290</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>11</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>289</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>12</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>288</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>13</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>287</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>14</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>286</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>15</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>180</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>16</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>179</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>17</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>178</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>18</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>177</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>22</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>212</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>23</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>211</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>24</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>210</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>25</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>209</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>27</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>176</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>28</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>175</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>29</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>174</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>30</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>173</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>31</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>172</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>32</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>46</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>33</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>45</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>34</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>44</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>35</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>43</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>36</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>42</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>47</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>61</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>48</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>59</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>49</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>58</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>50</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>57</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>51</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>56</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>62</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>171</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>63</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>170</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>67</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>169</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>68</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>168</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>69</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>165</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>70</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>164</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>71</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>163</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>83</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>110</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>84</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>109</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>85</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>106</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>86</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>105</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>87</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>104</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>91</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>102</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>92</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>101</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>93</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>100</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>94</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>99</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>118</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>136</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>119</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>135</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>120</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>134</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>121</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>133</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>122</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>132</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>123</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>131</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>137</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>160</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>138</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>158</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>139</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>157</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>140</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>156</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>141</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>155</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>142</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>154</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>143</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>152</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>144</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>151</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>145</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>150</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>184</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>232</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>185</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>231</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>186</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>230</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>187</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>229</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>194</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>223</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>195</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>222</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>196</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>221</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>197</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>220</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>198</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>219</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>199</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>218</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>203</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>217</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>204</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>216</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>205</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>215</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>206</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>214</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>207</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>213</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>239</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>258</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>240</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>257</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>241</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>256</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>242</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>255</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>243</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>254</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>244</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>253</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>245</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>252</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+               <base-pair comment="?">
+                  <base-id-5p>
+                     <base-id><position>246</position></base-id>
+                  </base-id-5p>
+                  <base-id-3p>
+                     <base-id><position>251</position></base-id>
+                  </base-id-3p>
+               </base-pair>
+            </str-annotation>
+         </model>
+      </structure>
+   </molecule>
+</rnaml>
index 4039cdd..7b7f4b0 100755 (executable)
  */
 package MCview;
 
-import java.awt.Color;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Vector;
-
 import jalview.analysis.AlignSeq;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
@@ -37,6 +29,14 @@ import jalview.datamodel.SequenceI;
 import jalview.io.FileParse;
 import jalview.util.MessageManager;
 
+import java.awt.Color;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Vector;
+
 public class PDBfile extends jalview.io.AlignFile
 {
   private static String CALC_ID_PREFIX = "JalviewPDB";
@@ -383,7 +383,7 @@ public class PDBfile extends jalview.io.AlignFile
                 "getSeqsAsArray", new Class[]
                 {}).invoke(jmf));
         cl.getMethod("addAnnotations", new Class[]
-        { Alignment.class }).invoke(jmf, al);
+        { AlignmentI.class }).invoke(jmf, al);
         for (SequenceI sq : al.getSequences())
         {
           if (sq.getDatasetSequence() != null)
diff --git a/src/jalview/api/AlignExportSettingI.java b/src/jalview/api/AlignExportSettingI.java
new file mode 100644 (file)
index 0000000..cf56bf3
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * 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.api;
+
+/**
+ * Abstract interface implemented by Alignment Export dialog to retrieve user
+ * configurations
+ * 
+ * @author tcnofoegbu
+ *
+ */
+public interface AlignExportSettingI
+{
+  /**
+   * Checks if hidden sequences should be exported
+   * 
+   * @return
+   */
+  public boolean isExportHiddenSequences();
+
+  /**
+   * Checks if hidden columns shoulb be exported
+   * 
+   * @return
+   */
+  public boolean isExportHiddenColumns();
+
+  /**
+   * Checks if Annotations should be exported, note this is available for
+   * complex flat file exports like JSON, HTML, GFF
+   * 
+   * @return
+   */
+  public boolean isExportAnnotations();
+
+  /**
+   * Checks if SequenceFeatures should be exported, note this is available for
+   * complex flat file exports like JSON, HTML, GFF
+   * 
+   * @return
+   */
+  public boolean isExportFeatures();
+
+  /**
+   * Checks if SequenceGroups should be exported, note this is available for
+   * complex flat file exports like JSON, HTML, GFF
+   * 
+   * @return
+   */
+  public boolean isExportGroups();
+
+  /**
+   * Checks if settings/export process is cancelled
+   * 
+   * @return
+   */
+  public boolean isCancelled();
+}
index 34ee209..93b2134 100644 (file)
  */
 package jalview.api;
 
-import java.awt.Color;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-
 import jalview.analysis.Conservation;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
@@ -36,6 +31,11 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.schemes.ColourSchemeI;
 
+import java.awt.Color;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author jimp
  * 
@@ -372,11 +372,4 @@ public interface AlignViewportI extends ViewStyleI
    * Set whether view should scroll to show the highlighted region of a sequence
    */
   void setFollowHighlight(boolean b);
-
-  public FeatureRenderer getFeatureRenderer();
-
-  public void setFeatureRenderer(FeatureRenderer featureRenderer);
-
-  public boolean isIncludeHiddenRegion();
-
 }
index 79911d9..cf98b2f 100644 (file)
@@ -24,7 +24,6 @@ import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 
 import java.awt.Color;
-import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
 
@@ -37,42 +36,145 @@ import java.util.Map;
 public interface FeatureRenderer
 {
 
+  /**
+   * compute the perceived colour for a given column position in sequenceI,
+   * taking transparency and feature visibility into account.
+   * 
+   * @param col
+   *          - background colour (due to alignment/group shading schemes, etc).
+   * @param sequenceI
+   *          - sequence providing features
+   * @param r
+   *          - column position
+   * @return
+   */
   Color findFeatureColour(Color col, SequenceI sequenceI, int r);
 
+  /**
+   * trigger the feature discovery process for a newly created feature renderer.
+   */
   void featuresAdded();
 
+  /**
+   * 
+   * @param ft
+   * @return display style for a feature
+   */
   Object getFeatureStyle(String ft);
 
+  /**
+   * update the feature style for a particular feature
+   * 
+   * @param ft
+   * @param ggc
+   *          - currently allows java.awt.Color and
+   *          jalview.schemes.GraduatedColor
+   */
   void setColour(String ft, Object ggc);
 
   AlignViewportI getViewport();
 
+  /**
+   * 
+   * @return container managing list of feature types and their visibility
+   */
   FeaturesDisplayedI getFeaturesDisplayed();
 
+  /**
+   * get display style for all features types - visible or invisible
+   * 
+   * @return
+   */
   Map<String,Object> getFeatureColours();
 
+  /**
+   * query the alignment view to find all features
+   * 
+   * @param newMadeVisible
+   *          - when true, automatically make newly discovered types visible
+   */
   void findAllFeatures(boolean newMadeVisible);
 
+  /**
+   * get display style for all features types currently visible
+   * 
+   * @return
+   */
   Map<String,Object> getDisplayedFeatureCols();
 
+  /**
+   * get all registered groups
+   * 
+   * @return
+   */
   List<String> getFeatureGroups();
 
+  /**
+   * get groups that are visible/invisible
+   * 
+   * @param visible
+   * @return
+   */
   List<String> getGroups(boolean visible);
 
+  /**
+   * change visibility for a range of groups
+   * 
+   * @param toset
+   * @param visible
+   */
   void setGroupVisibility(List<String> toset, boolean visible);
 
+  /**
+   * change visibiilty of given group
+   * 
+   * @param group
+   * @param visible
+   */
   void setGroupVisibility(String group, boolean visible);
 
+  /**
+   * locate features at a particular position on the given sequence
+   * 
+   * @param sequence
+   * @param res
+   * @return
+   */
   List<SequenceFeature> findFeaturesAtRes(SequenceI sequence, int res);
 
+  /**
+   * 
+   * @return true if the rendering platform supports transparency
+   */
   boolean isTransparencyAvailable();
 
+  /**
+   * get current displayed types
+   * 
+   * @return
+   */
+
   String[] getDisplayedFeatureTypes();
 
+  /**
+   * get current displayed groups
+   * 
+   * @return
+   */
   String[] getDisplayedFeatureGroups();
 
+  /**
+   * display all features of these types
+   * 
+   * @param featureTypes
+   */
   void setAllVisible(List<String> featureTypes);
 
+  /**
+   * display featureType
+   * 
+   * @param featureType
+   */
   void setVisible(String featureType);
 
 }
index d71fdd4..f16da84 100644 (file)
  */
 package jalview.appletgui;
 
-import java.awt.CheckboxMenuItem;
-import java.awt.Frame;
-import java.awt.Menu;
-import java.awt.MenuItem;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.Vector;
-
 import jalview.analysis.AAFrequency;
 import jalview.analysis.AlignmentAnnotationUtils;
 import jalview.analysis.AlignmentUtils;
@@ -67,6 +51,22 @@ import jalview.schemes.ZappoColourScheme;
 import jalview.util.MessageManager;
 import jalview.util.UrlLink;
 
+import java.awt.CheckboxMenuItem;
+import java.awt.Frame;
+import java.awt.Menu;
+import java.awt.MenuItem;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.Vector;
+
 public class APopupMenu extends java.awt.PopupMenu implements
         ActionListener, ItemListener
 {
@@ -832,7 +832,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
     // TODO consider using getSequenceSelection instead here
 
     cap.setText(new jalview.io.AppletFormatAdapter().formatSequences(
-            e.getActionCommand(), ap.av.getShowJVSuffix(), ap.av, true));
+            e.getActionCommand(), ap.av.getShowJVSuffix(), ap, true));
 
   }
 
@@ -898,7 +898,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
   {
     if (seq.getPDBId() != null)
     {
-      PDBEntry entry = (PDBEntry) seq.getPDBId().firstElement();
+      PDBEntry entry = seq.getPDBId().firstElement();
 
       if (ap.av.applet.jmolAvailable)
       {
index a14da77..ca1d158 100644 (file)
@@ -210,7 +210,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     if (hiddenSeqs != null && hiddenSeqs.length > 0)
     {
       viewport.hideSequence(hiddenSeqs);
-      viewport.setHasHiddenRows(true);
     }
     if (columnSelection != null)
     {
@@ -1341,9 +1340,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
             { e.getActionCommand() }), 600, 500);
 
     FeatureRenderer fr = this.alignPanel.cloneFeatureRenderer();
-    viewport.setFeatureRenderer(fr);
-    viewport.setIncludeHiddenRegion(false);
-    cap.setText(new AppletFormatAdapter(viewport).formatSequences(
+    cap.setText(new AppletFormatAdapter(alignPanel).formatSequences(
             e.getActionCommand(), viewport.getAlignment(),
             viewport.getShowJVSuffix()));
   }
index 607dc05..e4e3e17 100644 (file)
  */
 package jalview.appletgui;
 
-import java.awt.Font;
-
 import jalview.analysis.NJTree;
 import jalview.api.AlignViewportI;
-import jalview.api.FeatureRenderer;
 import jalview.bin.JalviewLite;
 import jalview.commands.CommandI;
 import jalview.datamodel.AlignmentI;
@@ -41,6 +38,8 @@ import jalview.structure.StructureSelectionManager;
 import jalview.structure.VamsasSource;
 import jalview.viewmodel.AlignmentViewport;
 
+import java.awt.Font;
+
 public class AlignViewport extends AlignmentViewport implements
         SelectionSource, VamsasSource, CommandListener
 {
@@ -58,10 +57,6 @@ public class AlignViewport extends AlignmentViewport implements
 
   private AnnotationColumnChooser annotationColumnSelectionState;
 
-  private FeatureRenderer featureRenderer;
-
-  private boolean includeHiddenRegion = true;
-
   public void finalize()
   {
     applet = null;
@@ -472,27 +467,5 @@ public class AlignViewport extends AlignmentViewport implements
     }
   }
 
-  @Override
-  public FeatureRenderer getFeatureRenderer()
-  {
-    return featureRenderer;
-  }
-
-  @Override
-  public void setFeatureRenderer(FeatureRenderer featureRenderer)
-  {
-    this.featureRenderer = featureRenderer;
-
-  }
-
-  public boolean isIncludeHiddenRegion()
-  {
-    return includeHiddenRegion;
-  }
-
-  public void setIncludeHiddenRegion(boolean includeHiddenRegion)
-  {
-    this.includeHiddenRegion = includeHiddenRegion;
-  }
 
 }
index bb2fa12..535dc62 100644 (file)
  */
 package jalview.appletgui;
 
-import java.awt.BorderLayout;
-import java.awt.Button;
-import java.awt.Dialog;
-import java.awt.Font;
-import java.awt.Frame;
-import java.awt.Label;
-import java.awt.Panel;
-import java.awt.TextArea;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-
 import jalview.analysis.AlignmentUtils;
 import jalview.api.ComplexAlignFile;
 import jalview.bin.JalviewLite;
-import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.PDBEntry;
@@ -51,6 +37,19 @@ import jalview.schemes.ColourSchemeI;
 import jalview.schemes.TCoffeeColourScheme;
 import jalview.util.MessageManager;
 
+import java.awt.BorderLayout;
+import java.awt.Button;
+import java.awt.Dialog;
+import java.awt.Font;
+import java.awt.Frame;
+import java.awt.Label;
+import java.awt.Panel;
+import java.awt.TextArea;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
 public class CutAndPasteTransfer extends Panel implements ActionListener,
         MouseListener
 {
@@ -221,11 +220,11 @@ public class CutAndPasteTransfer extends Panel implements ActionListener,
   protected void loadAlignment(String text, boolean newWindow,
           AlignViewport viewport)
   {
-    Alignment al = null;
+    AlignmentI al = null;
 
     String format = new IdentifyFile().Identify(text,
             AppletFormatAdapter.PASTE);
-    AppletFormatAdapter afa = new AppletFormatAdapter(viewport);
+    AppletFormatAdapter afa = new AppletFormatAdapter(alignFrame.alignPanel);
     try
     {
       al = afa.readFile(text, AppletFormatAdapter.PASTE, format);
@@ -294,7 +293,7 @@ public class CutAndPasteTransfer extends Panel implements ActionListener,
    * @param al
    * @return
    */
-  protected boolean openSplitFrame(Alignment al, String format)
+  protected boolean openSplitFrame(AlignmentI al, String format)
   {
     final AlignmentI thisAlignment = this.alignFrame.getAlignViewport().getAlignment();
     if (thisAlignment.isNucleotide() == al.isNucleotide())
index 7f9eba9..5204094 100755 (executable)
@@ -56,7 +56,8 @@ public class IdCanvas extends Panel
     PaintRefresher.Register(this, av.getSequenceSetId());
   }
 
-  public void drawIdString(Graphics gg, SequenceI s, int i, int starty,
+  public void drawIdString(Graphics gg, boolean hiddenRows, SequenceI s,
+          int i, int starty,
           int ypos)
   {
     int charHeight = av.getCharHeight();
@@ -88,7 +89,7 @@ public class IdCanvas extends Panel
             ((i - starty) * charHeight) + ypos + charHeight
                     - (charHeight / 5));
 
-    if (av.hasHiddenRows() && av.getShowHiddenMarkers())
+    if (hiddenRows)
     {
       drawMarker(i, starty, ypos);
     }
@@ -199,6 +200,10 @@ public class IdCanvas extends Panel
     Color currentColor = Color.white;
     Color currentTextColor = Color.black;
 
+    final boolean doHiddenCheck = av.isDisplayReferenceSeq()
+            || av.hasHiddenRows(), hiddenRows = av.hasHiddenRows()
+            && av.getShowHiddenMarkers();
+
     if (av.getWrapAlignment())
     {
       int maxwidth = av.getAlignment().getWidth();
@@ -227,7 +232,6 @@ public class IdCanvas extends Panel
       int cHeight = alheight * avcharHeight + hgap + annotationHeight;
 
       int rowSize = av.getEndRes() - av.getStartRes();
-
       // Draw the rest of the panels
       for (int ypos = hgap, row = av.startRes; (ypos <= getSize().height)
               && (row < maxwidth); ypos += cHeight, row += rowSize)
@@ -237,11 +241,11 @@ public class IdCanvas extends Panel
 
           SequenceI s = av.getAlignment().getSequenceAt(i);
           gg.setFont(italic);
-          if (av.isDisplayReferenceSeq() || av.hasHiddenRows())
+          if (doHiddenCheck)
           {
             setHiddenFont(s);
           }
-          drawIdString(gg, s, i, 0, ypos);
+          drawIdString(gg, hiddenRows, s, i, 0, ypos);
         }
 
         if (labels != null)
@@ -267,7 +271,7 @@ public class IdCanvas extends Panel
         }
         gg.setFont(italic);
         // boolean isrep=false;
-        if (av.isDisplayReferenceSeq() || av.hasHiddenRows())
+        if (doHiddenCheck)
         {
           // isrep =
           setHiddenFont(seq);
@@ -302,7 +306,7 @@ public class IdCanvas extends Panel
                 (((i - starty) * avcharHeight) + avcharHeight)
                         - (avcharHeight / 5));
 
-        if (av.hasHiddenRows() && av.getShowHiddenMarkers())
+        if (hiddenRows)
         {
           drawMarker(i, starty, 0);
         }
index 3301543..f09bda5 100755 (executable)
@@ -22,8 +22,17 @@ package jalview.appletgui;
 
 import jalview.datamodel.AlignmentI;
 
-import java.awt.*;
-import java.awt.event.*;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.Panel;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
 
 public class OverviewPanel extends Panel implements Runnable,
         MouseMotionListener, MouseListener
@@ -289,6 +298,8 @@ public class OverviewPanel extends Panel implements Runnable,
     Color color = Color.yellow;
     int row, col, sameRow = 0, sameCol = 0;
     jalview.datamodel.SequenceI seq;
+    final boolean hasHiddenRows = av.hasHiddenRows(), hasHiddenCols = av
+            .hasHiddenColumns();
     boolean hiddenRow = false;
     AlignmentI alignment = av.getAlignment();
     for (row = 0; row <= sequencesHeight; row++)
@@ -300,7 +311,7 @@ public class OverviewPanel extends Panel implements Runnable,
       }
 
       hiddenRow = false;
-      if (av.hasHiddenRows())
+      if (hasHiddenRows)
       {
         seq = alignment.getHiddenSequences().getHiddenSequence(lastrow);
         if (seq == null)
@@ -346,7 +357,7 @@ public class OverviewPanel extends Panel implements Runnable,
         }
 
         if (hiddenRow
-                || (av.hasHiddenColumns() && !av.getColumnSelection()
+                || (hasHiddenCols && !av.getColumnSelection()
                         .isVisible(lastcol)))
         {
           color = color.darker().darker();
index ebadb84..ae5c63f 100644 (file)
  */
 package jalview.bin;
 
-import java.applet.Applet;
-import java.awt.Button;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.awt.Font;
-import java.awt.Frame;
-import java.awt.Graphics;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import netscape.javascript.JSException;
-import netscape.javascript.JSObject;
-
 import jalview.api.StructureSelectionManagerProvider;
 import jalview.appletgui.AlignFrame;
 import jalview.appletgui.AlignViewport;
@@ -72,6 +48,30 @@ import jalview.structure.SelectionListener;
 import jalview.structure.StructureSelectionManager;
 import jalview.util.MessageManager;
 
+import java.applet.Applet;
+import java.awt.Button;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.event.ActionEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import netscape.javascript.JSException;
+import netscape.javascript.JSObject;
+
 /**
  * Jalview Applet. Runs in Java 1.18 runtime
  * 
@@ -847,7 +847,7 @@ public class JalviewLite extends Applet implements
    */
   public AlignFrame loadAlignment(String text, String title)
   {
-    Alignment al = null;
+    AlignmentI al = null;
 
     String format = new IdentifyFile().Identify(text,
             AppletFormatAdapter.PASTE);
index 462cb81..6be1016 100644 (file)
@@ -20,7 +20,7 @@
  */
 package jalview.bin;
 
-import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
 import jalview.io.AppletFormatAdapter;
 import jalview.io.FileParse;
 
@@ -120,7 +120,7 @@ public class JalviewLiteURLRetrieve extends Applet
       {
         System.out.println("User specified Format is " + format);
       }
-      Alignment al = null;
+      AlignmentI al = null;
       try
       {
         al = new AppletFormatAdapter().readFile(file, protocol, format);
index 835d7e9..3916b7d 100644 (file)
@@ -1138,7 +1138,7 @@ public class ColumnSelection
    *         profileseq marked as hidden.
    */
   public static ColumnSelection propagateInsertions(SequenceI profileseq,
-          Alignment al, AlignmentView input)
+          AlignmentI al, AlignmentView input)
   {
     int profsqpos = 0;
 
diff --git a/src/jalview/gui/AlignExportSettings.java b/src/jalview/gui/AlignExportSettings.java
new file mode 100644 (file)
index 0000000..fe7c940
--- /dev/null
@@ -0,0 +1,115 @@
+package jalview.gui;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JDialog;
+import javax.swing.JInternalFrame;
+import javax.swing.JOptionPane;
+
+import jalview.api.AlignExportSettingI;
+import jalview.jbgui.GAlignExportSettings;
+
+@SuppressWarnings("serial")
+public class AlignExportSettings extends GAlignExportSettings implements
+        AlignExportSettingI
+{
+  protected JInternalFrame frame;
+
+  boolean cancelled = false;
+
+  private int width = 450;
+
+  private int height = 200;
+
+  JDialog dialog;
+
+  public AlignExportSettings(boolean hasHiddenSeq, boolean hasHiddenCols,
+          String alignFileFormat)
+  {
+    super(hasHiddenSeq, hasHiddenCols, alignFileFormat);
+
+    // frame = new JInternalFrame();
+    // frame.setContentPane(this);
+    // frame.setLayer(JLayeredPane.PALETTE_LAYER);
+    // Desktop.addInternalFrame(frame, "Export Settings", width, height);
+
+    JOptionPane pane = new JOptionPane(null, JOptionPane.DEFAULT_OPTION,
+            JOptionPane.DEFAULT_OPTION, null, new Object[]
+            { this });
+    dialog = pane.createDialog(Desktop.desktop, "Export Settings");
+
+    // dialog = new JDialog(Desktop.instance, true);
+    // dialog.setTitle("Export Settings");
+
+    dialog.pack();
+    dialog.setVisible(true);
+
+    dialog.setContentPane(this);
+    dialog.validate();
+
+  }
+
+  // public static void main(String[] args)
+  // {
+  // new AlignExportSettings(false, false, false);
+  // }
+
+  // public void cancel_actionPerformed(ActionEvent e)
+  // {
+    // try
+    // {
+    // frame.setClosed(true);
+    // } catch (Exception ex)
+    // {
+    // }
+  // }
+
+  public void ok_actionPerformed(ActionEvent e)
+  {
+    cancelled = false;
+    dialog.setVisible(false);
+  }
+
+  public void cancel_actionPerformed(ActionEvent e)
+  {
+    cancelled = true;
+    dialog.setVisible(false);
+  }
+
+  @Override
+  public boolean isExportHiddenSequences()
+  {
+    return chkHiddenSeqs.isSelected();
+  }
+
+  @Override
+  public boolean isExportHiddenColumns()
+  {
+    return chkHiddenCols.isSelected();
+  }
+
+  @Override
+  public boolean isExportAnnotations()
+  {
+    return chkExportAnnots.isSelected();
+  }
+
+  @Override
+  public boolean isExportFeatures()
+  {
+    return chkExportFeats.isSelected();
+  }
+
+  @Override
+  public boolean isExportGroups()
+  {
+    return chkExportGrps.isSelected();
+  }
+
+  @Override
+  public boolean isCancelled()
+  {
+    return cancelled;
+  }
+
+}
index cd9c533..01353d8 100644 (file)
  */
 package jalview.gui;
 
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Rectangle;
-import java.awt.Toolkit;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.StringSelection;
-import java.awt.datatransfer.Transferable;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DropTargetDragEvent;
-import java.awt.dnd.DropTargetDropEvent;
-import java.awt.dnd.DropTargetEvent;
-import java.awt.dnd.DropTargetListener;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.print.PageFormat;
-import java.awt.print.PrinterJob;
-import java.beans.PropertyChangeEvent;
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Deque;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Set;
-import java.util.Vector;
-
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JEditorPane;
-import javax.swing.JInternalFrame;
-import javax.swing.JLayeredPane;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JRadioButtonMenuItem;
-import javax.swing.JScrollPane;
-import javax.swing.SwingUtilities;
-
 import jalview.analysis.AAFrequency;
 import jalview.analysis.AlignmentSorter;
 import jalview.analysis.AlignmentUtils;
@@ -74,6 +28,7 @@ import jalview.analysis.CrossRef;
 import jalview.analysis.Dna;
 import jalview.analysis.ParseProperties;
 import jalview.analysis.SequenceIdMatcher;
+import jalview.api.AlignExportSettingI;
 import jalview.api.AlignViewControllerGuiI;
 import jalview.api.AlignViewControllerI;
 import jalview.api.AlignViewportI;
@@ -144,6 +99,52 @@ import jalview.ws.jws2.Jws2Discoverer;
 import jalview.ws.jws2.jabaws2.Jws2Instance;
 import jalview.ws.seqfetcher.DbSourceProxy;
 
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.dnd.DnDConstants;
+import java.awt.dnd.DropTargetDragEvent;
+import java.awt.dnd.DropTargetDropEvent;
+import java.awt.dnd.DropTargetEvent;
+import java.awt.dnd.DropTargetListener;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.print.PageFormat;
+import java.awt.print.PrinterJob;
+import java.beans.PropertyChangeEvent;
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Deque;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Set;
+import java.util.Vector;
+
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JEditorPane;
+import javax.swing.JInternalFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
+
 /**
  * DOCUMENT ME!
  * 
@@ -305,7 +306,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     if (hiddenSeqs != null && hiddenSeqs.length > 0)
     {
       viewport.hideSequence(hiddenSeqs);
-      viewport.setHasHiddenRows(true);
     }
     alignPanel = new AlignmentPanel(this, viewport);
     addAlignmentPanel(alignPanel, true);
@@ -1140,8 +1140,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         return false;
       }
 
-      ExportData exportData = getAlignmentForExport();
-      FormatAdapter f = new FormatAdapter(viewport);
+      ExportData exportData = getAlignmentForExport(format);
+      FormatAdapter f = new FormatAdapter(alignPanel);
       String output = f.formatSequences(format,
               exportData.getAlignment(), // class cast exceptions will
               // occur in the distant future
@@ -1213,13 +1213,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   protected void outputText_actionPerformed(ActionEvent e)
   {
 
-    ExportData exportData = getAlignmentForExport();
+    ExportData exportData = getAlignmentForExport(e.getActionCommand());
+    if (exportData.getSettings().isCancelled())
+    {
+      return;
+    }
     CutAndPasteTransfer cap = new CutAndPasteTransfer();
     cap.setForInput(null);
-
     try
     {
-      cap.setText(new FormatAdapter(viewport).formatSequences(
+      cap.setText(new FormatAdapter(alignPanel, exportData.getSettings())
+              .formatSequences(
               e.getActionCommand(),
  exportData.getAlignment(),
               exportData.getOmitHidden(), exportData.getStartEndPostions(),
@@ -1235,13 +1239,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   }
 
-  public ExportData getAlignmentForExport()
+  public ExportData getAlignmentForExport(String exportFomat)
   {
     AlignmentI alignmentToExport = null;
     String[] omitHidden = null;
     int[] alignmentStartEnd = new int[2];
-    FeatureRenderer fr = new FeatureRenderer(this.alignPanel);
-    viewport.setFeatureRenderer(fr);
+
     HiddenSequences hiddenSeqs = viewport.getAlignment()
             .getHiddenSequences();
 
@@ -1250,36 +1253,28 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     alignmentStartEnd = new int[]
     { 0, alignmentToExport.getWidth() - 1 };
 
-    if (viewport.hasHiddenColumns() || hiddenSeqs.getSize() > 0)
-    {
-      int reply = JOptionPane
-              .showInternalConfirmDialog(
-                      Desktop.desktop,
-                      MessageManager
-                              .getString("label.alignment_contains_hidden_columns"),
-                      MessageManager
-                              .getString("action.save_omit_hidden_columns"),
-                      JOptionPane.YES_NO_OPTION,
-                      JOptionPane.QUESTION_MESSAGE);
+    boolean hasHiddenSeqs = hiddenSeqs.getSize() > 0;
+    AlignExportSettingI settings = new AlignExportSettings(hasHiddenSeqs,
+            viewport.hasHiddenColumns(), exportFomat);
+    settings.isExportAnnotations();
 
-      if (reply == JOptionPane.YES_OPTION)
-      {
-        // export only visible region
-        omitHidden = viewport.getViewAsString(false);
-        alignmentToExport = viewport.getAlignment();
-        alignmentStartEnd = getStartEnd(alignmentStartEnd, viewport
-                .getColumnSelection().getHiddenColumns());
-        viewport.setIncludeHiddenRegion(false);
-      }
-      else
-      {
-        // export all region including visible
-        alignmentToExport = hiddenSeqs.getFullAlignment();
-        viewport.setIncludeHiddenRegion(true);
-      }
+    if (viewport.hasHiddenColumns() && !settings.isExportHiddenColumns())
+    {
+      omitHidden = viewport.getViewAsString(false);
     }
 
-    return new ExportData(alignmentToExport, omitHidden, alignmentStartEnd);
+    if (hasHiddenSeqs && settings.isExportHiddenSequences())
+    {
+      alignmentToExport = hiddenSeqs.getFullAlignment();
+    }
+    else
+    {
+      alignmentToExport = viewport.getAlignment();
+      alignmentStartEnd = getStartEnd(alignmentStartEnd, viewport
+              .getColumnSelection().getHiddenColumns());
+    }
+    return new ExportData(alignmentToExport, omitHidden, alignmentStartEnd,
+            settings);
   }
 
   private static int[] getStartEnd(int[] aligmentStartEnd,
@@ -1352,17 +1347,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   protected void htmlMenuItem_actionPerformed(ActionEvent e)
   {
-    // new HTMLOutput(alignPanel,
-    // alignPanel.getSeqPanel().seqCanvas.getSequenceRenderer(),
-    // alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer());
     new HtmlSvgOutput(null, alignPanel);
   }
 
   @Override
   public void bioJSMenuItem_actionPerformed(ActionEvent e)
   {
-    BioJsHTMLOutput bjs = new BioJsHTMLOutput(alignPanel,
-            alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer());
+    BioJsHTMLOutput bjs = new BioJsHTMLOutput(alignPanel);
     bjs.exportJalviewAlignmentAsBioJsHtmlFile();
   }
   public void createImageMap(File file, String image)
@@ -6088,11 +6079,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     private int[] startEnd;
 
-    public ExportData(AlignmentI align, String[] ommit, int[] startEnd)
+    private AlignExportSettingI settings;
+
+    public ExportData(AlignmentI align, String[] ommit, int[] startEnd,
+            AlignExportSettingI settings)
     {
       this.alignment = align;
       this.omitHidden = ommit;
       this.startEnd = startEnd;
+      this.settings = settings;
     }
 
     public AlignmentI getAlignment()
@@ -6124,6 +6119,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     {
       this.startEnd = startEnd;
     }
+
+    public AlignExportSettingI getSettings()
+    {
+      return settings;
+    }
+
+    public void setSettings(AlignExportSettingI settings)
+    {
+      this.settings = settings;
+    }
   }
 
 }
index 2224021..fc889ad 100644 (file)
  */
 package jalview.gui;
 
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Rectangle;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Set;
-import java.util.Vector;
-
-import javax.swing.JInternalFrame;
-import javax.swing.JOptionPane;
-
 import jalview.analysis.AlignmentUtils;
 import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
 import jalview.analysis.NJTree;
 import jalview.api.AlignViewportI;
-import jalview.api.FeatureRenderer;
 import jalview.api.ViewStyleI;
 import jalview.bin.Cache;
 import jalview.commands.CommandI;
@@ -78,6 +64,19 @@ import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
 import jalview.ws.params.AutoCalcSetting;
 
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Rectangle;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Set;
+import java.util.Vector;
+
+import javax.swing.JInternalFrame;
+import javax.swing.JOptionPane;
+
 /**
  * DOCUMENT ME!
  * 
@@ -97,9 +96,6 @@ public class AlignViewport extends AlignmentViewport implements
 
   private Rectangle explodedGeometry;
 
-  private FeatureRenderer featureRenderer;
-
-  private boolean includeHiddenRegion = true;
   String viewName;
 
   /*
@@ -1041,25 +1037,4 @@ public class AlignViewport extends AlignmentViewport implements
     }
   }
 
-  @Override
-  public FeatureRenderer getFeatureRenderer()
-  {
-    return featureRenderer;
-  }
-
-  @Override
-  public void setFeatureRenderer(FeatureRenderer featureRenderer)
-  {
-    this.featureRenderer = featureRenderer;
-  }
-
-  public boolean isIncludeHiddenRegion()
-  {
-    return includeHiddenRegion;
-  }
-
-  public void setIncludeHiddenRegion(boolean includeHiddenRegion)
-  {
-    this.includeHiddenRegion = includeHiddenRegion;
-  }
 }
index 6139669..c2a7299 100644 (file)
@@ -1084,7 +1084,7 @@ public class AppJmol extends StructureViewerBase
       getSize(currentSize);
       g.getClipBounds(rectClip);
 
-      if (jmb.fileLoadingError != null)
+      if (jmb != null && jmb.fileLoadingError != null)
       {
         g.setColor(Color.black);
         g.fillRect(0, 0, currentSize.width, currentSize.height);
index f3c4d87..b492ddf 100644 (file)
  */
 package jalview.gui;
 
+import jalview.api.AlignViewportI;
+import jalview.api.AlignmentViewPanel;
+import jalview.api.ComplexAlignFile;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.SequenceI;
+import jalview.io.FileParse;
+import jalview.io.FormatAdapter;
+import jalview.io.IdentifyFile;
+import jalview.io.JalviewFileChooser;
+import jalview.io.JalviewFileView;
+import jalview.jbgui.GCutAndPasteTransfer;
+import jalview.schemes.ColourSchemeI;
+import jalview.util.MessageManager;
+
 import java.awt.Toolkit;
 import java.awt.datatransfer.Clipboard;
 import java.awt.datatransfer.DataFlavor;
@@ -34,19 +49,6 @@ import javax.swing.JOptionPane;
 import javax.swing.JPopupMenu;
 import javax.swing.SwingUtilities;
 
-import jalview.api.ComplexAlignFile;
-import jalview.datamodel.Alignment;
-import jalview.datamodel.ColumnSelection;
-import jalview.datamodel.SequenceI;
-import jalview.io.FileParse;
-import jalview.io.FormatAdapter;
-import jalview.io.IdentifyFile;
-import jalview.io.JalviewFileChooser;
-import jalview.io.JalviewFileView;
-import jalview.jbgui.GCutAndPasteTransfer;
-import jalview.schemes.ColourSchemeI;
-import jalview.util.MessageManager;
-
 /**
  * Cut'n'paste files into the desktop See JAL-1105
  * 
@@ -56,7 +58,9 @@ import jalview.util.MessageManager;
 public class CutAndPasteTransfer extends GCutAndPasteTransfer
 {
 
-  AlignViewport viewport;
+  AlignmentViewPanel alignpanel;
+
+  AlignViewportI viewport;
 
   FileParse source = null;
   public CutAndPasteTransfer()
@@ -74,9 +78,14 @@ public class CutAndPasteTransfer extends GCutAndPasteTransfer
   /**
    * DOCUMENT ME!
    */
-  public void setForInput(AlignViewport viewport)
+  public void setForInput(AlignmentViewPanel viewpanel)
   {
-    this.viewport = viewport;
+    this.alignpanel = viewpanel;
+    if (alignpanel != null)
+    {
+
+    }
+    this.viewport = alignpanel.getAlignViewport();
     if (viewport != null)
     {
       ok.setText(MessageManager.getString("action.add"));
@@ -188,13 +197,13 @@ public class CutAndPasteTransfer extends GCutAndPasteTransfer
   {
     String format = new IdentifyFile().Identify(getText(), "Paste");
     // TODO: identify feature, annotation or tree file and parse appropriately.
-    Alignment al = null;
+    AlignmentI al = null;
 
     if (FormatAdapter.isValidFormat(format))
     {
       try
       {
-        FormatAdapter fa = new FormatAdapter(viewport);
+        FormatAdapter fa = new FormatAdapter(alignpanel);
         al = fa.readFile(getText(), "Paste", format);
         source = fa.getAlignFile();
 
@@ -216,7 +225,7 @@ public class CutAndPasteTransfer extends GCutAndPasteTransfer
               { format });
       if (viewport != null)
       {
-        viewport.addAlignment(al, title);
+        ((AlignViewport) viewport).addAlignment(al, title);
       }
       else
       {
index 9e84407..cc9daa1 100644 (file)
  */
 package jalview.gui;
 
+import jalview.api.AlignViewportI;
+import jalview.api.AlignmentViewPanel;
+import jalview.bin.Cache;
+import jalview.io.FileLoader;
+import jalview.io.FormatAdapter;
+import jalview.io.IdentifyFile;
+import jalview.io.JalviewFileChooser;
+import jalview.io.JalviewFileView;
+import jalview.jbgui.GSplitFrame;
+import jalview.jbgui.GStructureViewer;
+import jalview.structure.StructureSelectionManager;
+import jalview.util.ImageMaker;
+import jalview.util.MessageManager;
+import jalview.viewmodel.AlignmentViewport;
+import jalview.ws.params.ParamManager;
+
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Dimension;
@@ -84,22 +100,6 @@ import javax.swing.event.HyperlinkEvent.EventType;
 import javax.swing.event.MenuEvent;
 import javax.swing.event.MenuListener;
 
-import jalview.api.AlignViewportI;
-import jalview.api.AlignmentViewPanel;
-import jalview.bin.Cache;
-import jalview.io.FileLoader;
-import jalview.io.FormatAdapter;
-import jalview.io.IdentifyFile;
-import jalview.io.JalviewFileChooser;
-import jalview.io.JalviewFileView;
-import jalview.jbgui.GSplitFrame;
-import jalview.jbgui.GStructureViewer;
-import jalview.structure.StructureSelectionManager;
-import jalview.util.ImageMaker;
-import jalview.util.MessageManager;
-import jalview.viewmodel.AlignmentViewport;
-import jalview.ws.params.ParamManager;
-
 /**
  * Jalview Desktop
  * 
@@ -1133,7 +1133,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements
   public void inputTextboxMenuItem_actionPerformed(AlignViewport viewport)
   {
     CutAndPasteTransfer cap = new CutAndPasteTransfer();
-    cap.setForInput(viewport);
+    cap.setForInput(viewport.getAlignPanel());
     Desktop.addInternalFrame(cap,
             MessageManager.getString("label.cut_paste_alignmen_file"),
             true, 600, 500);
index a7a4e34..fe42e1e 100755 (executable)
@@ -86,6 +86,8 @@ public class IdCanvas extends JPanel
    * 
    * @param gg
    *          DOCUMENT ME!
+   * @param hiddenRows
+   *          true - check and display hidden row marker if need be
    * @param s
    *          DOCUMENT ME!
    * @param i
@@ -95,7 +97,8 @@ public class IdCanvas extends JPanel
    * @param ypos
    *          DOCUMENT ME!
    */
-  public void drawIdString(Graphics2D gg, SequenceI s, int i, int starty,
+  public void drawIdString(Graphics2D gg, boolean hiddenRows, SequenceI s,
+          int i, int starty,
           int ypos)
   {
     int xPos = 0;
@@ -134,7 +137,7 @@ public class IdCanvas extends JPanel
     gg.drawString(s.getDisplayId(av.getShowJVSuffix()), xPos,
             (((i - starty + 1) * charHeight) + ypos) - (charHeight / 5));
 
-    if (av.hasHiddenRows() && av.getShowHiddenMarkers())
+    if (hiddenRows)
     {
       drawMarker(i, starty, ypos);
     }
@@ -274,6 +277,9 @@ public class IdCanvas extends JPanel
     Color currentColor = Color.white;
     Color currentTextColor = Color.black;
 
+    final boolean doHiddenCheck = av.isDisplayReferenceSeq()
+            || av.hasHiddenRows(), hiddenRows = av.hasHiddenRows();
+
     if (av.getWrapAlignment())
     {
       int maxwidth = av.getAlignment().getWidth();
@@ -317,7 +323,7 @@ public class IdCanvas extends JPanel
         for (int i = starty; i < alheight; i++)
         {
           SequenceI s = av.getAlignment().getSequenceAt(i);
-          if (av.isDisplayReferenceSeq() || av.hasHiddenRows())
+          if (doHiddenCheck)
           {
             setHiddenFont(s);
           }
@@ -326,7 +332,7 @@ public class IdCanvas extends JPanel
             gg.setFont(getIdfont());
           }
 
-          drawIdString(gg, s, i, 0, ypos);
+          drawIdString(gg, hiddenRows, s, i, 0, ypos);
         }
 
         if (labels != null && av.isShowAnnotation())
@@ -357,7 +363,7 @@ public class IdCanvas extends JPanel
           continue;
         }
 
-        if (av.isDisplayReferenceSeq() || av.hasHiddenRows())
+        if (doHiddenCheck)
         {
           setHiddenFont(sequence);
         }
@@ -399,7 +405,7 @@ public class IdCanvas extends JPanel
                 (((i - starty) * av.getCharHeight()) + av.getCharHeight())
                         - (av.getCharHeight() / 5));
 
-        if (av.hasHiddenRows() && av.getShowHiddenMarkers())
+        if (hiddenRows)
         {
           drawMarker(i, starty, 0);
         }
index 39a232a..609e010 100755 (executable)
@@ -292,6 +292,8 @@ public class OverviewPanel extends JPanel implements Runnable
     int color = Color.white.getRGB();
     int row, col;
     jalview.datamodel.SequenceI seq;
+    final boolean hasHiddenRows = av.hasHiddenRows(), hasHiddenCols = av
+            .hasHiddenColumns();
     boolean hiddenRow = false;
     for (row = 0; row < sequencesHeight; row++)
     {
@@ -309,7 +311,7 @@ public class OverviewPanel extends JPanel implements Runnable
       lastrow = (int) (row * sampleRow);
 
       hiddenRow = false;
-      if (av.hasHiddenRows())
+      if (hasHiddenRows)
       {
         seq = av.getAlignment().getHiddenSequences()
                 .getHiddenSequence(lastrow);
@@ -362,7 +364,7 @@ public class OverviewPanel extends JPanel implements Runnable
         }
 
         if (hiddenRow
-                || (av.hasHiddenColumns() && !av.getColumnSelection()
+                || (hasHiddenCols && !av.getColumnSelection()
                         .isVisible(lastcol)))
         {
           color = new Color(color).darker().darker().getRGB();
index 0d28a70..2aa8675 100644 (file)
@@ -2396,7 +2396,7 @@ public class PopupMenu extends JPopupMenu
     // wysiwig behaviour
 
     cap.setText(new FormatAdapter().formatSequences(e.getActionCommand(),
-            ap.av, true));
+            ap, true));
   }
 
   public void pdbFromFile_actionPerformed()
index dd25532..c330a92 100755 (executable)
  */
 package jalview.gui;
 
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.DBRefSource;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.io.FormatAdapter;
+import jalview.io.IdentifyFile;
+import jalview.util.DBRefUtils;
+import jalview.util.MessageManager;
+import jalview.ws.dbsources.das.api.DasSourceRegistryI;
+import jalview.ws.seqfetcher.DbSourceProxy;
+
 import java.awt.BorderLayout;
 import java.awt.Font;
 import java.awt.event.ActionEvent;
@@ -44,19 +56,6 @@ import javax.swing.tree.DefaultMutableTreeNode;
 
 import com.stevesoft.pat.Regex;
 
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.DBRefEntry;
-import jalview.datamodel.DBRefSource;
-import jalview.datamodel.SequenceFeature;
-import jalview.datamodel.SequenceI;
-import jalview.io.FormatAdapter;
-import jalview.io.IdentifyFile;
-import jalview.util.DBRefUtils;
-import jalview.util.MessageManager;
-import jalview.ws.dbsources.das.api.DasSourceRegistryI;
-import jalview.ws.seqfetcher.DbSourceProxy;
-
 public class SequenceFetcher extends JPanel implements Runnable
 {
   JLabel dbeg = new JLabel();
@@ -774,7 +773,7 @@ public class SequenceFetcher extends JPanel implements Runnable
   AlignmentI parseResult(String result, String title)
   {
     String format = new IdentifyFile().Identify(result, "Paste");
-    Alignment sequences = null;
+    AlignmentI sequences = null;
     if (FormatAdapter.isValidFormat(format))
     {
       sequences = null;
index 5d8a297..3b46760 100755 (executable)
  */
 package jalview.io;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Vector;
-
-import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Sequence;
@@ -35,6 +27,13 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.util.MessageManager;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Vector;
+
 /**
  * DOCUMENT ME!
  * 
@@ -200,7 +199,7 @@ public abstract class AlignFile extends FileParse
    * 
    * @param al
    */
-  public void addAnnotations(Alignment al)
+  public void addAnnotations(AlignmentI al)
   {
     addProperties(al);
     for (int i = 0; i < annotations.size(); i++)
@@ -220,6 +219,11 @@ public abstract class AlignFile extends FileParse
 
   }
 
+  /**
+   * register sequence groups on the alignment for **output**
+   * 
+   * @param al
+   */
   public void addSeqGroups(AlignmentI al)
   {
     this.seqGroups = al.getGroups();
@@ -233,7 +237,7 @@ public abstract class AlignFile extends FileParse
    * @note implicitly called by addAnnotations()
    * @param al
    */
-  public void addProperties(Alignment al)
+  public void addProperties(AlignmentI al)
   {
     if (properties != null && properties.size() > 0)
     {
@@ -378,4 +382,13 @@ public abstract class AlignFile extends FileParse
     return newickStrings == null ? 0 : newickStrings.size();
   }
 
+  public void addGroups(AlignmentI al)
+  {
+
+    for (SequenceGroup sg : getSeqGroups())
+    {
+      al.addGroup(sg);
+    }
+  }
+
 }
index 9effa74..cb4b7ad 100644 (file)
@@ -20,8 +20,8 @@
  */
 package jalview.io;
 
-import java.io.StringWriter;
 import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.Enumeration;
 import java.util.Hashtable;
 
@@ -61,11 +61,15 @@ public class AlignmentProperties
               - alignment.getSequenceAt(i).getStart();
       avg += size;
       if (size > max)
+      {
         max = size;
+      }
       if (size < min)
+      {
         min = size;
+      }
     }
-    avg = avg / (float) alignment.getHeight();
+    avg = avg / alignment.getHeight();
     pw.print(nl);
     pw.print("Sequences: " + alignment.getHeight());
     pw.print(nl);
index de9e6bd..b235bcc 100755 (executable)
  */
 package jalview.io;
 
-import java.io.File;
-import java.io.InputStream;
-import java.util.List;
-
-import jalview.api.AlignViewportI;
+import jalview.api.AlignExportSettingI;
+import jalview.api.AlignmentViewPanel;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentView;
-import jalview.datamodel.SequenceGroup;
+import jalview.gui.AlignmentPanel;
 import jalview.util.MessageManager;
 
+import java.io.File;
+import java.io.InputStream;
+import java.util.List;
+
 /**
  * A low level class for alignment and feature IO with alignment formatting
  * methods used by both applet and application for generating flat alignment
@@ -43,7 +44,7 @@ import jalview.util.MessageManager;
  */
 public class AppletFormatAdapter
 {
-  private AlignViewportI viewport;
+  private AlignmentViewPanel viewpanel;
 
   public static String FILE = "File";
 
@@ -77,6 +78,8 @@ public class AppletFormatAdapter
    */
   protected String newline = System.getProperty("line.separator");
 
+  private AlignExportSettingI exportSettings;
+
   /**
    * List of valid format strings used in the isValidFormat method
    */
@@ -138,9 +141,16 @@ public class AppletFormatAdapter
   {
   }
 
-  public AppletFormatAdapter(AlignViewportI viewport)
+  public AppletFormatAdapter(AlignmentViewPanel viewpanel)
+  {
+    this.viewpanel = viewpanel;
+  }
+
+  public AppletFormatAdapter(AlignmentPanel alignPanel,
+          AlignExportSettingI settings)
   {
-    this.viewport = viewport;
+    viewpanel = alignPanel;
+    exportSettings = settings;
   }
 
   /**
@@ -222,7 +232,7 @@ public class AppletFormatAdapter
    *
    * @return DOCUMENT ME!
    */
-  public Alignment readFile(String inFile, String type, String format)
+  public AlignmentI readFile(String inFile, String type, String format)
           throws java.io.IOException
   {
     // TODO: generalise mapping between format string and io. class instances
@@ -230,7 +240,6 @@ public class AppletFormatAdapter
     this.inFile = inFile;
     try
     {
-      Alignment al;
       if (format.equals("FASTA"))
       {
         alignFile = new FastaFile(inFile, type);
@@ -286,26 +295,10 @@ public class AppletFormatAdapter
       else if (format.equals(JSONFile.FILE_DESC))
       {
         alignFile = new JSONFile(inFile, type);
-        al = new Alignment(alignFile.getSeqsAsArray());
-        alignFile.addAnnotations(al);
-        ((JSONFile) alignFile).setViewport(viewport);
-        for (SequenceGroup sg : alignFile.getSeqGroups())
-        {
-          al.addGroup(sg);
-        }
-
-        return al;
       }
       else if (format.equals(HtmlFile.FILE_DESC))
       {
         alignFile = new HtmlFile(inFile, type);
-        al = new Alignment(alignFile.getSeqsAsArray());
-        alignFile.addAnnotations(al);
-        for (SequenceGroup sg : alignFile.getSeqGroups())
-        {
-          al.addGroup(sg);
-        }
-        return al;
       }
       else if (format.equals("RNAML"))
       {
@@ -315,12 +308,7 @@ public class AppletFormatAdapter
       {
         alignFile = new Gff3File(inFile, type);
       }
-
-      al = new Alignment(alignFile.getSeqsAsArray());
-
-      alignFile.addAnnotations(al);
-
-      return al;
+      return buildAlignmentFrom(alignFile);
     } catch (Exception e)
     {
       e.printStackTrace();
@@ -340,11 +328,7 @@ public class AppletFormatAdapter
         {
           // Possible sequence is just residues with no label
           alignFile = new FastaFile(">UNKNOWN\n" + inFile, "Paste");
-          Alignment al = new Alignment(alignFile.getSeqsAsArray());
-
-          alignFile.addSeqGroups(al);
-          alignFile.addAnnotations(al);
-          return al;
+          return buildAlignmentFrom(alignFile);
 
         } catch (Exception ex)
         {
@@ -383,7 +367,6 @@ public class AppletFormatAdapter
     String type = source.type;
     try
     {
-      Alignment al;
       if (format.equals("FASTA"))
       {
         alignFile = new FastaFile(source);
@@ -445,19 +428,14 @@ public class AppletFormatAdapter
       else if (format.equals(JSONFile.FILE_DESC))
       {
         alignFile = new JSONFile(source);
-        al = new Alignment(alignFile.getSeqsAsArray());
-        alignFile.addAnnotations(al);
-        alignFile.addSeqGroups(al);
-        return al;
       }
       else if (format.equals(HtmlFile.FILE_DESC))
       {
         alignFile = new HtmlFile(source);
       }
-      al = new Alignment(alignFile.getSeqsAsArray());
-      alignFile.addAnnotations(al);
 
-      return al;
+      return buildAlignmentFrom(alignFile);
+
     } catch (Exception e)
     {
       e.printStackTrace();
@@ -477,10 +455,7 @@ public class AppletFormatAdapter
         {
           // Possible sequence is just residues with no label
           alignFile = new FastaFile(">UNKNOWN\n" + inFile, "Paste");
-          Alignment al = new Alignment(alignFile.getSeqsAsArray());
-          alignFile.addAnnotations(al);
-          alignFile.addSeqGroups(al);
-          return al;
+          return buildAlignmentFrom(alignFile);
 
         } catch (Exception ex)
         {
@@ -500,6 +475,27 @@ public class AppletFormatAdapter
 
 
   /**
+   * boilerplate method to handle data from an AlignFile and construct a new
+   * alignment or import to an existing alignment
+   * 
+   * @param alignFile2
+   * @return AlignmentI instance ready to pass to a UI constructor
+   */
+  private AlignmentI buildAlignmentFrom(AlignFile alignFile2)
+  {
+    // Standard boilerplate for creating alignment from parser
+    alignFile.configureForView(viewpanel);
+
+    AlignmentI al = new Alignment(alignFile.getSeqsAsArray());
+
+    alignFile.addAnnotations(al);
+
+    alignFile.addGroups(al);
+
+    return al;
+  }
+
+  /**
    * create an alignment flatfile from a Jalview alignment view
    * @param format
    * @param jvsuffix
@@ -508,13 +504,14 @@ public class AppletFormatAdapter
    * @return flatfile in a string
    */
   public String formatSequences(String format, boolean jvsuffix,
-          AlignViewportI av, boolean selectedOnly)
+          AlignmentViewPanel ap, boolean selectedOnly)
   {
 
-    AlignmentView selvew = av.getAlignmentView(selectedOnly, false);
-    AlignmentI aselview = selvew.getVisibleAlignment(av
+    AlignmentView selvew = ap.getAlignViewport().getAlignmentView(
+            selectedOnly, false);
+    AlignmentI aselview = selvew.getVisibleAlignment(ap.getAlignViewport()
             .getGapCharacter());
-    List<AlignmentAnnotation> ala = (av
+    List<AlignmentAnnotation> ala = (ap.getAlignViewport()
             .getVisibleAlignmentAnnotation(selectedOnly));
     if (ala != null)
     {
@@ -591,22 +588,6 @@ public class AppletFormatAdapter
        else if (format.equalsIgnoreCase(JSONFile.FILE_DESC))
        {
         afile = new JSONFile();
-        afile.setViewport(viewport);
-        // Add groups to AlignFile
-        afile.seqGroups = alignment.getGroups();
-
-        // Add non auto calculated annotation to AlignFile
-        for (AlignmentAnnotation annot : alignment.getAlignmentAnnotation())
-        {
-          if (annot != null && !annot.autoCalculated)
-          {
-            if (annot.label.equals("PDB.CATempFactor"))
-            {
-              continue;
-            }
-            afile.annotations.add(annot);
-          }
-        }
        }
       else if (format.equalsIgnoreCase("RNAML"))
       {
@@ -620,8 +601,21 @@ public class AppletFormatAdapter
       afile.setNewlineString(newline);
       afile.addJVSuffix(jvsuffix);
 
-      afile.setSeqs(alignment.getSequencesArray());
+      afile.setExportSettings(exportSettings);
+
+      afile.configureForView(viewpanel);
 
+      // check whether we were given a specific alignment to export, rather than
+      // the one in the viewpanel
+      if (viewpanel == null || viewpanel.getAlignment() == null
+              || viewpanel.getAlignment() != alignment)
+      {
+        afile.setSeqs(alignment.getSequencesArray());
+      }
+      else
+      {
+        afile.setSeqs(viewpanel.getAlignment().getSequencesArray());
+      }
 
       String afileresp = afile.print();
       if (afile.hasWarningMessage())
@@ -668,7 +662,7 @@ public class AppletFormatAdapter
           System.gc();
           long memf = -r.totalMemory() + r.freeMemory();
           long t1 = -System.currentTimeMillis();
-          Alignment al = afa.readFile(args[i], FILE,
+          AlignmentI al = afa.readFile(args[i], FILE,
                   new IdentifyFile().Identify(args[i], FILE));
           t1 += System.currentTimeMillis();
           System.gc();
index 0376c2c..c7cf2d6 100755 (executable)
  */
 package jalview.io;
 
-import java.io.*;
-import java.util.*;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceI;
 
-import jalview.datamodel.*;
+import java.io.IOException;
+import java.util.Vector;
 
 /**
  * DOCUMENT ME!
@@ -115,7 +116,9 @@ public class BLCFile extends AlignFile
       {
         line = nextLine();
         if (line == null)
+        {
           break;
+        }
         // seek end of ids
         if (line.indexOf("*") > -1)
         {
@@ -150,7 +153,9 @@ public class BLCFile extends AlignFile
         }
       } while (!idsFound);
       if (line == null)
+       {
         break; // end of file.
+      }
       int starCol = line.indexOf("*");
       seqstrings = new StringBuffer[seqs.size()];
 
@@ -198,9 +203,11 @@ public class BLCFile extends AlignFile
     }
     if (seqs.size() > 0)
     {
-      if (headerLines.length() > 1 + numHeaderLines) // could see if buffer is
+      if (headerLines.length() > 1 + numHeaderLines)
+      {
         // just whitespace or not.
         setAlignmentProperty("Comments", headerLines.toString());
+      }
       setAlignmentProperty("iteration", "" + iterationCount);
     }
   }
index a026c57..74fb147 100644 (file)
@@ -1,9 +1,7 @@
 package jalview.io;
 
+import jalview.api.AlignmentViewPanel;
 import jalview.exceptions.NoFileSelectedException;
-import jalview.gui.AlignViewport;
-import jalview.gui.AlignmentPanel;
-import jalview.gui.FeatureRenderer;
 import jalview.json.binding.v1.BioJSReleasePojo;
 import jalview.json.binding.v1.BioJSRepositoryPojo;
 import jalview.util.MessageManager;
@@ -23,7 +21,7 @@ import java.util.TreeMap;
 
 public class BioJsHTMLOutput
 {
-  private AlignViewport av;
+  private AlignmentViewPanel ap;
 
   private static File currentBJSTemplateFile;
 
@@ -40,12 +38,11 @@ public class BioJsHTMLOutput
                   "biojs_template_git_repo",
                   "https://raw.githubusercontent.com/tcofoegbu/bjs-template/master/package.json");
 
-  public BioJsHTMLOutput(AlignmentPanel ap, FeatureRenderer fr1)
+  public BioJsHTMLOutput(AlignmentViewPanel ap)
   {
     if (ap != null)
     {
-      this.av = ap.av;
-      av.setFeatureRenderer(new FeatureRenderer(ap));
+      this.ap = ap;
     }
   }
 
@@ -54,7 +51,7 @@ public class BioJsHTMLOutput
     try
     {
       String outputFile = getOutputFile();
-      String jalviewAlignmentJson = JSONFile.getJSONData(av);
+      String jalviewAlignmentJson = JSONFile.getJSONData(ap);
       String bioJSTemplateString = getBioJsTemplateAsString();
       String generatedBioJsWithJalviewAlignmentAsJson = bioJSTemplateString
               .replaceAll(
index 601cdb1..60c6bbd 100755 (executable)
@@ -22,7 +22,6 @@ package jalview.io;
 
 import jalview.analysis.SequenceIdMatcher;
 import jalview.datamodel.AlignedCodonFrame;
-import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceDummy;
 import jalview.datamodel.SequenceFeature;
@@ -171,13 +170,13 @@ public class FeaturesFile extends AlignFile
   }
 
   @Override
-  public void addAnnotations(Alignment al)
+  public void addAnnotations(AlignmentI al)
   {
     super.addAnnotations(al);
   }
 
   @Override
-  public void addProperties(Alignment al)
+  public void addProperties(AlignmentI al)
   {
     super.addProperties(al);
   }
index f9c717d..9228257 100755 (executable)
@@ -20,7 +20,9 @@
  */
 package jalview.io;
 
+import jalview.api.AlignExportSettingI;
 import jalview.api.AlignViewportI;
+import jalview.api.AlignmentViewPanel;
 import jalview.util.MessageManager;
 
 import java.io.BufferedReader;
@@ -49,12 +51,26 @@ public class FileParse
 
   public File inFile = null;
 
+  /**
+   * a viewport associated with the current file operation. May be null. May
+   * move to different object.
+   */
   private AlignViewportI viewport;
 
-  public int index = 1; // sequence counter for FileParse object created from
+  /**
+   * specific settings for exporting data from the current context
+   */
+  private AlignExportSettingI exportSettings;
 
-  // same data source
+  /**
+   * sequence counter for FileParse object created from same data source
+   */
+  public int index = 1;
 
+  /**
+   * separator for extracting specific 'frame' of a datasource for formats that
+   * support multiple records (e.g. BLC, Stockholm, etc)
+   */
   protected char suffixSeparator = '#';
 
   /**
@@ -395,6 +411,19 @@ public class FileParse
     throw new IOException(MessageManager.formatMessage("exception.invalid_source_stream", new String[]{errormessage}));
   }
 
+  /**
+   * 
+   * @return true if this FileParse is configured for Export only
+   */
+  public boolean isExporting()
+  {
+    return !error && dataIn == null;
+  }
+
+  /**
+   * 
+   * @return true if the data source is valid
+   */
   public boolean isValid()
   {
     return !error;
@@ -501,4 +530,37 @@ public class FileParse
   {
     this.viewport = viewport;
   }
+
+  /**
+   * @return the currently configured exportSettings for writing data.
+   */
+  public AlignExportSettingI getExportSettings()
+  {
+    return exportSettings;
+  }
+
+  /**
+   * Set configuration for export of data.
+   * 
+   * @param exportSettings
+   *          the exportSettings to set
+   */
+  public void setExportSettings(AlignExportSettingI exportSettings)
+  {
+    this.exportSettings = exportSettings;
+  }
+
+  /**
+   * method overridden by complex file exporter/importers which support
+   * exporting visualisation and layout settings for a view
+   * 
+   * @param avpanel
+   */
+  public void configureForView(AlignmentViewPanel avpanel)
+  {
+    if (avpanel!=null) {
+      setViewport(avpanel.getAlignViewport());
+    }
+    // could also set export/import settings
+  }
 }
index d241308..e795925 100755 (executable)
@@ -20,7 +20,8 @@
  */
 package jalview.io;
 
-import jalview.api.AlignViewportI;
+import jalview.api.AlignExportSettingI;
+import jalview.api.AlignmentViewPanel;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
@@ -28,6 +29,7 @@ import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.gui.AlignmentPanel;
 
 /**
  * Additional formatting methods used by the application in a number of places.
@@ -37,9 +39,9 @@ import jalview.datamodel.SequenceI;
  */
 public class FormatAdapter extends AppletFormatAdapter
 {
-  public FormatAdapter(AlignViewportI viewport)
+  public FormatAdapter(AlignmentViewPanel viewpanel)
   {
-    super(viewport);
+    super(viewpanel);
     init();
   }
 
@@ -49,6 +51,12 @@ public class FormatAdapter extends AppletFormatAdapter
     init();
   }
 
+  public FormatAdapter(AlignmentPanel alignPanel,
+          AlignExportSettingI settings)
+  {
+    super(alignPanel, settings);
+  }
+
   private void init()
   {
     if (jalview.bin.Cache.getDefault("STRUCT_FROM_PDB", true))
@@ -304,17 +312,17 @@ public class FormatAdapter extends AppletFormatAdapter
     return this.formatSequences(format, alignment, suffix);
   }
 
-  public Alignment readFile(String inFile, String type, String format)
+  public AlignmentI readFile(String inFile, String type, String format)
           throws java.io.IOException
   {
-    Alignment al = super.readFile(inFile, type, format);
+    AlignmentI al = super.readFile(inFile, type, format);
     return al;
   }
 
   public AlignmentI readFromFile(FileParse source, String format)
           throws java.io.IOException
   {
-    Alignment al = (Alignment) super.readFromFile(source, format);
+    AlignmentI al = super.readFromFile(source, format);
     return al;
   }
 
@@ -341,14 +349,19 @@ public class FormatAdapter extends AppletFormatAdapter
   }
 
   /**
-   * Create a flat file representation of a given view or selected region of a view
+   * Create a flat file representation of a given view or selected region of a
+   * view
+   * 
    * @param format
-   * @param av
+   * @param ap
+   *          alignment panel originating the view
    * @return String containing flat file
    */
-  public String formatSequences(String format, AlignViewportI av, boolean selectedOnly)
+  public String formatSequences(String format, AlignmentViewPanel ap,
+          boolean selectedOnly)
   {
-    return formatSequences(format, getCacheSuffixDefault(format), av, selectedOnly);
+    return formatSequences(format, getCacheSuffixDefault(format), ap,
+            selectedOnly);
   }
 
 
index 53179e0..1f8c3be 100644 (file)
@@ -139,7 +139,7 @@ public class Gff3File extends FeaturesFile
   }
 
   @Override
-  public void addProperties(Alignment al)
+  public void addProperties(AlignmentI al)
   {
     super.addProperties(al);
     if (dataset.getCodonFrames() != null)
index 73aa5d2..a4e9bf4 100644 (file)
@@ -22,6 +22,7 @@
 package jalview.io;
 
 import java.io.IOException;
+import java.io.StringReader;
 
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
@@ -66,18 +67,24 @@ public class HtmlFile extends AlignFile implements ComplexAlignFile
   {
     try
     {
-      StringBuilder htmlData = new StringBuilder();
-      String currentLine;
-      while ((currentLine = nextLine()) != null)
-      {
-        htmlData.append(currentLine);
+      Element content = null;
+      Document doc = null;
+      try {
+         StringBuilder htmlData = new StringBuilder();
+          String currentLine;
+          while ((currentLine = nextLine()) != null)
+          {
+            htmlData.append(currentLine);
+          }
+
+          doc = Jsoup.parse(htmlData.toString());
+      } catch (OutOfMemoryError oom) {
+         errormessage = "Not enough memory to process HTML document";
+         throw new IOException(errormessage);
       }
-
-      Document doc = Jsoup.parse(htmlData.toString());
-      Element content = doc.getElementById("seqData");
-      String alignmentJsonString = content.val();
-
-      JSONFile jsonFile = new JSONFile().parse(alignmentJsonString);
+      content = doc.getElementById("seqData");
+      
+      JSONFile jsonFile = new JSONFile().parse(new StringReader(content.val()));
       this.seqs = jsonFile.getSeqs();
       this.seqGroups = jsonFile.getSeqGroups();
       this.annotations = jsonFile.getAnnotations();
@@ -87,7 +94,8 @@ public class HtmlFile extends AlignFile implements ComplexAlignFile
       this.columnSelection = jsonFile.getColumnSelection();
     } catch (Exception e)
     {
-      e.printStackTrace();
+      errormessage = "Failed to extract data from HTML document.";
+      throw new IOException("Unexpected exception whilst extracting JSon from HTML.",e);
     }
   }
 
index db34c2f..7e02118 100644 (file)
@@ -1,10 +1,9 @@
 package jalview.io;
 
+import jalview.api.FeatureRenderer;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignViewport;
 import jalview.gui.AlignmentPanel;
-import jalview.gui.AnnotationPanel;
-import jalview.gui.FeatureRenderer;
 import jalview.gui.HTMLOptions;
 import jalview.math.AlignmentDimension;
 import jalview.util.MessageManager;
@@ -27,15 +26,12 @@ public class HtmlSvgOutput
   FeatureRenderer fr;
   AlignmentPanel ap;
 
-  AnnotationPanel annotationPanel;
 
   public HtmlSvgOutput(File file, AlignmentPanel ap)
   {
-
-      this.av = ap.av;
-      this.ap = ap;
-    av.setFeatureRenderer(new FeatureRenderer(ap));
-      this.annotationPanel = ap.getAnnotationPanel();
+    this.av = ap.av;
+    this.ap = ap;
+    fr = ap.cloneFeatureRenderer();
     generateHtmlSvgOutput(file);
   }
 
@@ -101,7 +97,7 @@ public class HtmlSvgOutput
 
       String titleSvgData = g1.getSVGDocument();
       String alignSvgData = g2.getSVGDocument();
-      String jsonData = JSONFile.getJSONData(av);
+      String jsonData = JSONFile.getJSONData(ap);
       String htmlData = getHtml(titleSvgData, alignSvgData, jsonData);
 
       out.write(htmlData.getBytes());
index d2b8412..ce70ea5 100644 (file)
 
 package jalview.io;
 
-import java.awt.Color;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-
-import jalview.api.AlignViewportI;
+import jalview.api.AlignmentViewPanel;
 import jalview.api.ComplexAlignFile;
 import jalview.api.FeatureRenderer;
 import jalview.api.FeaturesDisplayedI;
@@ -55,6 +43,19 @@ import jalview.json.binding.v1.SequencePojo;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
 
+import java.awt.Color;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+
 public class JSONFile extends AlignFile implements ComplexAlignFile
 {
   private ColourSchemeI colourScheme;
@@ -79,8 +80,6 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
 
   private FeatureRenderer fr;
 
-  private JSONExportSettings jsonExportSettings;
-
   private List<int[]> hiddenColumns;
 
   private ColumnSelection columnSelection;
@@ -107,41 +106,16 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
   @Override
   public void parse() throws IOException
   {
-    StringBuilder jsonStringBuilder = new StringBuilder();
-    String currentLine;
-    while ((currentLine = nextLine()) != null)
-    {
-      jsonStringBuilder.append(currentLine);
-    }
-    parse(jsonStringBuilder.toString());
+    parse(getReader());
 
   }
-
   @Override
   public String print()
   {
     String jsonOutput = null;
     try
     {
-      if (getJsonExportSettings() == null)
-      {
-        jsonExportSettings = new JSONExportSettings();
-        jsonExportSettings.setExportAnnotations(true);
-        jsonExportSettings.setExportGroups(true);
-        jsonExportSettings.setExportJalviewSettings(true);
-        jsonExportSettings.setExportSequenceFeatures(true);
-      }
-
       AlignmentPojo jsonAlignmentPojo = new AlignmentPojo();
-      if (getViewport() != null)
-      {
-        globalColorScheme = ColourSchemeProperty
-                .getColourName(getViewport()
-                .getGlobalColourScheme());
-        setDisplayedFeatures(getViewport().getFeaturesDisplayed());
-        showSeqFeatures = getViewport().isShowSequenceFeatures();
-        fr = getViewport().getFeatureRenderer();
-      }
 
       int count = 0;
       for (SequenceI seq : seqs)
@@ -159,44 +133,46 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         jsonAlignmentPojo.getSeqs().add(jsonSeqPojo);
       }
 
-      if (jsonExportSettings.isExportJalviewSettings())
+      jsonAlignmentPojo.setGlobalColorScheme(globalColorScheme);
+      jsonAlignmentPojo.getAppSettings().put("application", application);
+      jsonAlignmentPojo.getAppSettings().put("version", version);
+      jsonAlignmentPojo.getAppSettings().put("webStartUrl", webstartUrl);
+      jsonAlignmentPojo.getAppSettings().put("showSeqFeatures",
+              String.valueOf(showSeqFeatures));
+
+      String[] hiddenSections = getHiddenSections();
+      if (hiddenSections != null)
       {
-        jsonAlignmentPojo.setGlobalColorScheme(globalColorScheme);
-        jsonAlignmentPojo.getAppSettings().put("application", application);
-        jsonAlignmentPojo.getAppSettings().put("version", version);
-        jsonAlignmentPojo.getAppSettings().put("webStartUrl", webstartUrl);
-        jsonAlignmentPojo.getAppSettings().put("showSeqFeatures",
-                String.valueOf(showSeqFeatures));
-
-        String[] hiddenSections = exportHiddenSections();
-        if (hiddenSections != null && getViewport().isIncludeHiddenRegion())
+        if (hiddenSections[0] != null
+                && getExportSettings()
+                        .isExportHiddenColumns())
         {
-          if (hiddenSections[0] != null)
-          {
-            jsonAlignmentPojo.getAppSettings().put("hiddenCols",
-                    String.valueOf(hiddenSections[0]));
-          }
-          if (hiddenSections[1] != null)
-          {
-            jsonAlignmentPojo.getAppSettings().put("hiddenSeqs",
-                    String.valueOf(hiddenSections[1]));
-          }
+          jsonAlignmentPojo.getAppSettings().put("hiddenCols",
+                  String.valueOf(hiddenSections[0]));
+        }
+        if (hiddenSections[1] != null
+                && getExportSettings()
+                        .isExportHiddenSequences())
+        {
+          jsonAlignmentPojo.getAppSettings().put("hiddenSeqs",
+                  String.valueOf(hiddenSections[1]));
         }
       }
 
-      if (jsonExportSettings.isExportAnnotations())
+      if (getExportSettings().isExportAnnotations())
       {
         jsonAlignmentPojo
                 .setAlignAnnotation(annotationToJsonPojo(annotations));
       }
 
-      if (jsonExportSettings.isExportSequenceFeatures())
+      if (getExportSettings().isExportFeatures())
       {
         jsonAlignmentPojo
                 .setSeqFeatures(sequenceFeatureToJsonPojo(seqs, fr));
       }
 
-      if (jsonExportSettings.isExportGroups() && seqGroups != null
+      if (getExportSettings().isExportGroups()
+              && seqGroups != null
               && seqGroups.size() > 0)
       {
         for (SequenceGroup seqGrp : seqGroups)
@@ -231,7 +207,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     return jsonOutput;
   }
 
-  public String[] exportHiddenSections()
+  public String[] getHiddenSections()
   {
     String[] hiddenSections = new String[2];
     if (getViewport() == null)
@@ -363,7 +339,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
   }
 
   @SuppressWarnings("unchecked")
-  public JSONFile parse(String jsonAlignmentString)
+  public JSONFile parse(Reader jsonAlignmentString)
   {
     try
     {
@@ -614,42 +590,48 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     this.displayedFeatures = displayedFeatures;
   }
 
-  public JSONExportSettings getJsonExportSettings()
-  {
-    return jsonExportSettings;
-  }
-
-  public void setJsonExportSettings(JSONExportSettings jsonExportSettings)
+  @Override
+  public void configureForView(AlignmentViewPanel avpanel)
   {
-    this.jsonExportSettings = jsonExportSettings;
-  }
-
+    super.configureForView(avpanel);
+    if (isExporting())
+    {
+      setViewport(avpanel.getAlignViewport());
+      seqGroups = avpanel.getAlignment().getGroups();
+      setDisplayedFeatures(getViewport().getFeaturesDisplayed());
+      fr = avpanel.cloneFeatureRenderer();
 
-  public static String getJSONData(AlignViewportI av)
-  {
-    JSONFile jsonFile = new JSONFile();
-    jsonFile.setViewport(av);
-    jsonFile.seqGroups = av.getAlignment().getGroups();
-    jsonFile.setDisplayedFeatures(av.getFeaturesDisplayed());
+      for (SequenceI seq : getViewport().getAlignment().getSequences())
+      {
+        seqs.add(seq);
+      }
 
-    for (SequenceI seq : av.getAlignment().getSequences())
-    {
-      jsonFile.seqs.add(seq);
-    }
-  
-    // Add non auto calculated annotation to AlignFile
-    for (AlignmentAnnotation annot : av.getAlignment()
-            .getAlignmentAnnotation())
-    {
-      if (annot != null && !annot.autoCalculated)
+      // Add non auto calculated annotation to AlignFile
+      for (AlignmentAnnotation annot : getViewport().getAlignment()
+              .getAlignmentAnnotation())
       {
-        if (annot.label.equals("PDB.CATempFactor"))
+        if (annot != null && !annot.autoCalculated)
         {
-          continue;
+          if (annot.label.equals("PDB.CATempFactor"))
+          {
+            continue;
+          }
+          annotations.add(annot);
         }
-        jsonFile.annotations.add(annot);
       }
+
+      globalColorScheme = ColourSchemeProperty.getColourName(getViewport()
+              .getGlobalColourScheme());
+      setDisplayedFeatures(getViewport().getFeaturesDisplayed());
+      showSeqFeatures = getViewport().isShowSequenceFeatures();
     }
+  }
+
+
+  public static String getJSONData(AlignmentViewPanel av)
+  {
+    JSONFile jsonFile = new JSONFile();
+    jsonFile.configureForView(av);
     String jsonString = jsonFile.print();
     return jsonString;
   }
diff --git a/src/jalview/jbgui/GAlignExportSettings.java b/src/jalview/jbgui/GAlignExportSettings.java
new file mode 100644 (file)
index 0000000..2583b6b
--- /dev/null
@@ -0,0 +1,146 @@
+package jalview.jbgui;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+
+@SuppressWarnings("serial")
+public abstract class GAlignExportSettings extends JPanel
+{
+  protected JPanel hiddenRegionConfPanel = new JPanel();
+
+  protected JPanel complexExportPanel = new JPanel();
+
+  protected JPanel optionsPanel = new JPanel();
+
+  protected JPanel actionPanel = new JPanel();
+
+  protected BorderLayout hiddenRegionLayout = new BorderLayout();
+
+  protected BorderLayout complexExportLayout = new BorderLayout();
+
+  protected BorderLayout mainLayout = new BorderLayout();
+
+  protected JCheckBox chkAll = new JCheckBox("Check All");
+
+  protected JCheckBox chkHiddenSeqs = new JCheckBox(
+          "Export Hidden Sequences");
+
+  protected JCheckBox chkHiddenCols = new JCheckBox("Export Hidden Columns");
+
+  protected JCheckBox chkExportAnnots = new JCheckBox("Export Annotations");
+
+  protected JCheckBox chkExportFeats = new JCheckBox("Export Features");
+
+  protected JCheckBox chkExportGrps = new JCheckBox("Export Groups");
+
+  JButton btnOk = new JButton("Ok");
+
+  JButton btnCancel = new JButton("Cancel");
+
+  private boolean hasHiddenSeq, hasHiddenCols, isComplexAlignFile;
+
+  boolean isComplexFormat = false;
+
+  public GAlignExportSettings(boolean hasHiddenSeq, boolean hasHiddenCols,
+          String alignFileFormat)
+  {
+    this.hasHiddenSeq = hasHiddenSeq;
+    this.hasHiddenCols = hasHiddenCols;
+    String[] complexFormats =
+    { "JSON", "HTML" };
+
+    for (String format : complexFormats)
+    {
+      if (format.equalsIgnoreCase(alignFileFormat))
+      {
+        this.isComplexAlignFile = true;
+        break;
+      }
+    }
+
+    init();
+  }
+
+  public void init()
+  {
+    hiddenRegionConfPanel.setLayout(hiddenRegionLayout);
+    complexExportPanel.setLayout(complexExportLayout);
+    setLayout(mainLayout);
+
+    chkAll.addItemListener(new ItemListener()
+    {
+      public void itemStateChanged(ItemEvent e)
+      {
+        checkAllAction();
+      }
+    });
+
+    btnOk.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        ok_actionPerformed(e);
+      }
+    });
+
+    btnCancel.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        cancel_actionPerformed(e);
+      }
+    });
+
+    hiddenRegionConfPanel.add(chkAll, BorderLayout.NORTH);
+    hiddenRegionConfPanel.add(chkHiddenSeqs, BorderLayout.CENTER);
+    hiddenRegionConfPanel.add(chkHiddenCols, BorderLayout.SOUTH);
+    chkHiddenSeqs.setEnabled(hasHiddenSeq);
+    chkHiddenCols.setEnabled(hasHiddenCols);
+
+    complexExportPanel.add(chkExportAnnots, BorderLayout.NORTH);
+    complexExportPanel.add(chkExportFeats, BorderLayout.CENTER);
+    complexExportPanel.add(chkExportGrps, BorderLayout.SOUTH);
+
+    if (hasHiddenSeq || hasHiddenCols)
+    {
+      optionsPanel.add(hiddenRegionConfPanel);
+    }
+
+    if (isComplexAlignFile)
+    {
+      optionsPanel.add(complexExportPanel);
+    }
+    actionPanel.add(btnCancel);
+    actionPanel.add(btnOk);
+
+    add(optionsPanel, BorderLayout.NORTH);
+    add(actionPanel, BorderLayout.SOUTH);
+
+  }
+
+
+  
+  private void checkAllAction()
+  {
+    boolean isSelected = chkAll.isSelected();
+    chkHiddenSeqs.setSelected(chkHiddenSeqs.isEnabled() && isSelected);
+    chkHiddenCols.setSelected(chkHiddenCols.isEnabled() && isSelected);
+    chkExportAnnots.setSelected(isComplexAlignFile
+            && chkExportAnnots.isEnabled() && isSelected);
+    chkExportFeats.setSelected(isComplexAlignFile
+            && chkExportFeats.isEnabled() && isSelected);
+    chkExportGrps.setSelected(isComplexAlignFile
+            && chkExportGrps.isEnabled() && isSelected);
+  }
+
+  public abstract void ok_actionPerformed(ActionEvent e);
+
+  public abstract void cancel_actionPerformed(ActionEvent e);
+}
index 45a5957..0b2e6be 100755 (executable)
@@ -20,7 +20,7 @@
  */
 package jalview.jbgui;
 
-import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
 import jalview.io.FormatAdapter;
 import jalview.util.MessageManager;
 
@@ -211,7 +211,7 @@ public class GFinder extends JPanel
         public void run()
         {
           String str = textfield.getText();
-          Alignment al = null;
+          AlignmentI al = null;
           try
           {
             al = new FormatAdapter().readFile(str, "Paste", "FASTA");
index 399347b..5617bcf 100644 (file)
  */
 package jalview.viewmodel;
 
-import java.awt.Color;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.Deque;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
 import jalview.analysis.Conservation;
 import jalview.api.AlignCalcManagerI;
@@ -67,6 +56,17 @@ import jalview.workers.ComplementConsensusThread;
 import jalview.workers.ConsensusThread;
 import jalview.workers.StrucConsensusThread;
 
+import java.awt.Color;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.Deque;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * base class holding visualization and analysis attributes and common logic for
  * an active alignment view displayed in the GUI
@@ -1055,18 +1055,12 @@ public abstract class AlignmentViewport implements AlignViewportI,
     // hasHiddenColumns = colSel.hasHiddenColumns();
   }
 
-  protected boolean hasHiddenRows = false;
-
   @Override
   public boolean hasHiddenRows()
   {
-    return hasHiddenRows;
+    return alignment.getHiddenSequences().getSize() > 0;
   }
 
-  public void setHasHiddenRows(boolean hasHiddenRows)
-  {
-    this.hasHiddenRows = hasHiddenRows;
-  }
 
   protected SequenceGroup selectionGroup;
 
@@ -1304,7 +1298,6 @@ public abstract class AlignmentViewport implements AlignViewportI,
         setSequenceAnnotationsVisible(seq, true);
       }
 
-      hasHiddenRows = false;
       hiddenRepSequences = null;
 
       firePropertyChange("alignment", null, alignment.getSequences());
@@ -1332,12 +1325,6 @@ public abstract class AlignmentViewport implements AlignViewportI,
         selectionGroup.addSequence(seq, false);
         setSequenceAnnotationsVisible(seq, true);
       }
-      // JBPNote: refactor: only update flag if we modified visiblity (used to
-      // do this regardless)
-      if (alignment.getHiddenSequences().getSize() < 1)
-      {
-        hasHiddenRows = false;
-      }
       firePropertyChange("alignment", null, alignment.getSequences());
       sendSelection();
     }
@@ -1366,7 +1353,6 @@ public abstract class AlignmentViewport implements AlignViewportI,
         alignment.getHiddenSequences().hideSequence(seq[i]);
         setSequenceAnnotationsVisible(seq[i], false);
       }
-      hasHiddenRows = true;
       firePropertyChange("alignment", null, alignment.getSequences());
     }
   }
index 45f4f7a..40e2193 100644 (file)
@@ -23,6 +23,7 @@ package jalview.ws.dbsources;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
+
 import jalview.ws.seqfetcher.DbSourceProxyImpl;
 
 public abstract class EbiFileRetrievedProxy extends DbSourceProxyImpl
@@ -36,7 +37,9 @@ public abstract class EbiFileRetrievedProxy extends DbSourceProxyImpl
   public StringBuffer getRawRecords()
   {
     if (file == null)
+    {
       return null;
+    }
     StringBuffer bf = null;
     try
     {
index 6a871ee..4c8f3ce 100644 (file)
  */
 package jalview.ws.dbsources;
 
-import java.io.File;
-import java.io.FileReader;
-import java.io.Reader;
-import java.util.Vector;
-
-import org.exolab.castor.xml.Unmarshaller;
-
-import com.stevesoft.pat.Regex;
-
-import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.DBRefSource;
@@ -42,6 +32,15 @@ import jalview.ws.ebi.EBIFetchClient;
 import jalview.ws.seqfetcher.DbSourceProxy;
 import jalview.ws.seqfetcher.DbSourceProxyImpl;
 
+import java.io.File;
+import java.io.FileReader;
+import java.io.Reader;
+import java.util.Vector;
+
+import org.exolab.castor.xml.Unmarshaller;
+
+import com.stevesoft.pat.Regex;
+
 /**
  * @author JimP
  * 
@@ -156,7 +155,7 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
     {
       queries = queries.toUpperCase().replaceAll(
               "(UNIPROT\\|?|UNIPROT_|UNIREF\\d+_|UNIREF\\d+\\|?)", "");
-      Alignment al = null;
+      AlignmentI al = null;
       EBIFetchClient ebi = new EBIFetchClient();
       // uniprotxml parameter required since december 2007
       // uniprotkb dbname changed introduced december 2008
@@ -245,7 +244,7 @@ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy
    * @param entries
    *          a list of n uniprot entries to be analysed.
    */
-  public void addUniprotXrefs(Alignment al, Vector<UniprotEntry> entries)
+  public void addUniprotXrefs(AlignmentI al, Vector<UniprotEntry> entries)
   {
     final String dbVersion = getDbVersion();
 
index 69d0ae4..62566cf 100644 (file)
@@ -24,6 +24,7 @@ import jalview.analysis.AlignSeq;
 import jalview.bin.Cache;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentView;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.SequenceI;
@@ -103,7 +104,7 @@ class JPredThread extends JWS1Thread implements WSClientI
       {
         return null;
       }
-      Alignment al = null;
+      AlignmentI al = null;
       ColumnSelection alcsel = null;
       int FirstSeq = -1; // the position of the query sequence in Alignment al
 
@@ -279,7 +280,7 @@ class JPredThread extends JWS1Thread implements WSClientI
      * @param al
      * @param profileseq
      */
-    private void alignToProfileSeq(Alignment al, SequenceI profileseq)
+    private void alignToProfileSeq(AlignmentI al, SequenceI profileseq)
     {
       char gc = al.getGapCharacter();
       int[] gapMap = profileseq.gapMap();
index 719027f..0785dfa 100644 (file)
@@ -20,7 +20,7 @@
  */
 package jalview.ws.seqfetcher;
 
-import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
 import jalview.io.FormatAdapter;
 import jalview.io.IdentifyFile;
 
@@ -118,9 +118,9 @@ public abstract class DbSourceProxyImpl implements DbSourceProxy
    * @return null or a valid alignment
    * @throws Exception
    */
-  protected Alignment parseResult(String result) throws Exception
+  protected AlignmentI parseResult(String result) throws Exception
   {
-    Alignment sequences = null;
+    AlignmentI sequences = null;
     String format = new IdentifyFile().Identify(result, "Paste");
     if (FormatAdapter.isValidFormat(format))
     {
index 8c271b3..186ac03 100644 (file)
@@ -1,9 +1,9 @@
 package MCview;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import static org.testng.AssertJUnit.assertEquals;
 
-import org.junit.Test;
+import org.testng.Assert;
+import org.testng.annotations.Test;
 
 public class AtomTest
 {
@@ -54,7 +54,7 @@ public class AtomTest
     {
       new Atom(
               "ATOM    34N  NE2 GLN A  48      22.290   8.595  17.680  1.00 14.30           N");
-      fail("Expected exception");
+      Assert.fail("Expected exception");
     } catch (NumberFormatException e)
     {
       // expected
index 333bfce..6f701e2 100644 (file)
@@ -1,8 +1,8 @@
 package MCview;
 
-import static org.junit.Assert.assertEquals;
+import static org.testng.AssertJUnit.assertEquals;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class BondTest
 {
index 5be43b3..0df7851 100644 (file)
@@ -1,14 +1,9 @@
 package MCview;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
-import java.awt.Color;
-import java.util.Vector;
-
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.analysis.AlignSeq;
 import jalview.datamodel.AlignmentAnnotation;
@@ -18,9 +13,15 @@ import jalview.datamodel.SequenceI;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.TaylorColourScheme;
 
+import java.awt.Color;
+import java.util.Vector;
+
+import org.testng.annotations.Test;
+
 public class PDBChainTest
 {
   PDBChain c = new PDBChain("1GAQ", "A");
+
   Atom a1 = new Atom(1f, 2f, 3f);
 
   Atom a2 = new Atom(5f, 6f, 4f);
index 5d69a00..a4fd286 100644 (file)
@@ -1,10 +1,11 @@
 package MCview;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
@@ -15,8 +16,7 @@ import jalview.io.AppletFormatAdapter;
 
 import java.io.IOException;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class PDBfileTest
 {
@@ -247,8 +247,8 @@ public class PDBfileTest
    * 
    * @throws IOException
    */
-  @Test
-  @Ignore
+
+  @Test(enabled = false)
   public void testParse_withAnnotate3D() throws IOException
   {
     // TODO requires a mock for Annotate3D processing
index ed98c5b..b5ca0ed 100644 (file)
@@ -1,11 +1,11 @@
 package MCview;
 
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
 
 import java.util.Vector;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class ResidueTest
 {
index d91502e..ea07aa2 100644 (file)
@@ -1,11 +1,11 @@
 package com.stevesoft.pat;
 
-import static org.junit.Assert.assertEquals;
+import static org.testng.AssertJUnit.assertEquals;
 
 import java.io.IOException;
 import java.io.StringWriter;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 /**
  * Test class refactored from RegexWriter main method
index 788e742..eb496bb 100644 (file)
@@ -1,13 +1,14 @@
 
 package jalview.analysis;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
+
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceI;
 
 import java.util.Hashtable;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class AAFrequencyTest
 {
index c34bb68..606a840 100644 (file)
@@ -1,8 +1,14 @@
 package jalview.analysis;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.SequenceI;
+import jalview.io.AppletFormatAdapter;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -12,14 +18,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.junit.Before;
-import org.junit.Test;
-
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.Annotation;
-import jalview.datamodel.SequenceI;
-import jalview.io.AppletFormatAdapter;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class AlignmentAnnotationUtilsTest
 {
@@ -118,7 +118,7 @@ public class AlignmentAnnotationUtilsTest
    * 
    * @throws IOException
    */
-  @Before
+  @BeforeMethod
   public void setUp() throws IOException
   {
     alignment = new jalview.io.FormatAdapter().readFile(TEST_DATA,
index 02955f1..d44a6bc 100644 (file)
  */
 package jalview.analysis;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.datamodel.AlignedCodonFrame;
 import jalview.datamodel.Alignment;
@@ -55,7 +43,20 @@ import jalview.io.FormatAdapter;
 import jalview.util.MapList;
 import jalview.util.MappingUtils;
 
-public class AlignmentUtilsTests 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.testng.annotations.Test;
+
+public class AlignmentUtilsTests
 {
   // @formatter:off
   private static final String TEST_DATA = 
@@ -264,7 +265,7 @@ public class AlignmentUtilsTests
    */
   protected AlignmentI loadAlignment(final String data, String format) throws IOException
   {
-    Alignment a = new FormatAdapter().readFile(data,
+    AlignmentI a = new FormatAdapter().readFile(data,
             AppletFormatAdapter.PASTE, format);
     a.setDataset(null);
     return a;
index 239eb4c..8c3489b 100644 (file)
@@ -1,6 +1,7 @@
 package jalview.analysis;
 
-import static org.junit.Assert.assertEquals;
+import static org.testng.AssertJUnit.assertEquals;
+
 import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
@@ -11,8 +12,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class AnnotationSorterTest
 {
@@ -29,7 +30,7 @@ public class AnnotationSorterTest
   /*
    * Set up 6 sequences and 7 annotations.
    */
-  @Before
+  @BeforeMethod
   public void setUp()
   {
     al = buildAlignment(NUM_SEQS);
index 0f235fb..e787ac3 100644 (file)
@@ -1,11 +1,11 @@
 package jalview.analysis;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
 
 import java.util.Arrays;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class CodingUtilsTest
 {
index 35606f0..095fc05 100644 (file)
@@ -1,12 +1,12 @@
 package jalview.analysis;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertSame;
 
 import jalview.datamodel.DBRefEntry;
 
+import org.testng.annotations.Test;
+
 public class CrossRefTest
 {
   @Test
index 01ed183..6371315 100644 (file)
@@ -1,8 +1,9 @@
 package jalview.analysis;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.api.AlignViewportI;
 import jalview.datamodel.AlignedCodon;
 import jalview.datamodel.Alignment;
@@ -14,7 +15,7 @@ import jalview.io.FormatAdapter;
 
 import java.io.IOException;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class DnaTest
 {
index 5c7a305..df04243 100644 (file)
@@ -10,8 +10,8 @@ import jalview.datamodel.SequenceI;
 import java.util.ArrayList;
 import java.util.Arrays;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
 
 public class GroupingTest
 {
@@ -64,17 +64,17 @@ public class GroupingTest
             alignment.getSequencesArray(), cs,
             Arrays.asList(new SequenceGroup[]
             { sg1, sg2 }));
-    Assert.assertEquals(seqgroupsString.length, seqgroupsColSel.length);
+    AssertJUnit.assertEquals(seqgroupsString.length, seqgroupsColSel.length);
     for (int p = 0; p < seqgroupsString.length; p++)
     {
-      Assert.assertEquals(seqgroupsString[p].getName(),
+      AssertJUnit.assertEquals(seqgroupsString[p].getName(),
               seqgroupsColSel[p].getName());
-      Assert.assertArrayEquals(
+      AssertJUnit.assertArrayEquals(
               seqgroupsString[p].getSequencesInOrder(alignment),
               seqgroupsColSel[p].getSequencesInOrder(alignment));
       if (seqgroupsString[p].getSequences().contains(s2))
       {
-        Assert.assertTrue(seqgroupsString[p].getSize() == 2);
+        AssertJUnit.assertTrue(seqgroupsString[p].getSize() == 2);
       }
     }
   }
index a01d255..90faedc 100644 (file)
@@ -1,18 +1,18 @@
 package jalview.analysis;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
 
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceI;
 
+import java.util.List;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
 public class ParsePropertiesTest
 {
 
@@ -23,7 +23,7 @@ public class ParsePropertiesTest
   /**
    * Construct an alignment with 4 sequences with varying description format
    */
-  @Before
+  @BeforeMethod
   public void setUp()
   {
     SequenceI[] seqs = new SequenceI[]
index 4956bd8..81bcf86 100644 (file)
  */
 package jalview.analysis;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-import java.io.PrintStream;
-
-import org.junit.Before;
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
 
 import jalview.datamodel.Mapping;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceI;
 
+import java.io.PrintStream;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
 /**
  * Test the alignment -> Mapping routines
  * 
@@ -46,7 +46,7 @@ public class TestAlignSeq
   /**
    * @throws java.lang.Exception
    */
-  @Before
+  @BeforeMethod
   public void setUp() throws Exception
   {
     s1 = new Sequence("Seq1", "ASDFAQQQRRRSSS");
index 1dbaa4a..5ab0bb0 100644 (file)
@@ -7,8 +7,8 @@ import jalview.gui.AlignFrame;
 import jalview.io.FileLoader;
 import jalview.io.FormatAdapter;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
 
 public class FeatureScoreModelTest
 {
@@ -29,8 +29,8 @@ public class FeatureScoreModelTest
     AlignFrame alf = new FileLoader(false).LoadFileWaitTillLoaded(alntestFile,
             FormatAdapter.PASTE);
     AlignmentI al = alf.getViewport().getAlignment();
-    Assert.assertEquals(4, al.getHeight());
-    Assert.assertEquals(5, al.getWidth());
+    AssertJUnit.assertEquals(4, al.getHeight());
+    AssertJUnit.assertEquals(5, al.getWidth());
     for (int i = 0; i < 4; i++)
     {
       SequenceI ds = al.getSequenceAt(i).getDatasetSequence();
@@ -55,18 +55,18 @@ public class FeatureScoreModelTest
     alf.getFeatureRenderer().setVisible("sf2");
     alf.getFeatureRenderer().setVisible("sf3");
     alf.getFeatureRenderer().findAllFeatures(true);
-    Assert.assertEquals("Number of feature types", 3, alf
+    AssertJUnit.assertEquals("Number of feature types", 3, alf
             .getFeatureRenderer().getDisplayedFeatureTypes().length);
-    Assert.assertTrue(alf.getCurrentView().areFeaturesDisplayed());
+    AssertJUnit.assertTrue(alf.getCurrentView().areFeaturesDisplayed());
     FeatureScoreModel fsm = new FeatureScoreModel();
-    Assert.assertTrue(fsm.configureFromAlignmentView(alf.getCurrentView()
+    AssertJUnit.assertTrue(fsm.configureFromAlignmentView(alf.getCurrentView()
             .getAlignPanel()));
     alf.selectAllSequenceMenuItem_actionPerformed(null);
     float[][] dm = fsm.findDistances(alf.getViewport().getAlignmentView(
             true));
-    Assert.assertTrue("FER1_MESCR should be identical with RAPSA (2)",
+    AssertJUnit.assertTrue("FER1_MESCR should be identical with RAPSA (2)",
             dm[0][2] == 0f);
-    Assert.assertTrue(
+    AssertJUnit.assertTrue(
             "FER1_MESCR should be further from SPIOL (1) than it is from RAPSA (2)",
             dm[0][1] > dm[0][2]);
 
index ec0b160..d9d3bb3 100644 (file)
  */
 package jalview.bin;
 
-import static org.junit.Assert.*;
-
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.testng.Assert;
+import org.testng.AssertJUnit;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
 
 public class CommandLineOperations
 {
@@ -131,16 +131,17 @@ public class CommandLineOperations
         System.out.println("Testing with Headless argument: '" + harg
                 + "'\n");
         Worker worker = jalviewDesktopRunner(withAwt, cmd, 9000);
-        assertTrue("Didn't create an output EPS file.[" + harg + "]",
-                new File("test_uniref50_out.eps").exists());
-        assertTrue("Didn't create an EPS file with any content[" + harg
-                + "]", new File("test_uniref50_out.eps").length() > 4096);
+        AssertJUnit.assertTrue("Didn't create an output EPS file.[" + harg
+                + "]", new File("test_uniref50_out.eps").exists());
+        AssertJUnit.assertTrue(
+                "Didn't create an EPS file with any content[" + harg + "]",
+                new File("test_uniref50_out.eps").length() > 4096);
         if (worker.exit == null)
         {
           worker.interrupt();
           Thread.currentThread().interrupt();
           worker.process.destroy();
-          fail("Jalview did not exit after EPS generation (try running test again to verify - timeout at 9000ms). ["
+          Assert.fail("Jalview did not exit after EPS generation (try running test again to verify - timeout at 9000ms). ["
                   + harg + "]");
         }
       } while (!withAwt);
index 6ea05e6..6c570d5 100644 (file)
@@ -1,7 +1,8 @@
 package jalview.commands;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertSame;
+
 import jalview.commands.EditCommand.Action;
 import jalview.commands.EditCommand.Edit;
 import jalview.datamodel.Alignment;
@@ -11,9 +12,8 @@ import jalview.datamodel.SequenceI;
 
 import java.util.Map;
 
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 /**
  * Unit tests for EditCommand
@@ -30,7 +30,7 @@ public class EditCommandTest
 
   private Alignment al;
 
-  @Before
+  @BeforeMethod
   public void setUp()
   {
     testee = new EditCommand();
@@ -102,8 +102,7 @@ public class EditCommandTest
   /**
    * Test a Paste action, where this adds sequences to an alignment.
    */
-  @Test
-  @Ignore
+  @Test(enabled = false)
   // TODO fix so it works
   public void testPaste_addToAlignment()
   {
index 0e24bf6..63f6772 100644 (file)
@@ -1,12 +1,13 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
+
 import jalview.util.MapList;
 
 import java.util.Arrays;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class AlignedCodonFrameTest
 {
index 671c51d..65fe4bf 100644 (file)
@@ -1,13 +1,14 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.fail;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+
 import jalview.util.MapList;
 
 import java.util.Iterator;
 
-import org.junit.Test;
+import org.testng.Assert;
+import org.testng.annotations.Test;
 
 /**
  * Unit tests for Mapping$AlignedCodonIterator
@@ -95,7 +96,7 @@ public class AlignedCodonIteratorTest
     try
     {
       codon = codons.next();
-      fail("expected exception");
+      Assert.fail("expected exception");
     } catch (IncompleteCodonException e)
     {
       // expected
index 60368b1..afa6169 100644 (file)
@@ -1,10 +1,10 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class AlignedCodonTest
 {
index 7c1aa81..4c9eabe 100644 (file)
@@ -1,13 +1,13 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
 
 import jalview.analysis.AlignSeq;
 import jalview.io.AppletFormatAdapter;
 
+import org.testng.annotations.Test;
+
 public class AlignmentAnnotationTests
 {
   @Test
index df98af9..036f2cf 100644 (file)
@@ -1,8 +1,9 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.io.AppletFormatAdapter;
 import jalview.io.FormatAdapter;
 import jalview.util.MapList;
@@ -10,8 +11,8 @@ import jalview.util.MapList;
 import java.io.IOException;
 import java.util.Iterator;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 /**
  * Unit tests for Alignment datamodel.
@@ -68,7 +69,7 @@ public class AlignmentTest
   protected AlignmentI loadAlignment(final String data, String format)
           throws IOException
   {
-    Alignment a = new FormatAdapter().readFile(data,
+    AlignmentI a = new FormatAdapter().readFile(data,
             AppletFormatAdapter.PASTE, format);
     a.setDataset(null);
     return a;
@@ -78,7 +79,7 @@ public class AlignmentTest
    * Read in Stockholm format test data including secondary structure
    * annotations.
    */
-  @Before
+  @BeforeMethod
   public void setUp() throws IOException
   {
     al = loadAlignment(TEST_DATA, "STH");
index 97ef079..2ffebe0 100644 (file)
@@ -1,10 +1,10 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertEquals;
+import static org.testng.AssertJUnit.assertEquals;
 
 import java.util.List;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class ColumnSelectionTest
 {
index 38c7f51..b5549f0 100644 (file)
@@ -1,10 +1,11 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.util.MapList;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class DBRefEntryTest
 {
index fe2ff59..378d708 100644 (file)
@@ -1,12 +1,12 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertEquals;
+import static org.testng.AssertJUnit.assertEquals;
 
-import java.util.Arrays;
+import jalview.util.MapList;
 
-import org.junit.Test;
+import java.util.Arrays;
 
-import jalview.util.MapList;
+import org.testng.annotations.Test;
 
 /**
  * Test class refactored from main method
index 01fb4a1..093702f 100644 (file)
@@ -1,20 +1,20 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertTrue;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class PDBEntryTest
 {
 
-  @Before
+  @BeforeMethod
   public void setUp() throws Exception
   {
   }
 
-  @After
+  @AfterMethod
   public void tearDown() throws Exception
   {
   }
index 15b0314..7f099c8 100644 (file)
@@ -1,8 +1,8 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertEquals;
+import static org.testng.AssertJUnit.assertEquals;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class SearchResultsTest
 {
index fc0cb0e..b8748b6 100644 (file)
@@ -1,9 +1,9 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 /**
  * Unit tests for SeqCigar
@@ -125,6 +125,8 @@ public class SeqCigarTest
    *          String
    * @return String
    */
+
+
   protected void testCigar_string(Sequence seq, String ex_cs_gapped)
   {
     SeqCigar c_sgapped = new SeqCigar(seq);
@@ -133,6 +135,7 @@ public class SeqCigarTest
             cs_gapped);
   }
 
+
   protected void testSeqRecovery(SeqCigar gen_sgapped,
           SequenceI s_gapped)
   {
index 5e73bbc..b216b13 100644 (file)
@@ -1,21 +1,21 @@
 package jalview.datamodel;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
 
 import java.util.Arrays;
 import java.util.List;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class SequenceTest
 {
   SequenceI seq;
 
-  @Before
+  @BeforeMethod
   public void setUp()
   {
     seq = new Sequence("FER1", "AKPNGVL");
index e89245c..2d9b713 100644 (file)
@@ -1,16 +1,16 @@
 package jalview.datamodel.xdb.embl;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.datamodel.DBRefEntry;
 
 import java.io.StringReader;
 import java.util.Vector;
 
-import org.junit.Test;
-
-import jalview.datamodel.DBRefEntry;
+import org.testng.annotations.Test;
 
 public class EmblFileTest
 {
index ae50bdf..0627217 100644 (file)
  */
 package jalview.ext.jmol;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Vector;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import MCview.PDBfile;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.bin.Cache;
 import jalview.datamodel.Alignment;
@@ -38,6 +31,13 @@ import jalview.gui.AlignFrame;
 import jalview.io.AppletFormatAdapter;
 import jalview.io.FileLoader;
 
+import java.util.Vector;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import MCview.PDBfile;
+
 /**
  * @author jimp
  * 
@@ -50,7 +50,7 @@ public class PDBFileWithJmolTest
   // "./examples/DNMT1_MOUSE.pdb"
   // };
 
-  @Before
+  @BeforeMethod
   public void setUp()
   {
     Cache.applicationProperties.setProperty("STRUCT_FROM_PDB",
index 3365c52..d8582af 100644 (file)
  */
 package jalview.ext.paradise;
 
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceI;
+import jalview.io.FastaFile;
+import jalview.io.FormatAdapter;
 
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.Reader;
 import java.util.Iterator;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.testng.Assert;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
 
 import MCview.PDBfile;
-import compbio.util.FileUtil;
 
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.SequenceI;
-import jalview.io.FastaFile;
-import jalview.io.FormatAdapter;
+import compbio.util.FileUtil;
 
 public class TestAnnotate3D
 {
 
-  @Test
+  @Test(enabled = false)
   public void test1GIDbyId() throws Exception
   {
     // use same ID as standard tests given at
@@ -51,7 +53,7 @@ public class TestAnnotate3D
     testRNAMLcontent(ids, null);
   }
 
-  @Test
+  @Test(enabled = false)
   public void testIdVsContent2GIS() throws Exception
   {
     Iterator<Reader> ids = Annotate3D.getRNAMLForPDBId("2GIS");
@@ -95,7 +97,7 @@ public class TestAnnotate3D
    * 
    * @throws Exception
    */
-  @Test
+  @Test(enabled = false)
   public void testPDBfileVsRNAML() throws Exception
   {
     PDBfile pdbf = new PDBfile(true, false, true, "examples/2GIS.pdb",
@@ -109,6 +111,7 @@ public class TestAnnotate3D
     testRNAMLcontent(readers, pdbf);
   }
 
+  @Test(enabled = false)
   private void testRNAMLcontent(Iterator<Reader> readers, PDBfile pdbf)
           throws Exception
   {
@@ -152,7 +155,7 @@ public class TestAnnotate3D
             }
             if (struseq == null)
             {
-              Assert.fail("Couldn't find this sequence in original input:\n"
+              AssertJUnit.fail("Couldn't find this sequence in original input:\n"
                       + new FastaFile().print(new SequenceI[]
                       { sq })
                       + "\n\nOriginal input:\n"
index 7dfbba1..e8b6b19 100644 (file)
@@ -1,7 +1,7 @@
 package jalview.ext.rbvi.chimera;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
 
 import java.awt.Color;
 import java.util.Arrays;
@@ -9,7 +9,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class ChimeraCommandsTest
 {
index de7235b..d40a43d 100644 (file)
@@ -1,9 +1,9 @@
 package jalview.ext.rbvi.chimera;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 import ext.edu.ucsf.rbvi.strucviz2.ChimeraManager;
 import ext.edu.ucsf.rbvi.strucviz2.StructureManager;
index 807d7bb..59a0fdb 100644 (file)
@@ -1,10 +1,6 @@
 package jalview.ext.rbvi.chimera;
 
-import static org.junit.Assert.assertTrue;
-
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.api.structures.JalviewStructureDisplayI;
 import jalview.datamodel.SequenceI;
@@ -13,6 +9,10 @@ import jalview.gui.StructureViewer;
 import jalview.gui.StructureViewer.ViewerType;
 import jalview.io.FormatAdapter;
 
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
 public class JalviewChimeraView
 {
 
index ac7d84d..a6e7ea0 100644 (file)
@@ -1,10 +1,7 @@
 package jalview.gui;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-
-import org.junit.Before;
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertSame;
 
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
@@ -13,13 +10,16 @@ import jalview.datamodel.PDBEntry.Type;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceI;
 
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
 public class AlignViewportTest
 {
 
   AlignmentI al;
   AlignViewport testee;
 
-  @Before
+  @BeforeMethod
   public void setUp()
   {
     SequenceI seq1 = new Sequence("Seq1", "ABC");
index 33ffd32..3f56985 100644 (file)
@@ -1,8 +1,18 @@
 package jalview.gui;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
+import jalview.bin.Cache;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.io.AppletFormatAdapter;
+import jalview.util.MessageManager;
 
 import java.awt.BorderLayout;
 import java.awt.Checkbox;
@@ -16,18 +26,8 @@ import java.util.List;
 import javax.swing.JButton;
 import javax.swing.JPanel;
 
-import org.junit.Before;
-import org.junit.Test;
-
-import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
-import jalview.bin.Cache;
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.Annotation;
-import jalview.datamodel.SequenceGroup;
-import jalview.datamodel.SequenceI;
-import jalview.io.AppletFormatAdapter;
-import jalview.util.MessageManager;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 /**
  * Unit tests for AnnotationChooser
@@ -52,7 +52,7 @@ public class AnnotationChooserTest
 
   AlignFrame af;
 
-  @Before
+  @BeforeMethod
   public void setUp() throws IOException
   {
     // pin down annotation sort order for test
index 338a48f..646016c 100644 (file)
@@ -4,7 +4,7 @@ import java.awt.Canvas;
 import java.awt.Font;
 import java.awt.FontMetrics;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class FontChooserTest
 {
index e4068d7..f280797 100644 (file)
@@ -1,6 +1,7 @@
 package jalview.gui;
 
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.gui.Help.HelpId;
 
 import java.net.URL;
@@ -9,7 +10,7 @@ import javax.help.HelpSet;
 import javax.help.HelpSetException;
 import javax.help.Map;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class HelpTest
 {
index b46a52f..4a17622 100644 (file)
@@ -35,10 +35,9 @@ import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.JTextArea;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
 
 public class JAL1353bugdemo
 {
@@ -55,9 +54,7 @@ public class JAL1353bugdemo
 
   volatile boolean finish = false;
 
-  @Test
-  @Ignore
-  // comment out @Ignore to enable this test
+  @Test(enabled = false)
   public void test()
   {
     Cache.initLogger();
index 11e6ea5..1a16053 100644 (file)
@@ -1,10 +1,10 @@
 package jalview.gui;
 
-import static org.junit.Assert.assertEquals;
+import static org.testng.AssertJUnit.assertEquals;
 
 import javax.swing.JScrollBar;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class JvSwingUtilsTest
 {
index 4595ad1..3a1c554 100644 (file)
@@ -1,24 +1,24 @@
 package jalview.gui;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
 
 import javax.swing.JInternalFrame;
 import javax.swing.JTextField;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class PDBSearchPanelTest
 {
 
-  @Before
+  @BeforeMethod
   public void setUp() throws Exception
   {
   }
 
-  @After
+  @AfterMethod
   public void tearDown() throws Exception
   {
   }
index 1da7c8c..adbf385 100644 (file)
@@ -1,8 +1,9 @@
 package jalview.gui;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.datamodel.Alignment;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceI;
@@ -14,20 +15,20 @@ import java.util.Map;
 
 import javax.swing.JPanel;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class PaintRefresherTest
 {
   // TODO would prefer PaintRefresher to be a single rather than static
-  @Before
+  @BeforeMethod
   public void setUp()
   {
     PaintRefresher.components.clear();
   }
 
-  @After
+  @AfterMethod
   public void tearDown()
   {
     PaintRefresher.components.clear();
index e1f0708..ba1b275 100644 (file)
@@ -1,8 +1,15 @@
 package jalview.gui;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.SequenceI;
+import jalview.io.AppletFormatAdapter;
+import jalview.io.FormatAdapter;
 
 import java.awt.Component;
 import java.io.IOException;
@@ -14,15 +21,8 @@ import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
 import javax.swing.JSeparator;
 
-import org.junit.Before;
-import org.junit.Test;
-
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.Annotation;
-import jalview.datamodel.SequenceI;
-import jalview.io.AppletFormatAdapter;
-import jalview.io.FormatAdapter;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class PopupMenuTest
 {
@@ -41,7 +41,7 @@ public class PopupMenuTest
 
   PopupMenu testee = null;
 
-  @Before
+  @BeforeMethod
   public void setUp() throws IOException
   {
     alignment = new FormatAdapter().readFile(TEST_DATA,
@@ -130,7 +130,7 @@ public class PopupMenuTest
 
     testee.configureReferenceAnnotationsMenu(menu, seqs);
     assertTrue(menu.isEnabled());
-    String expected = "<html><table width=350 border=0><tr><td>Add annotations for<br/>JMOL/secondary structure<br/>PBD/Temp</td></tr></table></html>";
+    String expected = "<html><table width=350 border=0><tr><td align=justify>Add annotations for<br/>JMOL/secondary structure<br/>PBD/Temp</td></tr></table></html>";
     assertEquals(expected, menu.getToolTipText());
   }
 
@@ -151,7 +151,7 @@ public class PopupMenuTest
 
     testee.configureReferenceAnnotationsMenu(menu, seqs);
     assertTrue(menu.isEnabled());
-    String expected = "<html><table width=350 border=0><tr><td>Add annotations for<br/>JMOL/secondary structure<br/>PBD/Temp</td></tr></table></html>";
+    String expected = "<html><table width=350 border=0><tr><td align=justify>Add annotations for<br/>JMOL/secondary structure<br/>PBD/Temp</td></tr></table></html>";
     assertEquals(expected, menu.getToolTipText());
   }
 
index 2d3db68..281ed2d 100644 (file)
@@ -1,8 +1,7 @@
 package jalview.gui;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
 
 import java.awt.Component;
 import java.awt.FlowLayout;
@@ -11,7 +10,8 @@ import java.awt.GridLayout;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 
-import org.junit.Test;
+import org.testng.Assert;
+import org.testng.annotations.Test;
 
 public class ProgressBarTest
 {
@@ -26,7 +26,7 @@ public class ProgressBarTest
     try
     {
       new ProgressBar(null, null);
-      fail("Expected exception");
+      Assert.fail("Expected exception");
     } catch (NullPointerException e)
     {
       // expected
@@ -41,7 +41,7 @@ public class ProgressBarTest
     try
     {
       new ProgressBar(statusPanel, null);
-      fail("expected exception");
+      Assert.fail("expected exception");
     } catch (IllegalArgumentException e)
     {
       // expected
index 3f8b96a..64d15b8 100644 (file)
@@ -1,6 +1,7 @@
 package jalview.gui;
 
-import static org.junit.Assert.assertEquals;
+import static org.testng.AssertJUnit.assertEquals;
+
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Sequence;
@@ -9,7 +10,7 @@ import jalview.schemes.ZappoColourScheme;
 
 import java.awt.Color;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class SequenceRendererTest
 {
index 1e73d3e..44b51f2 100644 (file)
@@ -1,7 +1,8 @@
 package jalview.gui;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.Sequence;
@@ -9,15 +10,15 @@ import jalview.datamodel.SequenceI;
 
 import java.util.Vector;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class StructureChooserTest
 {
   Sequence seq;
 
-  @Before
+  @BeforeMethod
   public void setUp() throws Exception
   {
     seq = new Sequence("PDB|4kqy|4KQY|A", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 1,
@@ -39,7 +40,7 @@ public class StructureChooserTest
     seq.setPDBId(pdbIds);
   }
 
-  @After
+  @AfterMethod
   public void tearDown() throws Exception
   {
     seq = null;
index ef88ca5..1c6a489 100644 (file)
@@ -1,16 +1,8 @@
 package jalview.io;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.bin.Cache;
 import jalview.datamodel.AlignmentAnnotation;
@@ -23,6 +15,14 @@ import jalview.gui.Desktop;
 import jalview.structure.StructureMapping;
 import jalview.structure.StructureSelectionManager;
 
+import java.io.File;
+
+import org.junit.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
 public class AnnotatedPDBFileInputTest
 {
 
@@ -32,7 +32,7 @@ public class AnnotatedPDBFileInputTest
 
   String pdbId;
 
-  @Before
+  @BeforeMethod
   public void setup() throws Exception
   {
     Cache.applicationProperties.setProperty("STRUCT_FROM_PDB",
@@ -60,7 +60,7 @@ public class AnnotatedPDBFileInputTest
     {
       for (int q = p + 1; q < avec.length; q++)
       {
-        assertNotEquals(
+        Assert.assertNotEquals(
                 "Found a duplicate annotation row " + avec[p].label,
                 avec[p], avec[q]);
       }
index 0e066c2..d36a82b 100644 (file)
@@ -20,9 +20,9 @@
  */
 package jalview.io;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.ColumnSelection;
 import jalview.io.AnnotationFile.ViewDef;
@@ -30,7 +30,8 @@ import jalview.io.AnnotationFile.ViewDef;
 import java.io.File;
 import java.util.Hashtable;
 
-import org.junit.Test;
+import org.testng.Assert;
+import org.testng.annotations.Test;
 
 public class AnnotationFileIOTest
 {
@@ -84,7 +85,7 @@ public class AnnotationFileIOTest
     {
       e.printStackTrace();
     }
-    fail("Couln't read the alignment in file '" + f.toString() + "'");
+    Assert.fail("Couln't read the alignment in file '" + f.toString() + "'");
     return null;
   }
 
@@ -98,6 +99,8 @@ public class AnnotationFileIOTest
    *          - label for IO class used to write and read back in the data from
    *          f
    */
+
+  // @Test
   public static void testAnnotationFileIO(String testname, File f,
           File annotFile)
   {
@@ -150,7 +153,7 @@ public class AnnotationFileIOTest
     {
       e.printStackTrace();
     }
-    fail("Test "
+    Assert.fail("Test "
             + testname
             + "\nCouldn't complete Annotation file roundtrip input/output/input test for '"
             + annotFile + "'.");
index ac2b599..8440b6d 100644 (file)
@@ -11,8 +11,9 @@ import java.net.URL;
 import java.net.URLConnection;
 import java.util.TreeMap;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.testng.Assert;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
 
 
 public class BioJsHTMLOutputTest
@@ -43,7 +44,7 @@ public class BioJsHTMLOutputTest
     Assert.assertNotNull(bjsTemplate);
   }
 
-  @Test(expected = NullPointerException.class)
+  @Test(expectedExceptions = NullPointerException.class)
   public void expectedNullPointerException()
   {
     try
@@ -51,7 +52,7 @@ public class BioJsHTMLOutputTest
       BioJsHTMLOutput.refreshBioJSVersionsInfo(null);
     } catch (URISyntaxException e)
     {
-      Assert.fail("Expception occured while testing!");
+      AssertJUnit.fail("Expception occured while testing!");
       e.printStackTrace();
     }
   }
@@ -67,11 +68,11 @@ public class BioJsHTMLOutputTest
       versions = BioJsHTMLOutput.getBioJsMSAVersions();
     } catch (URISyntaxException e)
     {
-      Assert.fail("Expception occured while testing!");
+      AssertJUnit.fail("Expception occured while testing!");
       e.printStackTrace();
     }
-    Assert.assertNotNull("No versions found", versions);
-    Assert.assertTrue("One or more Templates required", versions.size() > 0);
+    AssertJUnit.assertNotNull("No versions found", versions);
+    AssertJUnit.assertTrue("One or more Templates required", versions.size() > 0);
     System.out
             .println("Number of discovered versions : "
             + versions.size());
@@ -83,7 +84,7 @@ public class BioJsHTMLOutputTest
 
     System.out.println("\nCurrent latest version : "
             + BioJsHTMLOutput.getCurrentBJSTemplateFile());
-    Assert.assertNotNull("Latest BioJsMSA version NOT found!",
+    AssertJUnit.assertNotNull("Latest BioJsMSA version NOT found!",
             BioJsHTMLOutput.getCurrentBJSTemplateFile());
 
   }
@@ -92,9 +93,9 @@ public class BioJsHTMLOutputTest
   public void testBioJsUpdate()
   {
     String url = BioJsHTMLOutput.BJS_TEMPLATE_GIT_REPO;
-    Assert.assertTrue("URL not reacable : " + url, urlIsReachable(url));
+    AssertJUnit.assertTrue("URL not reacable : " + url, urlIsReachable(url));
     String response = BioJsHTMLOutput.getURLContentAsString(url);
-    Assert.assertNotNull("Null response read from url!", response);
+    AssertJUnit.assertNotNull("Null response read from url!", response);
     BioJSRepositoryPojo repository = new BioJSRepositoryPojo(response);
     System.out.println(">>> description : " + repository.getDescription());
     System.out
index e9165e2..6b7de77 100644 (file)
  */
 package jalview.io;
 
-import static org.junit.Assert.*;
-
 import java.io.File;
 import java.io.IOException;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.testng.AssertJUnit;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
 
 /**
  * @author jimp
@@ -68,9 +67,9 @@ public class FileIOTester
 
   private void assertValidFormat(String fmt, String src, FileParse fp)
   {
-    assertTrue("Couldn't resolve " + src + " as a valid file", fp.isValid());
+    AssertJUnit.assertTrue("Couldn't resolve " + src + " as a valid file", fp.isValid());
     String type = new IdentifyFile().Identify(fp);
-    assertTrue("Data from '" + src + "' Expected to be '" + fmt
+    AssertJUnit.assertTrue("Data from '" + src + "' Expected to be '" + fmt
             + "' identified as '" + type + "'", type.equalsIgnoreCase(fmt));
   }
 
index 30cb451..8df44df 100644 (file)
@@ -65,7 +65,7 @@ public class Gff3tests
   public void simpleGff3FileLoader() throws IOException
   {
     AlignFrame af = new FileLoader(false).LoadFileWaitTillLoaded(
-            simpleGff3file, null);
+            simpleGff3file, FormatAdapter.FILE);
     Assert.assertTrue(
             "Didn't read the alignment into an alignframe from Gff3 File",
             af != null);
index 59a5b68..eca3984 100644 (file)
@@ -2,14 +2,12 @@ package jalview.io;
 
 import static org.junit.Assert.fail;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class HtmlFileTest
 {
 
-  @Test
-  @Ignore
+  @Test(enabled = false)
   public void test()
   {
     fail("Not yet implemented");
index 92b172c..2e28e3a 100644 (file)
@@ -1,8 +1,8 @@
 package jalview.io;
 
 
-import static org.junit.Assert.assertNotNull;
-import jalview.datamodel.Alignment;
+import static org.testng.AssertJUnit.assertNotNull;
+
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
@@ -19,10 +19,10 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.AssertJUnit;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class JSONFileTest
 {
@@ -43,7 +43,7 @@ public class JSONFileTest
   HashMap<String, AlignmentAnnotation> testAnnots = new HashMap<String, AlignmentAnnotation>();
   HashMap<String, SequenceGroup> testGrps = new HashMap<String, SequenceGroup>();
 
-  @Before
+  @BeforeMethod
   public void setup() throws Exception
   {
     // create and add sequences
@@ -146,7 +146,7 @@ public class JSONFileTest
     TEST_ANOT_HEIGHT = testAnnots.size();
   }
 
-  @After
+  @AfterMethod
   public void tearDown() throws Exception
   {
   }
@@ -156,7 +156,7 @@ public class JSONFileTest
   {
     String jsonFile = "examples/example.json";
     AppletFormatAdapter rf = new AppletFormatAdapter();
-    Alignment al = null;
+    AlignmentI al = null;
     try
     {
       al = rf.readFile(jsonFile, AppletFormatAdapter.FILE,
@@ -171,34 +171,34 @@ public class JSONFileTest
     for (SequenceI seq : al.getSequences())
     {
       SequenceI expectedSeq = testSeqs.get(seq.getName());
-      Assert.assertTrue("Failed Sequence Test  for >>> " + seq.getName(),
+      AssertJUnit.assertTrue("Failed Sequence Test  for >>> " + seq.getName(),
               isSeqMatched(expectedSeq, seq));
       passedCount++;
     }
-    Assert.assertEquals("Some Sequences did not pass the test",
+    AssertJUnit.assertEquals("Some Sequences did not pass the test",
             TEST_SEQ_HEIGHT, passedCount);
 
     passedCount = 0;
     for (SequenceGroup seqGrp : al.getGroups())
     {
       SequenceGroup expectedGrp = testGrps.get(seqGrp.getName());
-      Assert.assertTrue(
+      AssertJUnit.assertTrue(
               "Failed SequenceGroup Test for >>> " + seqGrp.getName(),
               isGroupMatched(expectedGrp, seqGrp));
       passedCount++;
     }
-    Assert.assertEquals("Some SequenceGroups did not pass the test",
+    AssertJUnit.assertEquals("Some SequenceGroups did not pass the test",
             TEST_GRP_HEIGHT, passedCount);
 
     passedCount = 0;
     for (AlignmentAnnotation annot : al.getAlignmentAnnotation())
     {
       AlignmentAnnotation expectedAnnot = testAnnots.get(annot.label);
-      Assert.assertTrue("Failed AlignmentAnnotation Test for >>> "
+      AssertJUnit.assertTrue("Failed AlignmentAnnotation Test for >>> "
               + annot.label, isAnnotationMatched(expectedAnnot, annot));
       passedCount++;
     }
-    Assert.assertEquals("Some Sequences did not pass the test",
+    AssertJUnit.assertEquals("Some Sequences did not pass the test",
             TEST_ANOT_HEIGHT, passedCount);
 
     // af = new AlignFrame(al, 700, 500);
index 771250b..7d24727 100644 (file)
  */
 package jalview.io;
 
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.File;
-
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.api.AlignmentViewPanel;
 import jalview.api.ViewStyleI;
@@ -41,6 +33,14 @@ import jalview.gui.Desktop;
 import jalview.schemes.AnnotationColourGradient;
 import jalview.schemes.ColourSchemeI;
 
+import java.io.File;
+
+import org.testng.Assert;
+import org.testng.AssertJUnit;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
 public class Jalview2xmlTests
 {
 
@@ -305,7 +305,7 @@ public class Jalview2xmlTests
           }
           catch (NullPointerException q)
           {
-            fail("Mismatch of alignment annotations at position " + p
+            Assert.fail("Mismatch of alignment annotations at position " + p
                     + " Ref seq ann: " + refan.annotations[p]
                     + " alignment " + alaa.annotations[p]);
           }
@@ -320,7 +320,7 @@ public class Jalview2xmlTests
   {
     AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded(
             "examples/exampleFile_2_7.jar", FormatAdapter.FILE);
-    Assert.assertTrue("Didn't read in the example file correctly.", af != null);
+    assertTrue("Didn't read in the example file correctly.", af != null);
     AlignmentViewPanel sps = null, groups = null;
     for (AlignmentViewPanel ap : af.alignPanel.alignFrame.getAlignPanels())
     {
@@ -338,10 +338,10 @@ public class Jalview2xmlTests
 
     ViewStyleI structureStyle = sps.getAlignViewport().getViewStyle();
     ViewStyleI groupStyle = groups.getAlignViewport().getViewStyle();
-    Assert.assertFalse(structureStyle.sameStyle(groupStyle));
+    AssertJUnit.assertFalse(structureStyle.sameStyle(groupStyle));
 
     groups.getAlignViewport().setViewStyle(structureStyle);
-    Assert.assertFalse(groupStyle.sameStyle(groups.getAlignViewport()
+    AssertJUnit.assertFalse(groupStyle.sameStyle(groups.getAlignViewport()
             .getViewStyle()));
     Assert.assertTrue(structureStyle.sameStyle(groups.getAlignViewport()
             .getViewStyle()));
index bd0bb52..a016134 100644 (file)
  */
 package jalview.io;
 
-import static org.junit.Assert.*;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Vector;
+import static org.testng.ConversionUtils.wrapDataProvider;
 
 import jalview.analysis.NJTree;
 import jalview.analysis.SequenceIdMatcher;
 import jalview.datamodel.SequenceI;
 import jalview.datamodel.SequenceNode;
 
-import org.jmol.util.ArrayUtil;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Vector;
+
 import org.junit.runners.Parameterized.Parameters;
+import org.testng.Assert;
+import org.testng.AssertJUnit;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Factory;
+import org.testng.annotations.Test;
 
 /**
  * @author jimp
  * 
  */
-@RunWith(Parameterized.class)
 public class NewickFileTests
 {
 
+  @Factory
+  public static Object[] factoryData()
+  {
+    return wrapDataProvider(NewickFileTests.class, data());
+  }
+
   @Parameters
   public static Collection data()
   {
@@ -95,44 +99,44 @@ public class NewickFileTests
       System.out.println(treename + "\n" + testTree);
       NewickFile nf = new NewickFile(testTree, FormatAdapter.PASTE);
       nf.parse();
-      assertTrue(stage + "Invalid Tree '" + nf.getWarningMessage() + "'",
+      AssertJUnit.assertTrue(stage + "Invalid Tree '" + nf.getWarningMessage() + "'",
               nf.isValid());
       SequenceNode tree = nf.getTree();
-      assertTrue(stage + "Null Tree", tree != null);
+      AssertJUnit.assertTrue(stage + "Null Tree", tree != null);
       stage = "Creating newick file from testTree " + treename;
       String gentree = new NewickFile(tree).print(nf.HasBootstrap(),
               nf.HasDistances());
-      assertTrue(stage + "Empty string generated", gentree != null
+      AssertJUnit.assertTrue(stage + "Empty string generated", gentree != null
               && gentree.trim().length() > 0);
       stage = "Parsing regenerated testTree " + treename;
       NewickFile nf_regen = new NewickFile(gentree, FormatAdapter.PASTE);
       nf_regen.parse();
-      assertTrue(
+      AssertJUnit.assertTrue(
               stage + "Newick file is invalid ('"
                       + nf_regen.getWarningMessage() + "')",
               nf_regen.isValid());
       SequenceNode tree_regen = nf.getTree();
-      assertTrue(stage + "Null Tree", tree_regen != null);
+      AssertJUnit.assertTrue(stage + "Null Tree", tree_regen != null);
       stage = "Compare original and generated tree" + treename;
 
       Vector oseqs, nseqs;
       oseqs = new NJTree(new SequenceI[0], nf).findLeaves(nf.getTree(),
               new Vector());
-      assertTrue(stage + "No nodes in original tree.", oseqs.size() > 0);
+      AssertJUnit.assertTrue(stage + "No nodes in original tree.", oseqs.size() > 0);
       SequenceI[] olsqs = new SequenceI[oseqs.size()];
       for (int i = 0, iSize = oseqs.size(); i < iSize; i++)
       {
         olsqs[i] = (SequenceI) ((SequenceNode) oseqs.get(i)).element();
       }
-      nseqs = (Vector) new NJTree(new SequenceI[0], nf_regen).findLeaves(
+      nseqs = new NJTree(new SequenceI[0], nf_regen).findLeaves(
               nf_regen.getTree(), new Vector());
-      assertTrue(stage + "No nodes in regerated tree.", nseqs.size() > 0);
+      AssertJUnit.assertTrue(stage + "No nodes in regerated tree.", nseqs.size() > 0);
       SequenceI[] nsqs = new SequenceI[nseqs.size()];
       for (int i = 0, iSize = nseqs.size(); i < iSize; i++)
       {
         nsqs[i] = (SequenceI) ((SequenceNode) nseqs.get(i)).element();
       }
-      assertTrue(stage + " Different number of leaves (original "
+      AssertJUnit.assertTrue(stage + " Different number of leaves (original "
               + olsqs.length + " and regen " + nsqs.length + ")",
               olsqs.length == nsqs.length);
       SequenceIdMatcher omatcher = new SequenceIdMatcher(olsqs), nmatcher = new SequenceIdMatcher(
@@ -157,7 +161,7 @@ public class NewickFileTests
 
       if (warns.length() > 0)
       {
-        fail(stage + warns);
+        Assert.fail(stage + warns);
       }
     } catch (Exception x)
     {
index e411272..d335731 100644 (file)
@@ -1,15 +1,16 @@
 package jalview.io;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import jalview.datamodel.Alignment;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceI;
 
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 /**
  * Test file for {@link PhylipFile}.
@@ -105,7 +106,7 @@ public class PhylipFileTests
   private void testDataExtraction(String file) throws IOException
   {
     AppletFormatAdapter rf = new AppletFormatAdapter();
-    Alignment al = rf.readFile(file, AppletFormatAdapter.FILE,
+    AlignmentI al = rf.readFile(file, AppletFormatAdapter.FILE,
             PhylipFile.FILE_DESC);
     assertNotNull("Couldn't read supplied alignment data.", al);
 
@@ -150,13 +151,13 @@ public class PhylipFileTests
   public void testIO(String file) throws IOException
   {
     AppletFormatAdapter rf = new AppletFormatAdapter();
-    Alignment al = rf.readFile(file, AppletFormatAdapter.FILE,
+    AlignmentI al = rf.readFile(file, AppletFormatAdapter.FILE,
             PhylipFile.FILE_DESC);
     assertNotNull("Couldn't read supplied alignment data.", al);
 
     String outputfile = rf.formatSequences(PhylipFile.FILE_DESC, al, true);
 
-    Alignment al_input = new AppletFormatAdapter().readFile(outputfile,
+    AlignmentI al_input = new AppletFormatAdapter().readFile(outputfile,
             AppletFormatAdapter.PASTE, PhylipFile.FILE_DESC);
     assertNotNull("Couldn't parse reimported alignment data.", al_input);
 
index c7e6398..d684512 100644 (file)
@@ -22,9 +22,9 @@ package jalview.io;
 
 import java.io.File;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
 
 public class RNAMLfileTest
 {
@@ -43,7 +43,7 @@ public class RNAMLfileTest
   public void testRnamlToStockholmIO()
   {
     StockholmFileTest.testFileIOwithFormat(new File(
-            "examples/rna-alignment.xml"), "STH", -1, -1);
+            "examples/testdata/rna-alignment.xml"), "STH", -1, -1);
 
   }
 
index 806e4dc..45de531 100644 (file)
  */
 package jalview.io;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import jalview.datamodel.Alignment;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
@@ -35,7 +35,7 @@ import java.util.BitSet;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class StockholmFileTest
 {
@@ -84,6 +84,7 @@ public class StockholmFileTest
    *          - label for IO class used to write and read back in the data from
    *          f
    */
+
   public static void testFileIOwithFormat(File f, String ioformat,
           int naliannot, int nminseqann)
   {
@@ -93,7 +94,7 @@ public class StockholmFileTest
     {
       AppletFormatAdapter rf = new AppletFormatAdapter();
 
-      Alignment al = rf.readFile(ff, AppletFormatAdapter.FILE,
+      AlignmentI al = rf.readFile(ff, AppletFormatAdapter.FILE,
               new IdentifyFile().Identify(ff, AppletFormatAdapter.FILE));
 
       assertNotNull("Couldn't read supplied alignment data.", al);
@@ -107,7 +108,7 @@ public class StockholmFileTest
       System.out.println("Output file in '" + ioformat + "':\n"
               + outputfile + "\n<<EOF\n");
       // test for consistency in io
-      Alignment al_input = new AppletFormatAdapter().readFile(outputfile,
+      AlignmentI al_input = new AppletFormatAdapter().readFile(outputfile,
               AppletFormatAdapter.PASTE, ioformat);
       assertNotNull("Couldn't parse reimported alignment data.", al_input);
 
@@ -350,9 +351,11 @@ public class StockholmFileTest
                 an_new.displayCharacter.trim())
                 || !("" + an_or.secondaryStructure).trim().equals(
                         ("" + an_new.secondaryStructure).trim())
-                || (an_or.description != an_new.description && (an_or.description == null
-                        || an_new.description == null || !an_or.description
-                          .equals(an_new.description))))
+                || (an_or.description != an_new.description && !((an_or.description == null && an_new.description
+                        .trim().length() == 0)
+                        || (an_new.description == null && an_or.description
+                                .trim().length() == 0) || an_or.description
+                        .trim().equals(an_new.description.trim()))))
         {
           System.err.println("Annotation Element Mismatch\nElement " + i
                   + " in original: " + annot_or.annotations[i].toString()
index edf7f20..b7da5e4 100644 (file)
@@ -20,7 +20,6 @@
  */
 package jalview.io;
 
-import static org.junit.Assert.*;
 import jalview.io.TCoffeeScoreFile.Block;
 import jalview.io.TCoffeeScoreFile.Header;
 
@@ -29,15 +28,8 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.List;
 
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.junit.Test;
-import org.xml.sax.SAXException;
-
-import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax;
-import fr.orsay.lri.varna.exceptions.ExceptionLoadingFailed;
-import fr.orsay.lri.varna.exceptions.ExceptionPermissionDenied;
-import fr.orsay.lri.varna.exceptions.ExceptionUnmatchedClosingParentheses;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
 
 public class TCoffeeScoreFileTest
 {
@@ -54,23 +46,23 @@ public class TCoffeeScoreFileTest
 
     TCoffeeScoreFile scoreFile = new TCoffeeScoreFile(SCORE_FILE.getPath(),
             AppletFormatAdapter.FILE);
-    assertTrue(scoreFile.getWarningMessage(), scoreFile.isValid());
+    AssertJUnit.assertTrue(scoreFile.getWarningMessage(), scoreFile.isValid());
 
     Header header = scoreFile.header;
-    assertNotNull(header);
-    assertEquals(
+    AssertJUnit.assertNotNull(header);
+    AssertJUnit.assertEquals(
             "T-COFFEE, Version_9.02.r1228 (2012-02-16 18:15:12 - Revision 1228 - Build 336)",
             header.head);
-    assertEquals(90, header.score);
-    assertEquals(89, header.getScoreFor("1PHT"));
-    assertEquals(90, header.getScoreFor("1BB9"));
-    assertEquals(94, header.getScoreFor("1UHC"));
-    assertEquals(94, header.getScoreFor("1YCS"));
-    assertEquals(93, header.getScoreFor("1OOT"));
-    assertEquals(94, header.getScoreFor("1ABO"));
-    assertEquals(94, header.getScoreFor("1FYN"));
-    assertEquals(94, header.getScoreFor("1QCF"));
-    assertEquals(90, header.getScoreFor("cons"));
+    AssertJUnit.assertEquals(90, header.score);
+    AssertJUnit.assertEquals(89, header.getScoreFor("1PHT"));
+    AssertJUnit.assertEquals(90, header.getScoreFor("1BB9"));
+    AssertJUnit.assertEquals(94, header.getScoreFor("1UHC"));
+    AssertJUnit.assertEquals(94, header.getScoreFor("1YCS"));
+    AssertJUnit.assertEquals(93, header.getScoreFor("1OOT"));
+    AssertJUnit.assertEquals(94, header.getScoreFor("1ABO"));
+    AssertJUnit.assertEquals(94, header.getScoreFor("1FYN"));
+    AssertJUnit.assertEquals(94, header.getScoreFor("1QCF"));
+    AssertJUnit.assertEquals(90, header.getScoreFor("cons"));
   }
 
   @Test
@@ -80,10 +72,10 @@ public class TCoffeeScoreFileTest
     {
       TCoffeeScoreFile result = new TCoffeeScoreFile(ALIGN_FILE.getPath(),
               FormatAdapter.FILE);
-      assertFalse(result.isValid());
+      AssertJUnit.assertFalse(result.isValid());
     } catch (IOException x)
     {
-      assertTrue("File not found exception thrown",
+      AssertJUnit.assertTrue("File not found exception thrown",
               x instanceof FileNotFoundException);
     }
   }
@@ -93,9 +85,9 @@ public class TCoffeeScoreFileTest
   {
     TCoffeeScoreFile result = new TCoffeeScoreFile(SCORE_FILE.getPath(),
             FormatAdapter.FILE);
-    assertTrue(result.isValid());
-    assertEquals(8, result.getHeight());
-    assertEquals(83, result.getWidth());
+    AssertJUnit.assertTrue(result.isValid());
+    AssertJUnit.assertEquals(8, result.getHeight());
+    AssertJUnit.assertEquals(83, result.getWidth());
   }
 
   @Test
@@ -116,24 +108,24 @@ public class TCoffeeScoreFileTest
     FileParse source = new FileParse(BLOCK, FormatAdapter.PASTE);
     Block block = TCoffeeScoreFile.readBlock(source, 0);
 
-    assertNotNull(block);
-    assertEquals("999999999999999999999999998762112222543211112134",
+    AssertJUnit.assertNotNull(block);
+    AssertJUnit.assertEquals("999999999999999999999999998762112222543211112134",
             block.getScoresFor("1PHT"));
-    assertEquals("99999999999999999999999999987-------4322----2234",
+    AssertJUnit.assertEquals("99999999999999999999999999987-------4322----2234",
             block.getScoresFor("1BB9"));
-    assertEquals("99999999999999999999999999987-------5321----2246",
+    AssertJUnit.assertEquals("99999999999999999999999999987-------5321----2246",
             block.getScoresFor("1UHC"));
-    assertEquals("99999999999999999999999999986-------4321----1-35",
+    AssertJUnit.assertEquals("99999999999999999999999999986-------4321----1-35",
             block.getScoresFor("1YCS"));
-    assertEquals("999999999999999999999999999861-------3------1135",
+    AssertJUnit.assertEquals("999999999999999999999999999861-------3------1135",
             block.getScoresFor("1OOT"));
-    assertEquals("99999999999999999999999999986-------422-------34",
+    AssertJUnit.assertEquals("99999999999999999999999999986-------422-------34",
             block.getScoresFor("1ABO"));
-    assertEquals("99999999999999999999999999985-------32--------35",
+    AssertJUnit.assertEquals("99999999999999999999999999985-------32--------35",
             block.getScoresFor("1FYN"));
-    assertEquals("99999999999999999999999999974-------2---------24",
+    AssertJUnit.assertEquals("99999999999999999999999999974-------2---------24",
             block.getScoresFor("1QCF"));
-    assertEquals("999999999999999999999999999851000110321100001134",
+    AssertJUnit.assertEquals("999999999999999999999999999851000110321100001134",
             block.getConsensus());
   }
 
@@ -144,31 +136,31 @@ public class TCoffeeScoreFileTest
     TCoffeeScoreFile parser = new TCoffeeScoreFile(SCORE_FILE.getPath(),
             FormatAdapter.FILE);
 
-    assertEquals(
+    AssertJUnit.assertEquals(
             "999999999999999999999999998762112222543211112134----------5666642367889999999999889",
             parser.getScoresFor("1PHT"));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999987-------4322----22341111111111676653-355679999999999889",
             parser.getScoresFor("1BB9"));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999987-------5321----2246----------788774--66789999999999889",
             parser.getScoresFor("1UHC"));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999986-------4321----1-35----------78777--356789999999999889",
             parser.getScoresFor("1YCS"));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "999999999999999999999999999861-------3------1135----------78877--356789999999997-67",
             parser.getScoresFor("1OOT"));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999986-------422-------34----------687774--56779999999999889",
             parser.getScoresFor("1ABO"));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999985-------32--------35----------6888842356789999999999889",
             parser.getScoresFor("1FYN"));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999974-------2---------24----------6878742356789999999999889",
             parser.getScoresFor("1QCF"));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999985100011032110000113400100000006877641356789999999999889",
             parser.getScoresFor("cons"));
   }
@@ -179,33 +171,33 @@ public class TCoffeeScoreFileTest
 
     TCoffeeScoreFile parser = new TCoffeeScoreFile(SCORE_FILE.getPath(),
             FormatAdapter.FILE);
-    assertTrue(parser.getWarningMessage(), parser.isValid());
+    AssertJUnit.assertTrue(parser.getWarningMessage(), parser.isValid());
     List<String> scores = parser.getScoresList();
-    assertEquals(
+    AssertJUnit.assertEquals(
             "999999999999999999999999998762112222543211112134----------5666642367889999999999889",
             scores.get(0));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999987-------4322----22341111111111676653-355679999999999889",
             scores.get(1));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999987-------5321----2246----------788774--66789999999999889",
             scores.get(2));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999986-------4321----1-35----------78777--356789999999999889",
             scores.get(3));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "999999999999999999999999999861-------3------1135----------78877--356789999999997-67",
             scores.get(4));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999986-------422-------34----------687774--56779999999999889",
             scores.get(5));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999985-------32--------35----------6888842356789999999999889",
             scores.get(6));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999974-------2---------24----------6878742356789999999999889",
             scores.get(7));
-    assertEquals(
+    AssertJUnit.assertEquals(
             "99999999999999999999999999985100011032110000113400100000006877641356789999999999889",
             scores.get(8));
 
@@ -217,28 +209,28 @@ public class TCoffeeScoreFileTest
 
     TCoffeeScoreFile parser = new TCoffeeScoreFile(SCORE_FILE.getPath(),
             FormatAdapter.FILE);
-    assertTrue(parser.getWarningMessage(), parser.isValid());
+    AssertJUnit.assertTrue(parser.getWarningMessage(), parser.isValid());
     byte[][] scores = parser.getScoresArray();
 
-    assertEquals(9, scores[0][0]);
-    assertEquals(9, scores[1][0]);
-    assertEquals(9, scores[2][0]);
-    assertEquals(9, scores[3][0]);
-    assertEquals(9, scores[4][0]);
-    assertEquals(9, scores[5][0]);
-    assertEquals(9, scores[6][0]);
-    assertEquals(9, scores[7][0]);
-    assertEquals(9, scores[8][0]);
-
-    assertEquals(5, scores[0][36]);
-    assertEquals(4, scores[1][36]);
-    assertEquals(5, scores[2][36]);
-    assertEquals(4, scores[3][36]);
-    assertEquals(-1, scores[4][36]);
-    assertEquals(4, scores[5][36]);
-    assertEquals(3, scores[6][36]);
-    assertEquals(2, scores[7][36]);
-    assertEquals(3, scores[8][36]);
+    AssertJUnit.assertEquals(9, scores[0][0]);
+    AssertJUnit.assertEquals(9, scores[1][0]);
+    AssertJUnit.assertEquals(9, scores[2][0]);
+    AssertJUnit.assertEquals(9, scores[3][0]);
+    AssertJUnit.assertEquals(9, scores[4][0]);
+    AssertJUnit.assertEquals(9, scores[5][0]);
+    AssertJUnit.assertEquals(9, scores[6][0]);
+    AssertJUnit.assertEquals(9, scores[7][0]);
+    AssertJUnit.assertEquals(9, scores[8][0]);
+
+    AssertJUnit.assertEquals(5, scores[0][36]);
+    AssertJUnit.assertEquals(4, scores[1][36]);
+    AssertJUnit.assertEquals(5, scores[2][36]);
+    AssertJUnit.assertEquals(4, scores[3][36]);
+    AssertJUnit.assertEquals(-1, scores[4][36]);
+    AssertJUnit.assertEquals(4, scores[5][36]);
+    AssertJUnit.assertEquals(3, scores[6][36]);
+    AssertJUnit.assertEquals(2, scores[7][36]);
+    AssertJUnit.assertEquals(3, scores[8][36]);
 
   }
 
@@ -247,9 +239,9 @@ public class TCoffeeScoreFileTest
   {
     String file = "test/jalview/io/tcoffee.score_ascii_with_residue_numbers";
     TCoffeeScoreFile result = new TCoffeeScoreFile(file, FormatAdapter.FILE);
-    assertTrue(result.isValid());
-    assertEquals(5, result.getHeight());
-    assertEquals(84, result.getWidth());
+    AssertJUnit.assertTrue(result.isValid());
+    AssertJUnit.assertEquals(5, result.getHeight());
+    AssertJUnit.assertEquals(84, result.getWidth());
   }
 
 }
index 42f17fd..75877ee 100644 (file)
  */
 package jalview.schemes;
 
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertTrue;
 
 import java.util.Map;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class DnaCodonTests
 {
index b82d338..d7e0e0b 100644 (file)
@@ -1,12 +1,12 @@
 package jalview.schemes;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
 
 import java.util.Collections;
 import java.util.List;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class ResiduePropertiesTest
 {
index 89f9f8a..0b15b60 100644 (file)
@@ -24,7 +24,7 @@ import jalview.api.analysis.ScoreModelI;
 
 import java.util.Map;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class ScoreMatrixPrinter
 {
index cc8138c..db0ea49 100644 (file)
@@ -1,14 +1,7 @@
 package jalview.structure;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import MCview.PDBfile;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.Annotation;
@@ -18,6 +11,12 @@ import jalview.gui.AlignFrame;
 import jalview.io.FileLoader;
 import jalview.io.FormatAdapter;
 
+import org.testng.Assert;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
+
+import MCview.PDBfile;
+
 public class Mapping
 {
 
@@ -28,11 +27,10 @@ public class Mapping
    * 115 in PDB Res Numbering secondary structure numbers in jmol seem to be in
    * msd numbering, not pdb res numbering.
    */
-  @Test
-  @Ignore
+  @Test(enabled = false)
   public void pdbEntryPositionMap() throws Exception
   {
-    fail("This test intentionally left to fail");
+    Assert.fail("This test intentionally left to fail");
     for (int offset = 0; offset < 20; offset += 6)
     {
       // check we put the secondary structure in the right position
@@ -111,11 +109,10 @@ public class Mapping
     }
   }
 
-  @Test
-  @Ignore
+  @Test(enabled = false)
   public void testPDBentryMapping() throws Exception
   {
-    fail("This test intentionally left to fail");
+    Assert.fail("This test intentionally left to fail");
     Sequence sq = new Sequence(
             "1GAQ A subseq 126 to 219",
             "EIVKGVCSNFLCDLQPGDNVQITGPVGKEMLMPKDPNATIIMLATGTGIAPFRSFLWKMFFEKHDDYKFNGLGWLFLGVPTSSSLLYKEEFGKM");
@@ -228,7 +225,7 @@ public class Mapping
             jalview.io.FormatAdapter.FILE);
     if (pmap == null)
     {
-      Assert.fail("Couldn't make a mapping for 3W5V to FER1_MAIZE");
+      AssertJUnit.fail("Couldn't make a mapping for 3W5V to FER1_MAIZE");
     }
   }
 
index 487ef2c..589adde 100644 (file)
@@ -1,20 +1,21 @@
 package jalview.structure;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.datamodel.AlignedCodonFrame;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class StructureSelectionManagerTest
 {
   private StructureSelectionManager ssm;
 
-  @Before
+  @BeforeMethod
   public void setUp()
   {
     ssm = new StructureSelectionManager();
index 3db7f23..7871e77 100644 (file)
@@ -1,14 +1,8 @@
 package jalview.structures.models;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
@@ -21,6 +15,12 @@ import jalview.structure.AtomSpec;
 import jalview.structure.StructureSelectionManager;
 import jalview.structures.models.AAStructureBindingModel.SuperposeData;
 
+import java.util.Arrays;
+import java.util.List;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
 /**
  * Unit tests for non-abstract methods of abstract base class
  * 
@@ -57,7 +57,7 @@ public class AAStructureBindingModelTest
   /**
    * Set up test conditions with three aligned sequences,
    */
-  @Before
+  @BeforeMethod
   public void setUp()
   {
     SequenceI seq1 = new Sequence("1YCS", "-VPSQK");
index 3bbcf27..ad6e6d0 100644 (file)
@@ -1,11 +1,11 @@
 package jalview.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
 
 import java.awt.Color;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class ColorUtilsTest
 {
index 57d1ac1..837cbe6 100644 (file)
@@ -1,14 +1,14 @@
 package jalview.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceI;
 
+import org.testng.annotations.Test;
+
 public class ComparisonTest
 {
 
index 959c55d..036ad91 100644 (file)
@@ -1,10 +1,11 @@
 package jalview.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.DBRefSource;
 import jalview.datamodel.Mapping;
@@ -12,7 +13,7 @@ import jalview.datamodel.PDBEntry;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceI;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class DBRefUtilsTest
 {
index bfb0837..5579efb 100644 (file)
@@ -1,16 +1,15 @@
 package jalview.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertTrue;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class MapListTest
 {
@@ -48,7 +47,7 @@ public class MapListTest
   private static void testLocateFrom(MapList mldna, int i, int j, int[] ks)
   {
     int[] frm = mldna.locateInFrom(i, j);
-    Assert.assertEquals("Failed test locate from " + i + " to " + j,
+    assertEquals("Failed test locate from " + i + " to " + j,
             Arrays.toString(frm), Arrays.toString(ks));
   }
 
index ec9ace4..9985fb3 100644 (file)
@@ -1,22 +1,12 @@
 package jalview.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
 
-import java.awt.Color;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertSame;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.api.AlignViewportI;
 import jalview.datamodel.AlignedCodonFrame;
-import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.SearchResults;
@@ -28,6 +18,16 @@ import jalview.gui.AlignViewport;
 import jalview.io.AppletFormatAdapter;
 import jalview.io.FormatAdapter;
 
+import java.awt.Color;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.testng.annotations.Test;
+
 public class MappingUtilsTest
 {
   private AlignViewportI dnaView;
@@ -248,7 +248,7 @@ public class MappingUtilsTest
   protected AlignmentI loadAlignment(final String data, String format)
           throws IOException
   {
-    Alignment a = new FormatAdapter().readFile(data,
+    AlignmentI a = new FormatAdapter().readFile(data,
             AppletFormatAdapter.PASTE, format);
     a.setDataset(null);
     return a;
index 2293163..7d10758 100644 (file)
@@ -1,13 +1,12 @@
 package jalview.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
 
 import java.util.Arrays;
 
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 public class QuickSortTest
 {
@@ -24,7 +23,7 @@ public class QuickSortTest
   private final Object[] sortedThings = new Object[]
   { c4, c2, c1, c3 };
 
-  @Before
+  @BeforeMethod
   public void setUp()
   {
     things = new Object[]
@@ -82,8 +81,7 @@ public class QuickSortTest
   /**
    * Test whether sort is stable i.e. equal values retain their mutual ordering.
    */
-  @Test
-  @Ignore
+  @Test(enabled = false)
   public void testSort_withDuplicates()
   {
     int[] values = new int[]
index f680d6c..ea9b2e4 100644 (file)
@@ -1,12 +1,12 @@
 package jalview.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
 
 import java.util.Arrays;
 import java.util.List;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class ShiftListTest
 {
index 6930e40..7442530 100644 (file)
@@ -1,12 +1,12 @@
 package jalview.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertTrue;
 
 import java.util.Arrays;
 
-import org.junit.Test;
+import org.testng.annotations.Test;
 
 public class StringUtilsTest
 {
index 115c5d3..64b15a6 100644 (file)
@@ -1,15 +1,15 @@
 package jalview.viewmodel.styles;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
 
 import java.awt.Color;
 import java.lang.reflect.Field;
 import java.util.Random;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
 
 
 public class ViewStyleTest
@@ -137,7 +137,7 @@ public class ViewStyleTest
     }
     else
     {
-      Assert.fail("Unhandled field type (add to test): " + field.getName()
+      AssertJUnit.fail("Unhandled field type (add to test): " + field.getName()
               + ":" + type);
     }
   }
index 778fc18..ef03fd0 100644 (file)
  */
 package jalview.ws;
 
-import static org.junit.Assert.assertTrue;
-
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.bin.Cache;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceI;
 import jalview.ws.seqfetcher.DbSourceProxy;
 
+import java.util.List;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
 public class PDBSequenceFetcherTest
 {
 
   SequenceFetcher sf;
 
-  @Before
+  @BeforeMethod
   public void setUp() throws Exception
   {
     // ensure 'add annotation from structure' is selected
@@ -49,7 +49,7 @@ public class PDBSequenceFetcherTest
     sf = new SequenceFetcher(false);
   }
 
-  @Test
+  @Test(enabled = false)
   public void testRnaSeqRetrieve() throws Exception
   {
     List<DbSourceProxy> sps = sf.getSourceProxy("PDB");
index a97f3e0..3b3ef86 100644 (file)
@@ -1,8 +1,8 @@
 package jalview.ws.dbsources;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.ws.dbsources.PDBRestClient.PDBDocField;
 import jalview.ws.uimodel.PDBRestRequest;
 import jalview.ws.uimodel.PDBRestResponse;
@@ -20,9 +20,10 @@ import org.json.simple.JSONArray;
 import org.json.simple.JSONObject;
 import org.json.simple.parser.JSONParser;
 import org.json.simple.parser.ParseException;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
 import com.sun.jersey.api.client.Client;
 import com.sun.jersey.api.client.ClientResponse;
@@ -33,12 +34,12 @@ import com.sun.jersey.api.client.config.DefaultClientConfig;
 public class PDBRestClientTest
 {
 
-  @Before
+  @BeforeMethod
   public void setUp() throws Exception
   {
   }
 
-  @After
+  @AfterMethod
   public void tearDown() throws Exception
   {
   }
@@ -67,7 +68,7 @@ public class PDBRestClientTest
     } catch (Exception e)
     {
       e.printStackTrace();
-      fail("Couldn't execute webservice call!");
+      Assert.fail("Couldn't execute webservice call!");
       return;
     }
     assertTrue(response.getNumberOfItemsFound() > 99);
@@ -130,7 +131,7 @@ public class PDBRestClientTest
     assertEquals(expectedErrorMsg, parsedErrorResponse);
   }
 
-  @Test(expected = Exception.class)
+  @Test(expectedExceptions = Exception.class)
   public void testForExpectedRuntimeException() throws Exception
   {
     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
@@ -207,7 +208,7 @@ public class PDBRestClientTest
     // Check the response status and report exception if one occurs
     if (clientResponse.getStatus() != 200)
     {
-      fail("Webservice call failed!!!");
+      Assert.fail("Webservice call failed!!!");
     }
     else
     {
@@ -248,7 +249,7 @@ public class PDBRestClientTest
         }
       } catch (ParseException e)
       {
-        fail(">>>  Test failed due to exception while parsing pdb response json !!!");
+        Assert.fail(">>>  Test failed due to exception while parsing pdb response json !!!");
         e.printStackTrace();
       }
     }
index 7325527..9fba1cb 100644 (file)
@@ -1,17 +1,17 @@
 package jalview.ws.dbsources;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNull;
+
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.UniprotEntry;
 
 import java.io.Reader;
 import java.io.StringReader;
 import java.util.Vector;
 
-import org.junit.Test;
-
-import jalview.datamodel.PDBEntry;
-import jalview.datamodel.SequenceFeature;
-import jalview.datamodel.UniprotEntry;
+import org.testng.annotations.Test;
 
 public class UniprotTest
 {
index 4c67d25..a3ae56d 100644 (file)
  */
 package jalview.ws.gui;
 
+import jalview.bin.Cache;
+import jalview.gui.WsJobParameters;
+import jalview.util.MessageManager;
+import jalview.ws.jabaws.JalviewJabawsTestUtils;
+import jalview.ws.jws2.JabaPreset;
+import jalview.ws.jws2.Jws2Discoverer;
+import jalview.ws.jws2.jabaws2.Jws2Instance;
+
 import java.awt.BorderLayout;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
@@ -30,21 +38,12 @@ import java.util.List;
 import javax.swing.JFrame;
 import javax.swing.JPanel;
 
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
 
 import compbio.metadata.Preset;
 import compbio.metadata.PresetManager;
 
-import jalview.bin.Cache;
-import jalview.gui.WsJobParameters;
-import jalview.util.MessageManager;
-import jalview.ws.jabaws.JalviewJabawsTestUtils;
-import jalview.ws.jws2.JabaPreset;
-import jalview.ws.jws2.Jws2Discoverer;
-import jalview.ws.jws2.jabaws2.Jws2Instance;
-
 public class Jws2ParamView
 {
   /**
@@ -74,8 +73,8 @@ public class Jws2ParamView
    * This test marked Ignore as it appears to need user action to complete
    * rather than hang
    */
-  @Test
-  @Ignore
+
+  @Test(enabled = false)
   public void testJws2Gui()
   {
     Iterator<String> presetEnum = presetTests.iterator();
index e561479..470c39b 100644 (file)
@@ -20,9 +20,9 @@
  */
 package jalview.ws.jabaws;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.io.AnnotationFile;
@@ -35,9 +35,10 @@ import jalview.ws.jws2.jabaws2.Jws2Instance;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
 
 public class DisorderAnnotExportImport
 {
@@ -157,7 +158,7 @@ public class DisorderAnnotExportImport
     {
       e.printStackTrace();
     }
-    fail("Test "
+    Assert.fail("Test "
             + testname
             + "\nCouldn't complete Annotation file roundtrip input/output/input test.");
   }
index 72fa7a4..ec901da 100644 (file)
@@ -23,14 +23,13 @@ package jalview.ws.jabaws;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.util.Vector;
+import jalview.ws.jws2.Jws2Discoverer;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
+import java.util.Vector;
 
-import jalview.ws.jws2.Jws2Discoverer;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
 
 public class JalviewJabawsTestUtils
 {
@@ -52,8 +51,7 @@ public class JalviewJabawsTestUtils
   { "http://localhost:8080/jabaws",
       "http://www.compbio.dundee.ac.uk/jabaws" };
 
-  @Test
-  @Ignore
+  @Test(enabled = false)
   public void testAnnotExport()
   {
     fail("Not yet implemented");
index 7afaeed..49a3064 100644 (file)
  */
 package jalview.ws.jabaws;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.awt.Component;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import compbio.metadata.Argument;
-import compbio.metadata.WrongParameterException;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.datamodel.AlignmentI;
 import jalview.gui.Jalview2XML;
@@ -50,6 +35,21 @@ import jalview.ws.jws2.SequenceAnnotationWSClient;
 import jalview.ws.jws2.jabaws2.Jws2Instance;
 import jalview.ws.params.AutoCalcSetting;
 
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import compbio.metadata.Argument;
+import compbio.metadata.WrongParameterException;
+
 public class JpredJabaStructExportImport
 {
   public static String testseqs = "examples/uniref50.fa";
@@ -82,7 +82,7 @@ public class JpredJabaStructExportImport
 
     if (jpredws == null)
     {
-      fail("jpredws is null");
+      Assert.fail("jpredws is null");
     }
 
     jalview.io.FileLoader fl = new jalview.io.FileLoader(false);
@@ -144,7 +144,7 @@ public class JpredJabaStructExportImport
         if (!success)
         {
           jpredClient.cancelCurrentJob();
-          fail("Jpred Client didn't run with hardwired default parameters.");
+          Assert.fail("Jpred Client didn't run with hardwired default parameters.");
         }
 
       } catch (InterruptedException x)
@@ -221,15 +221,15 @@ public class JpredJabaStructExportImport
     {
       e.printStackTrace();
     }
-    fail("Test "
+    Assert.fail("Test "
             + testname
             + "\nCouldn't complete Annotation file roundtrip input/output/input test.");
   }
 
-  // @Test
+  @Test
   public void testJpredwsSettingsRecovery()
   {
-    fail("not implemnented");
+    Assert.fail("not implemnented");
     List<compbio.metadata.Argument> opts = new ArrayList<compbio.metadata.Argument>();
     for (compbio.metadata.Argument rg : (List<compbio.metadata.Argument>) jpredws
             .getRunnerConfig().getArguments())
@@ -241,7 +241,7 @@ public class JpredJabaStructExportImport
           rg.setValue("292");
         } catch (WrongParameterException q)
         {
-          fail("Couldn't set the temperature parameter "
+          Assert.fail("Couldn't set the temperature parameter "
                   + q.getStackTrace());
         }
         opts.add(rg);
index 0c25cdb..0a50e47 100644 (file)
@@ -1,12 +1,12 @@
 package jalview.ws.jabaws;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import static org.testng.AssertJUnit.assertEquals;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Test;
+import org.testng.Assert;
+import org.testng.annotations.Test;
 
 import compbio.data.msa.MsaWS;
 import compbio.data.msa.RegistryWS;
@@ -15,7 +15,8 @@ import compbio.metadata.JobStatus;
 import compbio.ws.client.Jws2Client;
 import compbio.ws.client.Services;
 
-public class MinJabawsClientTests {
+public class MinJabawsClientTests
+{
 
        /**
         * simple test for the benefit of JAL-1338
@@ -39,7 +40,7 @@ public class MinJabawsClientTests {
                                }
                        }
                        if (msaservice == null) {
-                               fail("couldn't find a clustalO service on the public registry");
+                               Assert.fail("couldn't find a clustalO service on the public registry");
                        }
                        FastaSequence fsq = new FastaSequence("seqA",
                                        "SESESESESESESESSESESSESESESESESESESESESEEEEEESSESESESESSSSESESESESESESE");
index 1475b4e..5d9773a 100644 (file)
@@ -20,9 +20,9 @@
  */
 package jalview.ws.jabaws;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.gui.Jalview2XML;
@@ -42,10 +42,10 @@ import java.util.List;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
 
 import compbio.metadata.WrongParameterException;
 
@@ -81,7 +81,7 @@ public class RNAStructExportImport
 
     if (rnaalifoldws == null)
     {
-      fail("no web service");
+      Assert.fail("no web service");
     }
 
     jalview.io.FileLoader fl = new jalview.io.FileLoader(false);
@@ -144,7 +144,9 @@ public class RNAStructExportImport
       {
         if (aa.isRNA())
         {
-          Assert.assertTrue("Did not create valid structure from RNAALiFold prediction", aa.isValidStruc());
+          assertTrue(
+                  "Did not create valid structure from RNAALiFold prediction",
+                  aa.isValidStruc());
         }
       }
     }
@@ -216,7 +218,7 @@ public class RNAStructExportImport
     {
       e.printStackTrace();
     }
-    fail("Test "
+    Assert.fail("Test "
             + testname
             + "\nCouldn't complete Annotation file roundtrip input/output/input test.");
   }
@@ -235,7 +237,7 @@ public class RNAStructExportImport
           rg.setValue("292");
         } catch (WrongParameterException q)
         {
-          fail("Couldn't set the temperature parameter "
+          Assert.fail("Couldn't set the temperature parameter "
                   + q.getStackTrace());
         }
         opts.add(rg);
index bf1b8ee..3403446 100644 (file)
  */
 package jalview.ws.jws2;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.bin.Cache;
+import jalview.ws.jabaws.JalviewJabawsTestUtils;
+import jalview.ws.jws2.jabaws2.Jws2Instance;
 
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
 
 import compbio.metadata.Option;
 import compbio.metadata.Parameter;
@@ -37,10 +41,6 @@ import compbio.metadata.Preset;
 import compbio.metadata.PresetManager;
 import compbio.metadata.WrongParameterException;
 
-import jalview.bin.Cache;
-import jalview.ws.jabaws.JalviewJabawsTestUtils;
-import jalview.ws.jws2.jabaws2.Jws2Instance;
-
 public class ParameterUtilsTest
 {
   /*
index 66cdc42..70071a5 100644 (file)
@@ -1,12 +1,12 @@
 package jalview.ws.rest;
 
-import static org.junit.Assert.assertEquals;
+import static org.testng.AssertJUnit.assertEquals;
 
-import java.util.Vector;
+import jalview.bin.Cache;
 
-import org.junit.Test;
+import java.util.Vector;
 
-import jalview.bin.Cache;
+import org.testng.annotations.Test;
 
 public class RestClientTest
 {
index c4430ad..99135d9 100644 (file)
  */
 package jalview.ws.rest;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
 
-import java.util.Map;
+import jalview.gui.AlignFrame;
 
-import org.junit.Test;
+import java.util.Map;
 
-import jalview.gui.AlignFrame;
-import jalview.util.StringUtils;
+import org.testng.annotations.Test;
 
 /**
  * @author jimp
index 7f82252..c830f23 100644 (file)
@@ -1,8 +1,7 @@
 package jalview.ws.seqfetcher;
 
-import static org.junit.Assert.*;
-
-import org.junit.Test;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
 
 public class DasSequenceFetcher
 {
@@ -11,7 +10,7 @@ public class DasSequenceFetcher
   public void testDasRegistryContact()
   {
     jalview.bin.Cache.getDasSourceRegistry().refreshSources();
-    assertTrue(
+    AssertJUnit.assertTrue(
             "Expected to find at least one DAS source at the registry. Check config.",
             jalview.bin.Cache.getDasSourceRegistry().getSources().size() > 0);
   }
index 7540edf..d6bd4b0 100644 (file)
  */
 package jalview.ws.seqfetcher;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.analysis.CrossRef;
 import jalview.datamodel.AlignmentI;
@@ -38,6 +31,13 @@ import jalview.datamodel.DBRefSource;
 import jalview.util.DBRefUtils;
 import jalview.ws.SequenceFetcher;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
 /**
  * @author jimp
  * 
diff --git a/utils/hamcrest-core-1.3.jar b/utils/hamcrest-core-1.3.jar
new file mode 100644 (file)
index 0000000..9d5fe16
Binary files /dev/null and b/utils/hamcrest-core-1.3.jar differ
diff --git a/utils/jalview_testng.xml b/utils/jalview_testng.xml
new file mode 100644 (file)
index 0000000..6ebda65
--- /dev/null
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
+<suite name="Suite" parallel="none">
+  <test verbose="2" name="Test">
+    <classes>
+      <class name="jalview.gui.AlignViewportTest"/>
+      <class name="jalview.util.ShiftListTest"/>
+      <class name="jalview.util.ColorUtilsTest"/>
+      <class name="jalview.gui.PDBSearchPanelTest"/>
+      <class name="MCview.PDBfileTest"/>
+      <class name="jalview.io.BioJsHTMLOutputTest"/>
+      <class name="jalview.io.JSONFileTest"/>
+      <class name="jalview.ext.jmol.PDBFileWithJmolTest"/>
+      <class name="jalview.ws.jabaws.RNAStructExportImport"/>
+      <class name="jalview.ext.paradise.TestAnnotate3D"/>
+      <class name="MCview.PDBChainTest"/>
+      <class name="jalview.io.StockholmFileTest"/>
+      <class name="jalview.schemes.ScoreMatrixPrinter"/>
+      <class name="jalview.datamodel.SearchResultsTest"/>
+      <class name="jalview.ws.seqfetcher.DasSequenceFetcher"/>
+      <class name="jalview.util.DBRefUtilsTest"/>
+      <class name="jalview.analysis.CrossRefTest"/>
+      <class name="jalview.ws.jabaws.MinJabawsClientTests"/>
+      <class name="jalview.datamodel.AlignedCodonTest"/>
+      <class name="MCview.AtomTest"/>
+      <class name="jalview.gui.PopupMenuTest"/>
+      <class name="jalview.viewmodel.styles.ViewStyleTest"/>
+      <class name="jalview.io.AnnotationFileIOTest"/>
+      <class name="jalview.ws.jws2.ParameterUtilsTest"/>
+      <class name="jalview.io.RNAMLfileTest"/>
+      <class name="jalview.analysis.AlignmentUtilsTests"/>
+      <class name="jalview.gui.SequenceRendererTest"/>
+      <class name="jalview.bin.CommandLineOperations"/>
+      <class name="jalview.gui.PaintRefresherTest"/>
+      <class name="jalview.ws.seqfetcher.DbRefFetcherTest"/>
+      <class name="jalview.datamodel.AlignmentAnnotationTests"/>
+      <class name="jalview.schemes.ResiduePropertiesTest"/>
+      <class name="jalview.ext.rbvi.chimera.ChimeraCommandsTest"/>
+      <class name="MCview.ResidueTest"/>
+      <class name="jalview.io.PhylipFileTests"/>
+      <class name="jalview.util.MappingUtilsTest"/>
+      <class name="jalview.ws.jabaws.DisorderAnnotExportImport"/>
+      <class name="jalview.analysis.GroupingTest"/>
+      <class name="jalview.analysis.AnnotationSorterTest"/>
+      <class name="jalview.io.FileIOTester"/>
+      <class name="jalview.util.MapListTest"/>
+      <class name="jalview.datamodel.ColumnSelectionTest"/>
+      <class name="jalview.ext.rbvi.chimera.ChimeraConnect"/>
+      <class name="jalview.gui.ProgressBarTest"/>
+      <class name="jalview.analysis.AlignmentAnnotationUtilsTest"/>
+      <class name="jalview.structure.StructureSelectionManagerTest"/>
+      <class name="jalview.io.TCoffeeScoreFileTest"/>
+      <class name="jalview.analysis.AAFrequencyTest"/>
+      <class name="jalview.ws.dbsources.PDBRestClientTest"/>
+      <class name="jalview.analysis.DnaTest"/>
+      <class name="jalview.util.StringUtilsTest"/>
+      <class name="jalview.structures.models.AAStructureBindingModelTest"/>
+      <class name="jalview.gui.JvSwingUtilsTest"/>
+      <class name="jalview.analysis.CodingUtilsTest"/>
+      <class name="jalview.io.AnnotatedPDBFileInputTest"/>
+      <class name="jalview.ws.rest.ShmmrRSBSService"/>
+      <class name="jalview.io.NewickFileTests"/>
+      <class name="jalview.analysis.ParsePropertiesTest"/>
+      <class name="MCview.BondTest"/>
+      <class name="jalview.commands.EditCommandTest"/>
+      <class name="jalview.ext.rbvi.chimera.JalviewChimeraView"/>
+      <class name="jalview.ws.jabaws.JpredJabaStructExportImport"/>
+      <class name="jalview.gui.HelpTest"/>
+      <class name="jalview.datamodel.AlignedCodonIteratorTest"/>
+      <class name="jalview.datamodel.xdb.embl.EmblFileTest"/>
+      <class name="jalview.util.ComparisonTest"/>
+      <class name="jalview.util.QuickSortTest"/>
+      <class name="jalview.ws.PDBSequenceFetcherTest"/>
+      <class name="jalview.analysis.scoremodels.FeatureScoreModelTest"/>
+      <class name="jalview.io.Jalview2xmlTests"/>
+      <class name="jalview.ws.rest.RestClientTest"/>
+      <class name="jalview.datamodel.AlignedCodonFrameTest"/>
+      <class name="jalview.datamodel.MappingTest"/>
+      <class name="jalview.datamodel.AlignmentTest"/>
+      <class name="jalview.ws.dbsources.UniprotTest"/>
+      <class name="jalview.gui.AnnotationChooserTest"/>
+      <class name="jalview.structure.Mapping"/>
+      <class name="jalview.datamodel.SequenceTest"/>
+      <class name="jalview.datamodel.PDBEntryTest"/>
+      <class name="jalview.gui.StructureChooserTest"/>
+      <class name="jalview.schemes.DnaCodonTests"/>
+      <class name="com.stevesoft.pat.RegexWriterTest"/>
+      <class name="jalview.datamodel.DBRefEntryTest"/>
+      <class name="jalview.gui.FontChooserTest"/>
+      <class name="jalview.analysis.TestAlignSeq"/>
+      <class name="jalview.datamodel.SeqCigarTest"/>
+      <class name="jalview.gui.JAL1353bugdemo"/>
+    </classes>
+  </test> <!-- Test -->
+</suite> <!-- Suite --> 
diff --git a/utils/junit-4.12.jar b/utils/junit-4.12.jar
new file mode 100644 (file)
index 0000000..3a7fc26
Binary files /dev/null and b/utils/junit-4.12.jar differ
diff --git a/utils/testnglibs/bsh-2.0b4.jar b/utils/testnglibs/bsh-2.0b4.jar
new file mode 100644 (file)
index 0000000..36fe03d
Binary files /dev/null and b/utils/testnglibs/bsh-2.0b4.jar differ
diff --git a/utils/testnglibs/guava-base-r03.jar b/utils/testnglibs/guava-base-r03.jar
new file mode 100644 (file)
index 0000000..2323db9
Binary files /dev/null and b/utils/testnglibs/guava-base-r03.jar differ
diff --git a/utils/testnglibs/guava-collections-r03.jar b/utils/testnglibs/guava-collections-r03.jar
new file mode 100644 (file)
index 0000000..e8f908d
Binary files /dev/null and b/utils/testnglibs/guava-collections-r03.jar differ
diff --git a/utils/testnglibs/jcommander.jar b/utils/testnglibs/jcommander.jar
new file mode 100644 (file)
index 0000000..ad0a12c
Binary files /dev/null and b/utils/testnglibs/jcommander.jar differ
diff --git a/utils/testnglibs/junit-4.12.jar b/utils/testnglibs/junit-4.12.jar
new file mode 100644 (file)
index 0000000..3a7fc26
Binary files /dev/null and b/utils/testnglibs/junit-4.12.jar differ
diff --git a/utils/testnglibs/snakeyaml.jar b/utils/testnglibs/snakeyaml.jar
new file mode 100644 (file)
index 0000000..fd314d3
Binary files /dev/null and b/utils/testnglibs/snakeyaml.jar differ
diff --git a/utils/testnglibs/testng-sources.jar b/utils/testnglibs/testng-sources.jar
new file mode 100644 (file)
index 0000000..7a80303
Binary files /dev/null and b/utils/testnglibs/testng-sources.jar differ
diff --git a/utils/testnglibs/testng.jar b/utils/testnglibs/testng.jar
new file mode 100644 (file)
index 0000000..e1f127e
Binary files /dev/null and b/utils/testnglibs/testng.jar differ