Class SubscriberResourceMappingContext


  • public class SubscriberResourceMappingContext
    extends RemoteResourceMappingContext
    A resource mapping context that provides the client access to the remote state of local resources using a subscriber. It uses a SyncInfoFilter to determine whether the local contents differ from the remote contents. This allows the context to be used for different operations (check-in, update and replace).
    Since:
    3.2
    • Constructor Detail

      • SubscriberResourceMappingContext

        public SubscriberResourceMappingContext​(Subscriber subscriber,
                                                boolean autoRefresh)
        Create a resource mapping context for the given subscriber
        Parameters:
        subscriber - the subscriber from the local contents
        autoRefresh - whether the context should auto-refresh when queried
    • Method Detail

      • createContext

        public static RemoteResourceMappingContext createContext​(Subscriber subscriber)
        Return a resource mapping context suitable for comparison operations. Comparisons require that any out-of-sync resources have contents that differ.
        Parameters:
        subscriber - the subscriber
        Returns:
        a resource mapping context suitable for compare operations
      • hasRemoteChange

        public final boolean hasRemoteChange​(IResource resource,
                                             IProgressMonitor monitor)
                                      throws CoreException
        Description copied from class: RemoteResourceMappingContext
        For two-way comparisons, return whether the contents of the corresponding remote differs from the content of the local file in the context of the current operation. By this we mean that this method will return true if the remote contents differ from the local contents.

        For three-way comparisons, return whether the contents of the corresponding remote differ from the contents of the base. In other words, this method returns true if the corresponding remote has changed since the last time the local resource was updated with the remote contents.

        For two-way comparisons, return true if the remote contents differ from the local contents. In this case, this method is equivalent to RemoteResourceMappingContext.hasLocalChange(IResource, IProgressMonitor)

        This can be used by clients to determine if they need to fetch the remote contents in order to determine if the resources that constitute the model element are different in the remote location. If the local file exists and the remote file does not, or the remote file exists and the local does not then the contents will be said to differ (i.e. true is returned). Also, implementors will most likely use a timestamp based comparison to determine if the contents differ. This may lead to a situation where true is returned but the actual contents do not differ. Clients must be prepared handle this situation.

        Specified by:
        hasRemoteChange in class RemoteResourceMappingContext
        Parameters:
        resource - the local resource
        monitor - a progress monitor, or null if progress reporting is not desired
        Returns:
        whether the contents of the corresponding remote differ from the base.
        Throws:
        CoreException - if the contents could not be compared. Reasons include:
      • fetchRemoteContents

        public final IStorage fetchRemoteContents​(IFile file,
                                                  IProgressMonitor monitor)
                                           throws CoreException
        Description copied from class: RemoteResourceMappingContext
        Returns an instance of IStorage in order to allow the caller to access the contents of the remote that corresponds to the given local resource. If the remote file does not exist, null is returned. The provided local file handle need not exist locally. A exception is thrown if the corresponding remote resource is not a file.

        This method may be long running as a server may need to be contacted to obtain the contents of the file.

        Specified by:
        fetchRemoteContents in class RemoteResourceMappingContext
        Parameters:
        file - the local file
        monitor - a progress monitor, or null if progress reporting is not desired
        Returns:
        a storage that provides access to the contents of the local resource's corresponding remote resource. If the remote file does not exist, null is returned
        Throws:
        CoreException - if the contents could not be fetched. Reasons include:
      • fetchBaseContents

        public final IStorage fetchBaseContents​(IFile file,
                                                IProgressMonitor monitor)
                                         throws CoreException
        Description copied from class: RemoteResourceMappingContext
        For three-way comparisons, returns an instance of IStorage in order to allow the caller to access the contents of the base resource that corresponds to the given local resource. The base of a resource is the contents of the resource before any local modifications were made. If the base file does not exist, or if this is a two-way comparison, null is returned. The provided local file handle need not exist locally. A exception is thrown if the corresponding base resource is not a file.

        This method may be long running as a server may need to be contacted to obtain the contents of the file.

        Specified by:
        fetchBaseContents in class RemoteResourceMappingContext
        Parameters:
        file - the local file
        monitor - a progress monitor, or null if progress reporting is not desired
        Returns:
        a storage that provides access to the contents of the local resource's corresponding remote resource. If the remote file does not exist, null is returned
        Throws:
        CoreException - if the contents could not be fetched. Reasons include:
      • fetchMembers

        public final IResource[] fetchMembers​(IContainer container,
                                              IProgressMonitor monitor)
                                       throws CoreException
        Description copied from class: RemoteResourceMappingContext
        Returns the combined members of the base and remote resources corresponding to the given container. The container need not exist locally and the result may include entries that do not exist locally and may not include all local children. An empty list is returned if the remote resource which corresponds to the container is empty or if the remote does not exist. An exception is thrown if the corresponding remote is not capable of having members.

        This method may be long running as a server may need to be contacted to obtain the members of the container's corresponding remote resource.

        Specified by:
        fetchMembers in class RemoteResourceMappingContext
        Parameters:
        container - the local container
        monitor - a progress monitor, or null if progress reporting is not desired
        Returns:
        returns the combined members of the base and remote resources corresponding to the given container.
        Throws:
        CoreException - if the members could not be fetched. Reasons include:
      • refresh

        protected void refresh​(IResource[] resources,
                               int depth,
                               int flags,
                               IProgressMonitor monitor)
                        throws TeamException
        Refresh the subscriber and cache the fact that the resources were refreshed by calling the refreshed method. The default implementation only refreshes the state and does not fetch contents in the FILE_CONTENTS_REQUIRED flag is passed. It is up to subclass to handle this.
        Parameters:
        resources - the resources to be refreshed
        depth - the depth of the refresh
        flags - the flags that indicate extra state that should be fetched
        monitor - a progress monitor
        Throws:
        TeamException
      • refreshed

        protected final void refreshed​(IResource[] resources,
                                       int depth)
        Record the fact that the resources have been refreshed to the given depth. This is done so that accesses to refreshed resources will not need to perform another refresh.
        Parameters:
        resources - the resources that were refreshed
        depth - the depth to which the resources were refreshed
      • setAutoRefresh

        public void setAutoRefresh​(boolean autoRefresh)
        Set whether the context should refresh the state of resources when their state is requested. The context keeps track of what resources were refreshed and only auto-refreshes a resource once.
        Parameters:
        autoRefresh - whether the context should refresh the state of resources when their state is requested
      • isThreeWay

        public boolean isThreeWay()
        Description copied from class: RemoteResourceMappingContext
        Return true if the context is associated with an operation that is using a three-way comparison and false if it is using a two-way comparison.
        Specified by:
        isThreeWay in class RemoteResourceMappingContext
        Returns:
        whether the context is a three-way or two-way
      • getProjects

        public IProject[] getProjects()
        Description copied from class: RemoteResourceMappingContext
        Return the list of projects that apply to this context. In other words, the context is only capable of querying the remote state for projects that are contained in the returned list.
        Specified by:
        getProjects in class RemoteResourceMappingContext
        Returns:
        the list of projects that apply to this context