## org.biojava.bio.seq
Class NewSimpleAssembly

    java.lang.Object
      org.biojava.utils.AbstractChangeable
          org.biojava.bio.seq.NewSimpleAssembly

All Implemented Interfaces:
  Annotatable, FeatureHolder, RealizingFeatureHolder, Sequence, SymbolList, Changeable

    public class NewSimpleAssembly

extends AbstractChangeable
implements Sequence, RealizingFeatureHolder

A Sequence which is assembled from other sequences contained in a set of ComponentFeature objects.

The class has been extended to handle overlapping component sequences. It is assumed that the overlaps are consistent between components: this will not be checked.

There is still some potential for optimising SymbolList operations on this class.

Since:
  1.1
Author:
  Thomas Down, Matthew Pocock, David Huen

Nested Class Summary

Nested classes/interfaces inherited from interface org.biojava.bio.seq.FeatureHolder
`FeatureHolder.EmptyFeatureHolder`

Nested classes/interfaces inherited from interface org.biojava.bio.Annotatable
`Annotatable.AnnotationForwarder`

Nested classes/interfaces inherited from interface org.biojava.bio.seq.FeatureHolder
`FeatureHolder.EmptyFeatureHolder`

Field Summary
`protected ChangeForwarder` `annotationForwarder`

Fields inherited from interface org.biojava.bio.symbol.SymbolList
`EDIT, EMPTY_LIST`

Fields inherited from interface org.biojava.bio.seq.FeatureHolder
`EMPTY_FEATURE_HOLDER, FEATURES, SCHEMA`

Fields inherited from interface org.biojava.bio.Annotatable
`ANNOTATION`

Fields inherited from interface org.biojava.bio.seq.FeatureHolder
`EMPTY_FEATURE_HOLDER, FEATURES, SCHEMA`

Constructor Summary
`NewSimpleAssembly(int length, String name, String uri)` Construct a new SimpleAssembly using the DNA alphabet.
`NewSimpleAssembly(String name, String uri)` Construct a new NewSimpleAssembly using the DNA alphabet.

Method Summary
`boolean` `containsFeature(Feature f)` Check if the feature is present in this holder.
`int` `countFeatures()` Count how many features are contained.
`Feature` `createFeature(Feature.Template temp)` Create a new Feature, and add it to this FeatureHolder.
`void` `edit(Edit e)` Apply an edit to the SymbolList as specified by the edit object.
`Iterator` `features()` Iterate over the features in no well defined order.
`FeatureHolder` `filter(FeatureFilter ff)` Query this set of features using a supplied `FeatureFilter`.
`FeatureHolder` `filter(FeatureFilter ff, boolean recurse)` Return a new FeatureHolder that contains all of the children of this one that passed the filter fc.
`Alphabet` `getAlphabet()` The alphabet that this SymbolList is over.
`Annotation` `getAnnotation()` Should return the associated annotation object.
`protected ChangeSupport` `getChangeSupport(ChangeType ct)` Called to retrieve the ChangeSupport for this object.
`String` `getName()` The name of this sequence.
`FeatureFilter` `getSchema()` Return a schema-filter for this `FeatureHolder`.
`String` `getURN()` A Uniform Resource Identifier (URI) which identifies the sequence represented by this object.
`Iterator` `iterator()` An Iterator over all Symbols in this SymbolList.
`int` `length()` The number of symbols in this SymbolList.
`Feature` `realizeFeature(FeatureHolder fh, Feature.Template temp)` Realize a feature template.
`void` `removeFeature(Feature f)` Remove a feature from this FeatureHolder.
`String` `seqString()` Stringify this symbol list.
`SymbolList` `subList(int start, int end)` Return a new SymbolList for the symbols start to end inclusive.
`String` `subStr(int start, int end)` Return a region of this symbol list as a String.
`Symbol` `symbolAt(int pos)` Return the symbol at index, counting from 1.
`List` `toList()` Returns a List of symbols.

Methods inherited from class org.biojava.utils.AbstractChangeable
`addChangeListener, addChangeListener, generateChangeSupport, hasListeners, hasListeners, isUnchanging, removeChangeListener, removeChangeListener`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Methods inherited from interface org.biojava.utils.Changeable
`addChangeListener, addChangeListener, isUnchanging, removeChangeListener, removeChangeListener`

Methods inherited from interface org.biojava.utils.Changeable
`addChangeListener, addChangeListener, isUnchanging, removeChangeListener, removeChangeListener`

Methods inherited from interface org.biojava.utils.Changeable
`addChangeListener, addChangeListener, isUnchanging, removeChangeListener, removeChangeListener`

Methods inherited from interface org.biojava.utils.Changeable
`addChangeListener, addChangeListener, isUnchanging, removeChangeListener, removeChangeListener`

Field Detail

