public class SimpleSequence extends AbstractChangeable implements Sequence, RealizingFeatureHolder, Serializable
Sequence interface.
This class now implements all methods in the SymbolList interface by delegating to another SymbolList object. This avoids unnecessary copying, but means that any changes in the underlying SymbolList will be silently reflected in the SimpleSequence. In general, SimpleSequences should only be constructed from SymbolLists which are known to be immutable.
By default, features attached to a SimpleSequence are realized as simple
in-memory implementations using SimpleFeatureRealizer.DEFAULT.
If you need alternative feature realization behaviour, any
FeatureRealizer implementation may be supplied at
construction-time.
SimpleRichSequenceAnnotatable.AnnotationForwarderFeatureHolder.EmptyFeatureHolderEDIT, EMPTY_LISTANNOTATIONEMPTY_FEATURE_HOLDER, FEATURES, SCHEMA| Constructor and Description |
|---|
SimpleSequence(SymbolList sym,
String urn,
String name,
Annotation annotation)
Create a SimpleSequence with the symbols and alphabet of sym, and the
sequence properties listed.
|
SimpleSequence(SymbolList sym,
String urn,
String name,
Annotation annotation,
FeatureRealizer realizer)
Create a SimpleSequence using a specified FeatureRealizer.
|
| Modifier and Type | Method and Description |
|---|---|
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 template)
Create a new Feature, and add it to this FeatureHolder.
|
Feature |
createFeature(FeatureHolder fh,
Feature.Template template)
Deprecated.
Please use new 1-arg createFeature instead.
|
void |
edit(Edit edit)
Apply an edit to the SymbolList as specified by the edit object.
|
protected boolean |
featureHolderAllocated() |
Iterator<Feature> |
features()
Iterate over the features in no well defined order.
|
FeatureHolder |
filter(FeatureFilter filter)
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.
|
protected SimpleFeatureHolder |
getFeatureHolder() |
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 parent,
Feature.Template template)
Realize a feature template.
|
void |
removeFeature(Feature f)
Remove a feature attached to this sequence.
|
String |
seqString()
Stringify this symbol list.
|
void |
setName(String name)
Assign a name to this sequence
|
void |
setURN(String urn)
Provide the URN for this sequence
|
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 index)
Return the symbol at index, counting from 1.
|
List |
toList()
Returns a List of symbols.
|
String |
toString() |
addChangeListener, addChangeListener, generateChangeSupport, hasListeners, hasListeners, isUnchanging, removeChangeListener, removeChangeListenerclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitaddChangeListener, addChangeListener, isUnchanging, removeChangeListener, removeChangeListenerpublic SimpleSequence(SymbolList sym, String urn, String name, Annotation annotation)
sym - the SymbolList to wrap as a sequenceurn - the URNname - the name - should be unique if practicalannotation - the annotation object to use or nullpublic SimpleSequence(SymbolList sym, String urn, String name, Annotation annotation, FeatureRealizer realizer)
sym - the SymbolList to wrap as a sequenceurn - the URNname - the name - should be unique if practicalannotation - the annotation object to use or nullrealizer - the FeatureRealizer implemetation to use when adding featurespublic boolean containsFeature(Feature f)
FeatureHoldercontainsFeature in interface FeatureHolderf - the Feature to checkpublic int countFeatures()
FeatureHoldercountFeatures in interface FeatureHolderpublic Feature createFeature(Feature.Template template) throws BioException, ChangeVetoException
FeatureHoldercreateFeature in interface FeatureHolderBioException - if something went wrong during creating the featureChangeVetoException - if this FeatureHolder does not support
creation of new features, or if the change was vetoedpublic Feature createFeature(FeatureHolder fh, Feature.Template template) throws BioException, ChangeVetoException
BioExceptionChangeVetoExceptionpublic void edit(Edit edit) throws ChangeVetoException
SymbolListAll 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:
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());
edit in interface SymbolListedit - the Edit to performChangeVetoException - if either the SymboList does not support the
edit, or if the change was vetoedprotected boolean featureHolderAllocated()
public Iterator<Feature> features()
FeatureHolderfeatures in interface FeatureHolderpublic FeatureHolder filter(FeatureFilter filter)
FeatureHolderFeatureFilter.filter in interface FeatureHolderfilter - the FeatureFilter to apply.filter.public FeatureHolder filter(FeatureFilter ff, boolean recurse)
FeatureHolderfilter in interface FeatureHolderff - the FeatureFilter to applyrecurse - 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.public Alphabet getAlphabet()
SymbolList
Every symbol within this SymbolList is a member of this alphabet.
alphabet.contains(symbol) == true
for each symbol that is within this sequence.
getAlphabet in interface SymbolListpublic Annotation getAnnotation()
AnnotatablegetAnnotation in interface Annotatableprotected ChangeSupport getChangeSupport(ChangeType ct)
AbstractChangeable
Your implementation of this method should have the following structure:
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.
ChangeSupport cs = super.getChangeSupport(ct);
if(someForwarder == null && ct.isMatching(SomeInterface.SomeChangeType)) {
someForwarder = new ChangeForwarder(...
this.stateVariable.addChangeListener(someForwarder, VariableInterface.AChange);
}
return cs;
getChangeSupport in class AbstractChangeableprotected SimpleFeatureHolder getFeatureHolder()
public String getName()
SequenceThe name may contain spaces or odd characters.
public FeatureFilter getSchema()
FeatureHolderFeatureHolder. This is a filter
which all Features 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)).
getSchema in interface FeatureHolderpublic String getURN()
Sequenceurn:sequence/embl:AL121903It 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
public Iterator iterator()
SymbolListThis is an ordered iterator over the Symbols. It cannot be used to edit the underlying symbols.
iterator in interface SymbolListpublic int length()
SymbolListlength in interface SymbolListpublic Feature realizeFeature(FeatureHolder parent, Feature.Template template) throws BioException
RealizingFeatureHoldercreateFeature method of either
this FeatureHolder or one of our child Features.realizeFeature in interface RealizingFeatureHolderBioExceptionpublic void removeFeature(Feature f) throws ChangeVetoException, BioException
removeFeature in interface FeatureHolderChangeVetoException - if this FeatureHolder does not support
feature removal or if the change was vetoedBioException - if there was an error removing the featurepublic String seqString()
SymbolListIt 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.
seqString in interface SymbolListpublic SymbolList subList(int start, int end)
SymbolListThe resulting SymbolList will count from 1 to (end-start + 1) inclusive, and refer to the symbols start to end of the original sequence.
subList in interface SymbolListstart - the first symbol of the new SymbolListend - the last symbol (inclusive) of the new SymbolListpublic String subStr(int start, int end)
SymbolListThis should use the same rules as seqString.
subStr in interface SymbolListstart - the first symbol to includeend - the last symbol to includepublic Symbol symbolAt(int index)
SymbolListsymbolAt in interface SymbolListindex - the offset into this SymbolListpublic List toList()
SymbolListThis is an immutable list of symbols. Do not edit it.
toList in interface SymbolListCopyright © 2020 BioJava. All rights reserved.