Merge remote-tracking branch 'origin/develop' into features/JAL-2388OverviewWindow
authorkiramt <k.mourao@dundee.ac.uk>
Wed, 26 Apr 2017 13:36:03 +0000 (14:36 +0100)
committerkiramt <k.mourao@dundee.ac.uk>
Wed, 26 Apr 2017 13:36:03 +0000 (14:36 +0100)
1  2 
src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java
src/jalview/io/JSONFile.java
test/jalview/io/JSONFileTest.java

@@@ -25,7 -25,7 +25,7 @@@ import jalview.api.SequenceRenderer
  import jalview.api.structures.JalviewStructureDisplayI;
  import jalview.bin.Cache;
  import jalview.datamodel.AlignmentI;
 -import jalview.datamodel.ColumnSelection;
 +import jalview.datamodel.HiddenColumns;
  import jalview.datamodel.PDBEntry;
  import jalview.datamodel.SearchResultMatchI;
  import jalview.datamodel.SearchResultsI;
@@@ -172,8 -172,6 +172,6 @@@ public abstract class JalviewChimeraBin
        if (getSsm() != null)
        {
          getSsm().addStructureViewerListener(this);
-         // ssm.addSelectionListener(this);
-         refreshGUI();
        }
        return true;
      } catch (Exception q)
     */
    @Override
    public String superposeStructures(AlignmentI[] _alignment,
 -          int[] _refStructure, ColumnSelection[] _hiddenCols)
 +          int[] _refStructure, HiddenColumns[] _hiddenCols)
    {
      StringBuilder allComs = new StringBuilder(128);
      String[] files = getPdbFile();
      {
        int refStructure = _refStructure[a];
        AlignmentI alignment = _alignment[a];
 -      ColumnSelection hiddenCols = _hiddenCols[a];
 +      HiddenColumns hiddenCols = _hiddenCols[a];
  
        if (refStructure >= files.length)
        {
@@@ -32,7 -32,7 +32,7 @@@ import jalview.bin.BuildDetails
  import jalview.datamodel.AlignmentAnnotation;
  import jalview.datamodel.AlignmentI;
  import jalview.datamodel.Annotation;
 -import jalview.datamodel.ColumnSelection;
 +import jalview.datamodel.HiddenColumns;
  import jalview.datamodel.HiddenSequences;
  import jalview.datamodel.Sequence;
  import jalview.datamodel.SequenceFeature;
@@@ -83,7 -83,9 +83,7 @@@ public class JSONFile extends AlignFil
  
    private FeatureRenderer fr;
  
 -  private List<int[]> hiddenColumns;
 -
 -  private ColumnSelection columnSelection;
 +  private HiddenColumns hiddenColumns;
  
    private List<String> hiddenSeqRefs;
  
      // hidden column business
      if (getViewport().hasHiddenColumns())
      {
 -      List<int[]> hiddenCols = getViewport().getColumnSelection()
 -              .getHiddenColumns();
 +      List<int[]> hiddenCols = getViewport().getAlignment()
 +              .getHiddenColumns()
 +              .getHiddenRegions();
        StringBuilder hiddenColsBuilder = new StringBuilder();
        for (int[] range : hiddenCols)
        {
      String hiddenCols = (String) jvSettingsJson.get("hiddenCols");
      if (hiddenCols != null && !hiddenCols.isEmpty())
      {
 -      columnSelection = new ColumnSelection();
 +      hiddenColumns = new HiddenColumns();
        String[] rangeStrings = hiddenCols.split(";");
        for (String rangeString : rangeStrings)
        {
          String[] range = rangeString.split("-");
 -        columnSelection.hideColumns(Integer.valueOf(range[0]),
 +        hiddenColumns.hideColumns(Integer.valueOf(range[0]),
                  Integer.valueOf(range[1]));
        }
      }
          }
        }
      }
-     globalColourScheme = viewport.getGlobalColourScheme().getSchemeName();
+     globalColourScheme = (viewport.getGlobalColourScheme() == null) ? ResidueColourScheme.NONE
+             : viewport.getGlobalColourScheme().getSchemeName();
      setDisplayedFeatures(viewport.getFeaturesDisplayed());
      showSeqFeatures = viewport.isShowSequenceFeatures();
  
      return annotations;
    }
  
 -  public List<int[]> getHiddenColumns()
 -  {
 -    return hiddenColumns;
 -  }
 -
    @Override
 -  public ColumnSelection getColumnSelection()
 +  public HiddenColumns getHiddenColumns()
    {
 -    return columnSelection;
 +    return hiddenColumns;
    }
  
 -  public void setColumnSelection(ColumnSelection columnSelection)
 +  public void setHiddenColumns(HiddenColumns hidden)
    {
 -    this.columnSelection = columnSelection;
 +    this.hiddenColumns = hidden;
    }
  
    @Override
@@@ -27,7 -27,7 +27,7 @@@ import jalview.datamodel.Alignment
  import jalview.datamodel.AlignmentAnnotation;
  import jalview.datamodel.AlignmentI;
  import jalview.datamodel.Annotation;
 -import jalview.datamodel.ColumnSelection;
 +import jalview.datamodel.HiddenColumns;
  import jalview.datamodel.Sequence;
  import jalview.datamodel.SequenceFeature;
  import jalview.datamodel.SequenceGroup;
@@@ -36,6 -36,7 +36,7 @@@ import jalview.gui.AlignFrame
  import jalview.gui.JvOptionPane;
  import jalview.json.binding.biojson.v1.ColourSchemeMapper;
  import jalview.schemes.ColourSchemeI;
+ import jalview.schemes.ResidueColourScheme;
  
  import java.io.IOException;
  import java.util.ArrayList;
@@@ -78,7 -79,7 +79,7 @@@ public class JSONFileTes
  
    private HashMap<String, SequenceGroup> expectedGrps = new HashMap<String, SequenceGroup>();
  
 -  private ColumnSelection expectedColSel = new ColumnSelection();
 +  private HiddenColumns expectedColSel = new HiddenColumns();
  
    private SequenceI[] expectedHiddenSeqs = new SequenceI[1];
  
@@@ -90,6 -91,8 +91,8 @@@
  
    private JSONFile jf;
  
+   private AlignExportSettingI exportSettings;
    @BeforeTest(alwaysRun = true)
    public void setup() throws Exception
    {
      TEST_SEQ_HEIGHT = expectedSeqs.size();
      TEST_GRP_HEIGHT = expectedGrps.size();
      TEST_ANOT_HEIGHT = expectedAnnots.size();
 -    TEST_CS_HEIGHT = expectedColSel.getHiddenColumns().size();
 +    TEST_CS_HEIGHT = expectedColSel.getHiddenRegions().size();
  
-     AlignExportSettingI exportSettings = new AlignExportSettingI()
+     exportSettings = new AlignExportSettingI()
      {
        @Override
        public boolean isExportHiddenSequences()
        jf = (JSONFile) formatAdapter.getAlignFile();
  
        AlignFrame af = new AlignFrame(alignment, jf.getHiddenSequences(),
 -              jf.getColumnSelection(), AlignFrame.DEFAULT_WIDTH,
 +              jf.getHiddenColumns(), AlignFrame.DEFAULT_WIDTH,
                AlignFrame.DEFAULT_HEIGHT);
        af.getViewport().setShowSequenceFeatures(jf.isShowSeqFeatures());
        String colourSchemeName = jf.getGlobalColourScheme();
    @Test(groups = { "Functional" })
    public void hiddenColsTest()
    {
 -    ColumnSelection cs = testJsonFile.getColumnSelection();
 +    HiddenColumns cs = testJsonFile.getHiddenColumns();
      Assert.assertNotNull(cs);
 -    Assert.assertNotNull(cs.getHiddenColumns());
 -    List<int[]> hiddenCols = cs.getHiddenColumns();
 +    Assert.assertNotNull(cs.getHiddenRegions());
 +    List<int[]> hiddenCols = cs.getHiddenRegions();
      Assert.assertEquals(hiddenCols.size(), TEST_CS_HEIGHT);
      Assert.assertEquals(hiddenCols.get(0), expectedColSel
 -            .getHiddenColumns().get(0),
 +            .getHiddenRegions().get(0),
              "Mismatched hidden columns!");
    }
  
    }
  
    @Test(groups = { "Functional" })
+   /**
+    * Test for bug JAL-2489, NPE when exporting BioJSON with global colour scheme set as 'None'
+    */
+   public void testBioJSONRoundTripWithGlobalColourSchemeSetAsNone()
+   {
+     AppletFormatAdapter formatAdapter = new AppletFormatAdapter();
+     Alignment _alignment;
+     try
+     {
+       // load example BioJSON file
+       _alignment = (Alignment) formatAdapter.readFile(TEST_JSON_FILE,
+               DataSourceType.FILE, FileFormat.Json);
+       JSONFile bioJsonFile = (JSONFile) formatAdapter.getAlignFile();
+       AlignFrame alignFrame = new AlignFrame(_alignment,
+               bioJsonFile.getHiddenSequences(),
+               bioJsonFile.getColumnSelection(), AlignFrame.DEFAULT_WIDTH,
+               AlignFrame.DEFAULT_HEIGHT);
+       // Change colour scheme to 'None' and perform round trip
+       ColourSchemeI cs = ColourSchemeMapper.getJalviewColourScheme(
+               ResidueColourScheme.NONE, _alignment);
+       alignFrame.changeColour(cs);
+       alignFrame.getViewport().setFeaturesDisplayed(
+               bioJsonFile.getDisplayedFeatures());
+       formatAdapter = new AppletFormatAdapter(alignFrame.alignPanel,
+               exportSettings);
+       // export BioJSON string
+       String jsonOutput = formatAdapter.formatSequences(FileFormat.Json,
+               alignFrame.alignPanel.getAlignment(), false);
+       // read back Alignment from BioJSON string
+       formatAdapter = new AppletFormatAdapter();
+       formatAdapter.readFile(jsonOutput, DataSourceType.PASTE,
+               FileFormat.Json);
+       // assert 'None' colour scheme is retained after round trip
+       JSONFile _bioJsonFile = (JSONFile) formatAdapter.getAlignFile();
+       Assert.assertEquals(_bioJsonFile.getGlobalColourScheme(),
+               ResidueColourScheme.NONE);
+     } catch (IOException e)
+     {
+       e.printStackTrace();
+     }
+   }
+   @Test(groups = { "Functional" })
    public void isShowSeqFeaturesSet()
    {
      Assert.assertTrue(testJsonFile.isShowSeqFeatures(),