### annotationForwarder

    protected transient ChangeForwarder annotationForwarder

Constructor Detail

### NewSimpleAssembly

    public NewSimpleAssembly(int length,
                             String name,
                             String uri)

  Construct a new SimpleAssembly using the DNA alphabet. Initially, the sequence will just contain a list of `N's. Sequence data can be added by adding one or more ComponentFeatures.

  Parameters:
    `length` - The length of the sequence
    `name` - The name of the sequence (returned by getName())
    `uri` - The identifier of the sequence (returned by getURN());

### NewSimpleAssembly

    public NewSimpleAssembly(String name,
                             String uri)

  Construct a new NewSimpleAssembly using the DNA alphabet. Initially, the sequence will just contain a list of `N's. Sequence data can be added by adding one or more ComponentFeatures.

  Parameters:
    `name` - The name of the sequence (returned by getName())
    `uri` - The identifier of the sequence (returned by getURN());

Method Detail

### getAlphabet

    public Alphabet getAlphabet()

  Description copied from interface: `SymbolList`
  The alphabet that this SymbolList is over.

  Every symbol within this SymbolList is a member of this alphabet. `alphabet.contains(symbol) == true` for each symbol that is within this sequence.

  Specified by:
    `getAlphabet` in interface `SymbolList`
  Returns:
    the alphabet

### length

    public int length()

  Description copied from interface: `SymbolList`
  The number of symbols in this SymbolList.

  Specified by:
    `length` in interface `SymbolList`
  Returns:
    the length

### symbolAt

    public Symbol symbolAt(int pos)

  Description copied from interface: `SymbolList`
  Return the symbol at index, counting from 1.

  Specified by:
    `symbolAt` in interface `SymbolList`
  Parameters:
    `pos` - the offset into this SymbolList
  Returns:
    the Symbol at that index

### subList

    public SymbolList subList(int start,
                              int end)

  Description copied from interface: `SymbolList`
  Return a new SymbolList for the symbols start to end inclusive.

  The resulting SymbolList will count from 1 to (end-start + 1) inclusive, and refer to the symbols start to end of the original sequence.

  Specified by:
    `subList` in interface `SymbolList`
  Parameters:
    `start` - the first symbol of the new SymbolList
    `end` - the last symbol (inclusive) of the new SymbolList

### seqString

    public String seqString()

  Description copied from interface: `SymbolList`
  Stringify this symbol list.

  It is expected that this will use the symbol's token to render each symbol. It should be parsable back into a SymbolList using the default token parser for this alphabet.

  Specified by:
    `seqString` in interface `SymbolList`
  Returns:
    a string representation of the symbol list

### subStr

    public String subStr(int start,
                         int end)

  Description copied from interface: `SymbolList`
  Return a region of this symbol list as a String.

  This should use the same rules as seqString.

  Specified by:
    `subStr` in interface `SymbolList`
  Parameters:
    `start` - the first symbol to include
    `end` - the last symbol to include
  Returns:
    the string representation

### iterator

    public Iterator iterator()

  Description copied from interface: `SymbolList`
  An Iterator over all Symbols in this SymbolList.

  This is an ordered iterator over the Symbols. It cannot be used to edit the underlying symbols.

  Specified by:
    `iterator` in interface `SymbolList`
  Returns:
    an iterator

### toList

    public List toList()

  Description copied from interface: `SymbolList`
  Returns a List of symbols.

  This is an immutable list of symbols. Do not edit it.

  Specified by:
    `toList` in interface `SymbolList`
  Returns:
    a List of Symbols

### edit

    public void edit(Edit e)
              throws IllegalAlphabetException,
                     ChangeVetoException

  Description copied from interface: `SymbolList`
  Apply an edit to the SymbolList 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

  `

       SymbolList seq = DNATools.createDNA("atcaaaaacgctagc");
       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 `SymbolList`
  Parameters:
    `e` - the Edit to perform
  Throws:
    `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

### getName

    public String getName()

  Description copied from interface: `Sequence`
  The name of this sequence.

  The name may contain spaces or odd characters.

  Specified by:
    `getName` in interface `Sequence`
  Returns:
    the name as a String

### getURN

    public String getURN()

  Description copied from interface: `Sequence`
  A Uniform Resource Identifier (URI) which identifies the sequence represented by this object. For sequences in well-known database, this may be a URN, e.g.

       urn:sequence/embl:AL121903

  It may also be a URL identifying a specific resource, either locally or over the network

       file:///home/thomas/myseq.fa|seq22
       http://www.mysequences.net/chr22.seq

  Specified by:
    `getURN` in interface `Sequence`
  Returns:
    the URI as a String

### getAnnotation

    public Annotation getAnnotation()

  Description copied from interface: `Annotatable`
  Should return the associated annotation object.

  Specified by:
    `getAnnotation` in interface `Annotatable`
  Returns:
    an Annotation object, never null

