/*
* 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 .
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.io;
import static org.testng.AssertJUnit.assertTrue;
import jalview.analysis.CrossRef;
import jalview.api.AlignmentViewPanel;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.SequenceI;
import jalview.gui.AlignFrame;
import jalview.gui.CrossRefAction;
import jalview.gui.Desktop;
import java.util.IdentityHashMap;
import java.util.List;
import org.testng.Assert;
import org.testng.annotations.Test;
@Test(singleThreaded = true)
public class CrossRef2xmlTests extends Jalview2xmlBase
{
/**
* test store and recovery of expanded views
*
* @throws Exception
*/
@Test(groups = { "Operational" }, enabled = true)
public void testRetrieveAndShowCrossref() throws Exception
{
// for every set of db queries
// retrieve db query
// verify presence of expected xrefs
// show xrefs - verify expected type of frame is shown for each xref
// show xrefs again
// - verify original -> xref -> xref(original) recovers frame containing at
// least the first retrieved sequence
// store
// 1. whole project
// 2. individual frames
// 3. load each one back and verify
// . aligned sequences (.toString() )
// . xrefs (.toString() )
// . codonframes
//
//
for (String[] did : new String[][] { { "UNIPROT", "P01731" } })
{
AlignFrame af = jalview.gui.SequenceFetcher.fetchAndShow(did[0],
did[1]).get(0);
assertTrue("Didn't read in the example file correctly.", af != null);
boolean dna = af.getViewport().getAlignment().isNucleotide();
AlignmentI retral = af.getViewport().getAlignment();
AlignmentI dataset = retral.getDataset();
SequenceI[] seqs = retral.getSequencesArray();
List ptypes = (seqs == null || seqs.length == 0) ? null
: new CrossRef(seqs, dataset)
.findXrefSourcesForSequences(dna);
/*
* map between a view, and views generated after retrieving xrefs
*/
IdentityHashMap> viewxrefview = new IdentityHashMap>();
/*
* map between a particular view and it's originating dbref path
*/
IdentityHashMap viewsourcedb = new IdentityHashMap();
String first = did[0] + " " + did[1];
viewsourcedb.put(af.alignPanel, first);
for (String db : ptypes)
{
// retrieve and show cross-refs in this thread
CrossRefAction cra = new CrossRefAction(af, seqs, dna, db);
cra.run();
Assert.assertTrue(cra.getXrefViews().size() > 0,
"No crossrefs retrieved for " + db);
viewxrefview.put(af.alignPanel, cra.getXrefViews());
for (AlignmentViewPanel avp : cra.getXrefViews())
{
SequenceI[] xrseqs = avp.getAlignment().getSequencesArray();
String nextxref = first + " -> " + db;
viewsourcedb.put(avp, nextxref);
List xrptypes = (seqs == null || seqs.length == 0) ? null
: new CrossRef(xrseqs, dataset)
.findXrefSourcesForSequences(avp
.getAlignViewport().isNucleotide());
for (String xrefdb : xrptypes)
{
AlignFrame nextaf = Desktop.getAlignFrameFor(avp
.getAlignViewport());
cra = new CrossRefAction(nextaf, xrseqs, avp.getAlignViewport()
.isNucleotide(), xrefdb);
cra.run();
Assert.assertTrue(cra.getXrefViews().size() > 0,
"No crossrefs found for '" + nextxref + "' to "
+ xrefdb + " via '" + nextaf.getTitle() + "'");
// save views for analysis
viewxrefview.put(avp, cra.getXrefViews());
for (AlignmentViewPanel nextavp : cra.getXrefViews())
{
viewsourcedb.put(nextavp, nextxref + " -> " + xrefdb);
}
}
}
}
}
Thread.sleep(50000);
}
}