## org.biojava.bio.seq
Class MergeFeatureHolder

    java.lang.Object
      org.biojava.utils.AbstractChangeable
          org.biojava.bio.seq.AbstractFeatureHolder
              org.biojava.bio.seq.MergeFeatureHolder

All Implemented Interfaces:
  Serializable, FeatureHolder, Changeable

    public class MergeFeatureHolder

extends AbstractFeatureHolder
implements Serializable

FeatureHolder which exposes all the features in a set of sub-FeatureHolders. This is provided primarily as a support class for ViewSequence. It may also be useful for other applications, such as simple distributed annotation systems.

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

Nested Class Summary

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

Field Summary

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

Constructor Summary
`MergeFeatureHolder()` Create a new, empty, MergeFeatureHolder.

Method Summary
`void` `addFeatureHolder(FeatureHolder fh)` Add an extra FeatureHolder to the set of FeatureHolders which are merged.
`boolean` `containsFeature(Feature f)` Check if the feature is present in this holder.
`int` `countFeatures()` Count how many features are contained.
`Iterator` `features()` Iterate over all the features in all child FeatureHolders.
`FeatureHolder` `filter(FeatureFilter ff, boolean recurse)` When applied to a MergeFeatureHolder, this filters each child FeatureHolder independently.
`FeatureFilter` `getSchema()` Return a schema-filter for this `FeatureHolder`.
`void` `removeFeatureHolder(FeatureHolder fh)` Remove a FeatureHolder from the set of FeatureHolders which are merged.

Methods inherited from class org.biojava.bio.seq.AbstractFeatureHolder
`createFeature, filter, removeFeature`

Methods inherited from class org.biojava.utils.AbstractChangeable
`addChangeListener, addChangeListener, generateChangeSupport, getChangeSupport, 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`

Constructor Detail

### MergeFeatureHolder

    public MergeFeatureHolder()

  Create a new, empty, MergeFeatureHolder.

Method Detail

### addFeatureHolder

    public void addFeatureHolder(FeatureHolder fh)
                          throws ChangeVetoException

  Add an extra FeatureHolder to the set of FeatureHolders which are merged. This method is provided for backward compatibility, and is equivalent to:

           mfh.addFeatureHolder(fh, FeatureFilter.all);

  You should always use the two-arg version in preference if you are able to define the membership of a FeatureHolder.

  Throws:
    `ChangeVetoException`

### removeFeatureHolder

    public void removeFeatureHolder(FeatureHolder fh)
                             throws ChangeVetoException

  Remove a FeatureHolder from the set of FeatureHolders which are merged.

  Throws:
    `ChangeVetoException`

### 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

### 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

### features

    public Iterator features()

  Iterate over all the features in all child FeatureHolders. The Iterator may throw ConcurrantModificationException if there is a change in the underlying collections during iteration.

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

### filter

    public FeatureHolder filter(FeatureFilter ff,
                                boolean recurse)

  When applied to a MergeFeatureHolder, this filters each child FeatureHolder independently.

  Specified by:
    `filter` in interface `FeatureHolder`
  Overrides:
    `filter` in class `AbstractFeatureHolder`
  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.

### 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