### features

    public Iterator features()

  Description copied from interface: `FeatureHolder`
  Iterate over the features in no well defined order.

  Specified by:
    `features` in interface `FeatureHolder`
  Returns:
    an Iterator

### countFeatures

    public int countFeatures()

  Description copied from interface: `FeatureHolder`
  Count how many features are contained.

  Specified by:
    `countFeatures` in interface `FeatureHolder`
  Returns:
    a positive integer or zero, equal to the number of features contained

### filter

    public FeatureHolder filter(FeatureFilter ff,
                                boolean recurse)

  Description copied from interface: `FeatureHolder`
  Return a new FeatureHolder that contains all of the children of this one that passed the filter fc. This method is scheduled for deprecation. Use the 1-arg filter instead.

  Specified by:
    `filter` in interface `FeatureHolder`
  Parameters:
    `ff` - the FeatureFilter to apply
    `recurse` - true if all features-of-features should be scanned, and a single flat collection of features returned, or false if just immediate children should be filtered.

### filter

    public FeatureHolder filter(FeatureFilter ff)

  Description copied from interface: `FeatureHolder`
  Query this set of features using a supplied `FeatureFilter`.

  Specified by:
    `filter` in interface `FeatureHolder`
  Parameters:
    `ff` - the `FeatureFilter` to apply.
  Returns:
    all features in this container which match `filter`.

### containsFeature

    public boolean containsFeature(Feature f)

  Description copied from interface: `FeatureHolder`
  Check if the feature is present in this holder.

  Specified by:
    `containsFeature` in interface `FeatureHolder`
  Parameters:
    `f` - the Feature to check
  Returns:
    true if f is in this set

### createFeature

    public Feature createFeature(Feature.Template temp)
                          throws BioException,
                                 ChangeVetoException

  Description copied from interface: `FeatureHolder`
  Create a new Feature, and add it to this FeatureHolder. This method will generally only work on Sequences, and on some Features which have been attached to Sequences.

  Specified by:
    `createFeature` in interface `FeatureHolder`
  Throws:
    `BioException` - if something went wrong during creating the feature
    `ChangeVetoException` - if this FeatureHolder does not support creation of new features, or if the change was vetoed

### removeFeature

    public void removeFeature(Feature f)
                       throws ChangeVetoException

  Description copied from interface: `FeatureHolder`
  Remove a feature from this FeatureHolder.

  Specified by:
    `removeFeature` in interface `FeatureHolder`
  Throws:
    `ChangeVetoException` - if this FeatureHolder does not support feature removal or if the change was vetoed

### realizeFeature

    public Feature realizeFeature(FeatureHolder fh,
                                  Feature.Template temp)
                           throws BioException

  Description copied from interface: `RealizingFeatureHolder`
  Realize a feature template. This will be a template which has been passed to the `createFeature` method of either this `FeatureHolder` or one of our child Features.

  Specified by:
    `realizeFeature` in interface `RealizingFeatureHolder`
  Throws:
    `BioException`

### getChangeSupport

    protected ChangeSupport getChangeSupport(ChangeType ct)

  Description copied from class: `AbstractChangeable`
  Called to retrieve the ChangeSupport for this object.

  Your implementation of this method should have the following structure: ``

       ChangeSupport cs = super.getChangeSupport(ct);

       if(someForwarder == null && ct.isMatching(SomeInterface.SomeChangeType)) {
         someForwarder = new ChangeForwarder(...

         this.stateVariable.addChangeListener(someForwarder, VariableInterface.AChange);
       }

       return cs;

  It is usual for the forwarding listeners (someForwarder in this example) to be transient and lazily instantiated. Be sure to register & unregister the forwarder in the code that does the ChangeEvent handling in setter methods.

  Overrides:
    `getChangeSupport` in class `AbstractChangeable`

### getSchema

    public FeatureFilter getSchema()

  Description copied from interface: `FeatureHolder`
  Return a schema-filter for this `FeatureHolder`. This is a filter which all `Feature`s immediately contained by this `FeatureHolder` will match. It need not directly match their child features, but it can (and should!) provide information about them using `FeatureFilter.OnlyChildren` filters. In cases where there is no feature hierarchy, this can be indicated by including `FeatureFilter.leaf` in the schema filter.

  For the truly non-informative case, it is possible to return `FeatureFilter.all`. However, it is almost always possible to provide slightly more information that this. For example, `Sequence` objects should, at a minimum, return `FeatureFilter.top_level`. `Feature` objects should, as a minimum, return `FeatureFilter.ByParent(new FeatureFilter.ByFeature(this))`.

  Specified by:
    `getSchema` in interface `FeatureHolder`
  Returns:
    the schema filter