Class ThreeWaySubscriber

All Implemented Interfaces:
ISynchronizerChangeListener

public abstract class ThreeWaySubscriber extends ResourceVariantTreeSubscriber implements ISynchronizerChangeListener
A resource variant tree subscriber whose trees use an underlying ThreeWaySynchronizer to store and manage the synchronization state for the local workspace. Subclasses need to provide a subclass of ThreeWayRemoteTree and a method to create resource variant handles from the bytes cached in the ThreeWaySynchronizer.
Since:
3.0
See Also:
  • Constructor Details

    • ThreeWaySubscriber

      protected ThreeWaySubscriber(ThreeWaySynchronizer synchronizer)
      Create a three-way subscriber that uses the given synchronizer to manage the synchronization state of local resources and their variants
      Parameters:
      synchronizer - the three-way synchronizer for this subscriber
  • Method Details

    • getBaseTree

      protected final IResourceVariantTree getBaseTree()
      Description copied from class: ResourceVariantTreeSubscriber
      Return the base resource variant tree.
      Specified by:
      getBaseTree in class ResourceVariantTreeSubscriber
    • getRemoteTree

      protected final IResourceVariantTree getRemoteTree()
      Description copied from class: ResourceVariantTreeSubscriber
      Return the remote resource variant tree.
      Specified by:
      getRemoteTree in class ResourceVariantTreeSubscriber
    • getResourceComparator

      public final IResourceVariantComparator getResourceComparator()
      Description copied from class: Subscriber
      Returns the comparison criteria that will be used by the sync info created by this subscriber.
      Specified by:
      getResourceComparator in class Subscriber
      Returns:
      the comparator to use when computing sync states for this subscriber.
    • syncStateChanged

      public void syncStateChanged(IResource[] resources)
      Description copied from interface: ISynchronizerChangeListener
      Notification of synchronization state changes for the given resources. Clients must query the ThreeWaySynchronizer that generated this event to determine the new synchronization state.
      Specified by:
      syncStateChanged in interface ISynchronizerChangeListener
      Parameters:
      resources - the resources whose synchronization state has changed
    • isSupervised

      public boolean isSupervised(IResource resource) throws TeamException
      Returns false for resources that are not children of a subscriber root, are ignored by the subscriber's synchronizer or are ignored by the Team.ignoreHist(IResource). Returns true otherwise.
      Specified by:
      isSupervised in class Subscriber
      Parameters:
      resource - the resource being tested
      Returns:
      true if this resource is supervised, and false otherwise
      Throws:
      TeamException - if an error occurs
      See Also:
    • getSynchronizer

      public ThreeWaySynchronizer getSynchronizer()
      Return the three-way synchronizer of this subscriber.
      Returns:
      the three-way synchronizer of this subscriber.
    • getResourceVariant

      public abstract IResourceVariant getResourceVariant(IResource resource, byte[] bytes) throws TeamException
      Create the resource variant for the given local resource from the given bytes. The bytes are those that were previously returned from a call to IResourceVariant#asBytes().
      Parameters:
      resource - the local resource
      bytes - the bytes that identify a variant of the resource
      Returns:
      the resource variant handle recreated from the bytes
      Throws:
      TeamException - if an error occurs
    • createRemoteTree

      protected abstract ThreeWayRemoteTree createRemoteTree()
      Create the three-way remote tree which provides access to the remote bytes in the three-way synchronizer. This method is invoked once when the remote tree is first accessed. The returned object is cached and reused on subsequent accesses.
      Returns:
      the remote tree
    • handleRootChanged

      protected void handleRootChanged(IResource resource, boolean added)
      Convenience method that can be used by subclasses to notify listeners when a root is added or removed from the subscriber. The added parameter should be true if the root was added and false if it was removed.
      Parameters:
      resource - the added or removed root
      added - true if the root was added and false if it was removed.