Class BioSQLRichSequenceHandler

  • All Implemented Interfaces:
    RichSequenceHandler

    public class BioSQLRichSequenceHandler
    extends DummyRichSequenceHandler
    A handler which loads sequence data from a BioSQL database, caching it where possible. Note that this data is read-only. If you want to modify it permanently, you must use BioSQLRichSequenceDB.getRichSequence() to convert the original sequence into a proper SimpleRichSequence.
    Since:
    1.5
    Author:
    Richard Holland, David Scott
    • Constructor Detail

      • BioSQLRichSequenceHandler

        public BioSQLRichSequenceHandler​(Object session)
        Requires a Hibernate session to work correctly. The session parameter is a Hibernate Session object and must not be null. It is this session that database objects will be retrieved from/persisted to.
        See Also:
        org.hibernate.Session
    • Method Detail

      • edit

        public void edit​(RichSequence seq,
                         Edit edit)
                  throws IndexOutOfBoundsException,
                         IllegalAlphabetException,
                         ChangeVetoException
        Apply an edit to the Sequence as specified by the edit object.

        Description

        All edits can be broken down into a series of operations that change contiguous blocks of the sequence. This represent a one of those operations.

        When applied, this Edit will replace 'length' number of symbols starting a position 'pos' by the SymbolList 'replacement'. This allow to do insertions (length=0), deletions (replacement=SymbolList.EMPTY_LIST) and replacements (length>=1 and replacement.length()>=1).

        The pos and pos+length should always be valid positions on the SymbolList to:

        • be edited (between 0 and symL.length()+1).
        • To append to a sequence, pos=symL.length()+1, pos=0.
        • To insert something at the beginning of the sequence, set pos=1 and length=0.

        Examples

         RichSequence seq = //code to initialize RichSequence
         System.out.println(seq.seqString());
        
         // delete 5 bases from position 4
         Edit ed = new Edit(4, 5, SymbolList.EMPTY_LIST);
         seq.edit(ed);
         System.out.println(seq.seqString());
        
         // delete one base from the start
         ed = new Edit(1, 1, SymbolList.EMPTY_LIST);
         seq.edit(ed);
        
         // delete one base from the end
         ed = new Edit(seq.length(), 1, SymbolList.EMPTY_LIST);
         seq.edit(ed);
         System.out.println(seq.seqString());
        
         // overwrite 2 bases from position 3 with "tt"
         ed = new Edit(3, 2, DNATools.createDNA("tt"));
         seq.edit(ed);
         System.out.println(seq.seqString());
        
         // add 6 bases to the start
         ed = new Edit(1, 0, DNATools.createDNA("aattgg");
         seq.edit(ed);
         System.out.println(seq.seqString());
        
         // add 4 bases to the end
         ed = new Edit(seq.length() + 1, 0, DNATools.createDNA("tttt"));
         seq.edit(ed);
         System.out.println(seq.seqString());
        
         // full edit
         ed = new Edit(3, 2, DNATools.createDNA("aatagaa");
         seq.edit(ed);
         System.out.println(seq.seqString());
         
        Specified by:
        edit in interface RichSequenceHandler
        Overrides:
        edit in class DummyRichSequenceHandler
        edit - the Edit to perform
        Throws:
        IndexOutOfBoundsException - if the edit does not lie within the SymbolList
        IllegalAlphabetException - if the SymbolList to insert has an incompatible alphabet
        ChangeVetoException - if either the SymboList does not support the edit, or if the change was vetoed