The purpose of a ResourceVariantByteStore is to support the caching of
the synchronization bytes for the resource variants that represent
a resource line-up of interest such as a version, baseline or branch.

Package org.eclipse.team.core.variants Description

Package Specification

This package specifies the API for accessing and managing variants for local
workspace resources. The classes in this package can be used by Subscribers
(see the org.eclipse.team.core.subscribers package) or others. The classes are
roughly divided into three categories:

Access to Resource Variants

The following interfaces define the API required for subscribers to access
and manage variants of local resources.

IResourceVariant: provides access to information about a variant resource,
such as it's name, its type (file or container) and its contents.

IResourceVariantComparator: supports the comparison of a local resource
with a variant or the comparison of two variants (if three-way comparison
is supported).

IResourceVariantTree: provides access to a tree of locally cached resource
variants along with API to refresh the cached variants.

Implementing Resource Variants

Several classes are available that provide partial, extandable implementations
of the above mentioned interfaces.

CachedResourceVariant: an IResourceVariant implementation that supports
the caching of the contents of the variant. Subclasses must override to provide
fecthing of contents.

AbstractResourceVariantTree: an IResourceVariantTree that contains logic
for performing a refresh of the cached resource variants. The caching mechanism
is delegated to subclasses as is the fetching of the resource variants.

ResourceVariantTree: An AbstractResourceVariantTree that uses a ResourceVariantByteStore
to cache the resource variants. Subclasses must still provide the fecthing
of the remote state.

ResourceVariantByteStore: An abstract class that defines the API required
for caching resource variants as byte arrays.

PersistantResourceVariantByteStore: a ResourceVariantByteStore that
persists the bytes accross workbench invocations.

SessionResourceVariantByteStore: a ResourceVariantByteStore that caches
the bytes in a session store and does not persist them.

Implementing Subscribers

This package also contains two partial subscriber implementations.

ResourceVariantTreeSubscriber: a subscriber that makes use of IResourceVariantTree
objects to provide the traversal and refresh of the base and remote trees.

ThreeWaySubscriber: a ResourceVariantTreeSubscriber that is build on top
of the following classes.

ThreeWaySynchronizer: a byte store that maintains the complete synchronization
state (local, base and remote) required by a subscriber. It provides API
to access and set the base and remote bytes corresponding to resource
variants as well as change notification to registered ISynchronizerChangeListener
instances.

ThreeWayRemoteTree: A remote tree that uses the ThreeWaySynchronizer
remote slot as its byte store. Subclasses of ResourceVariantTreeSubscriber
must also subclass ThreeWayRemoteTree in order to provide the tree refresh
behavior.

ThreeWayResourceComparator: a IResourceVariantComparator that uses the
state from a ThreeWaySynchronizer to compare local resources to their
variants.