## org.biojava.bio.seq
Interface FeatureHolder

All Superinterfaces:
  Changeable

All Known Subinterfaces:
  ComponentFeature, Feature, FramedFeature, GappedSequence, HomologyFeature, RealizingFeatureHolder, RemoteFeature, RestrictionSite, RichFeature, RichSequence, Sequence, SimilarityPairFeature, StrandedFeature

All Known Implementing Classes:
  AbstractFeatureHolder, CircularView, DummySequence, FeatureHolder.EmptyFeatureHolder, LazyFeatureHolder, LazyFilterFeatureHolder, MergeFeatureHolder, NewSimpleAssembly, PhredSequence, ProjectedFeature, ProjectedFeatureHolder, RevCompSequence, SimpleAssembly, SimpleFeature, SimpleFeatureHolder, SimpleFramedFeature, SimpleGappedSequence, SimpleHomologyFeature, SimpleRemoteFeature, SimpleRestrictionSite, SimpleRichFeature, SimpleRichSequence, SimpleSequence, SimpleSimilarityPairFeature, SimpleStrandedFeature, SubSequence, ThinRichSequence, ViewSequence

    public interface FeatureHolder

extends Changeable

The interface for objects that contain features.

Feature holders abstract the containment of a feature from the objects that implements both the real container or the features. FeatureHolders are like sets of features.

Author:
  Matthew Pocock, Thomas Down
See Also:
  `RichFeatureRelationshipHolder`

Nested Class Summary
`static class` `FeatureHolder.EmptyFeatureHolder`

Field Summary
`static FeatureHolder` `EMPTY_FEATURE_HOLDER`
`static ChangeType` `FEATURES` Signals that features have been added or removed directly within this FeatureHolder.
`static ChangeType` `SCHEMA` Signals that the schema of this FeatureHolder has changed.

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 ft)` Create a new Feature, and add it to this FeatureHolder.
`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 fc, boolean recurse)` Return a new FeatureHolder that contains all of the children of this one that passed the filter fc.
`FeatureFilter` `getSchema()` Return a schema-filter for this `FeatureHolder`.
`void` `removeFeature(Feature f)` Remove a feature from this FeatureHolder.

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

Field Detail

### FEATURES

    static final ChangeType FEATURES

  Signals that features have been added or removed directly within this FeatureHolder.

### SCHEMA

    static final ChangeType SCHEMA

  Signals that the schema of this FeatureHolder has changed.

  Since:
    1.3

### EMPTY_FEATURE_HOLDER

    static final FeatureHolder EMPTY_FEATURE_HOLDER

Method Detail

### countFeatures

    int countFeatures()

  Count how many features are contained.

  Returns:
    a positive integer or zero, equal to the number of features contained

### features

    Iterator<Feature> features()

  Iterate over the features in no well defined order.

  Returns:
    an Iterator

### filter

    FeatureHolder filter(FeatureFilter fc,
                         boolean recurse)

  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.

  Parameters:
    `fc` - 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

    FeatureHolder filter(FeatureFilter filter)

  Query this set of features using a supplied `FeatureFilter`.

  Parameters:
    `filter` - the `FeatureFilter` to apply.
  Returns:
    all features in this container which match `filter`.

### createFeature

    Feature createFeature(Feature.Template ft)
                          throws BioException,
                                 ChangeVetoException

  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.

  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

    void removeFeature(Feature f)
                       throws ChangeVetoException,
                              BioException

  Remove a feature from this FeatureHolder.

  Throws:
    `ChangeVetoException` - if this FeatureHolder does not support feature removal or if the change was vetoed
    `BioException` - if there was an error removing the feature

### containsFeature

    boolean containsFeature(Feature f)

  Check if the feature is present in this holder.

  Parameters:
    `f` - the Feature to check
  Returns:
    true if f is in this set
  Since:
    1.2

### getSchema

    FeatureFilter getSchema()

  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))`.

  Returns:
    the schema filter
  Since:
    1.3