/*
* 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.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 jalview.analysis.CrossRef;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.DBRefSource;
import jalview.util.DBRefUtils;
import jalview.ws.SequenceFetcher;
/**
* @author jimp
*
*/
public class DbRefFetcherTest
{
/**
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception
{
jalview.bin.Cache.initLogger();
}
/**
* @throws java.lang.Exception
*/
@AfterClass
public static void tearDownAfterClass() throws Exception
{
}
@Test
public void testStandardProtDbs()
{
String[] defdb = DBRefSource.PROTEINDBS;
List srces = new ArrayList();
for (String ddb : defdb)
{
SequenceFetcher sfetcher = new SequenceFetcher();
List srcesfordb = sfetcher.getSourceProxy(ddb);
if (srcesfordb != null)
{
srces.addAll(srcesfordb);
}
}
DbSourceProxy uniprot = null;
int i = 0;
// append the selected sequence sources to the default dbs
for (DbSourceProxy s : srces)
{
if (s.getDbSource().equalsIgnoreCase(DBRefSource.UNIPROT))
{
i++;
}
if (s instanceof jalview.ws.dbsources.Uniprot)
{
uniprot = s;
break;
}
}
assertTrue("Failed to find Uniprot source as first source amongst "
+ srces.size() + " sources (source was at position " + i + ")",
uniprot != null && i < 2);
}
@Test
public void testEmblUniprotProductRecovery() throws Exception
{
String retrievalId = "CAA23748"; // "V00488";
DbSourceProxy embl = new SequenceFetcher().getSourceProxy(DBRefSource.EMBL).get(0);
assertNotNull("Couldn't find the EMBL retrieval client", embl);
verifyProteinNucleotideXref(retrievalId, embl);
}
@Test
public void testEmblCDSUniprotProductRecovery() throws Exception
{
String retrievalId = "AAH29712";
DbSourceProxy embl = new SequenceFetcher().getSourceProxy(
DBRefSource.EMBLCDS).get(0);
assertNotNull("Couldn't find the EMBL retrieval client", embl);
verifyProteinNucleotideXref(retrievalId, embl);
}
private void verifyProteinNucleotideXref(String retrievalId,
DbSourceProxy embl) throws Exception
{
AlignmentI alsq = embl.getSequenceRecords(retrievalId);
assertNotNull("Couldn't find the EMBL record " + retrievalId, alsq);
assertEquals("Didn't retrieve right number of records", 1, alsq.getHeight());
DBRefEntry[] dr = DBRefUtils.selectRefs(alsq.getSequenceAt(0).getDBRef(), DBRefSource.PROTEINSEQ);
assertNotNull(dr);
assertEquals("Expected a single Uniprot cross reference", 1, dr.length);
assertEquals("Expected cross refernce map to be one amino acid", dr[0]
.getMap().getMappedWidth(), 1);
assertEquals("Expected local refernce map to be 3 nucleotides", dr[0]
.getMap().getWidth(), 3);
AlignmentI sprods = CrossRef.findXrefSequences(alsq.getSequencesArray(), true, dr[0].getSource(), alsq.getDataset());
assertNotNull(
"Couldn't recover cross reference sequence from dataset. Was it ever added ?",
sprods);
}
}