Class ArtifactRepositoryBaseImpl<ArtifactDescriptorT extends org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor>

    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected Set<ArtifactDescriptorT> descriptors  
      protected Map<org.eclipse.equinox.p2.metadata.IArtifactKey,​Set<ArtifactDescriptorT>> descriptorsMap  
      • Fields inherited from interface org.eclipse.equinox.p2.repository.artifact.IArtifactRepository

        CODE_RETRY, PROP_RUNNABLE
      • Fields inherited from interface org.eclipse.equinox.p2.repository.IRepository

        ENABLED, NONE, PREFERENCE_NODE, PROP_COMPRESSED, PROP_DESCRIPTION, PROP_MIRRORS_BASE_URL, PROP_MIRRORS_URL, PROP_NAME, PROP_NICKNAME, PROP_PASSWORD, PROP_SYSTEM, PROP_TIMESTAMP, PROP_USERNAME, TYPE_ARTIFACT, TYPE_METADATA
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      boolean contains​(org.eclipse.equinox.p2.metadata.IArtifactKey key)
      Returns true if this is a provider for the given artifact.
      boolean contains​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)
      Returns true if this a provider for an artifact in the given format
      org.eclipse.equinox.p2.query.IQueryable<org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor> descriptorQueryable()  
      org.eclipse.core.runtime.IStatus getArtifact​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor, OutputStream destination, org.eclipse.core.runtime.IProgressMonitor monitor)
      Deprecated.
      Obsolete.
      org.eclipse.core.runtime.IStatus getArtifact​(IArtifactSink sink, org.eclipse.core.runtime.IProgressMonitor monitor)
      Writes the requested artifact to the given IArtifactSink.
      org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor[] getArtifactDescriptors​(org.eclipse.equinox.p2.metadata.IArtifactKey key)
      Return the raw artifact formats in which the given artifact can be provided.
      File getArtifactFile​(org.eclipse.equinox.p2.metadata.IArtifactKey key)
      Returns the file system location of the given artifact.
      File getArtifactFile​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)
      Returns the file system location of the given artifact in the given format.
      protected abstract org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor getComparableDescriptor​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)
      Returns an IArtifactDescriptor instance which is comparable to the artifact descriptors stored in the index (i.e.
      protected abstract ArtifactDescriptorT getInternalDescriptorForAdding​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)
      Returns an artifact descriptor of the internal descriptor type ArtifactDescriptorT which may be added to the index.
      org.eclipse.core.runtime.IStatus getRawArtifact​(IRawArtifactSink sink, org.eclipse.core.runtime.IProgressMonitor monitor)
      Writes the requested artifact in the specified raw format to the given IRawArtifactSink.
      protected void internalAddDescriptor​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)  
      protected void internalAddInternalDescriptor​(ArtifactDescriptorT internalDescriptor)  
      protected abstract File internalGetArtifactStorageLocation​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)
      Returns the file system location where the given artifact is or would be stored.
      protected org.eclipse.tycho.repository.p2base.artifact.repository.ArtifactRepositoryBaseImpl.AddingArtifactSink internalNewAddingArtifactSink​(ArtifactDescriptorT canonicalDescriptorToBeAdded)  
      protected void internalRemoveAllDescriptors()  
      protected void internalRemoveDescriptor​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)  
      protected void internalRemoveDescriptors​(org.eclipse.equinox.p2.metadata.IArtifactKey key)  
      protected void internalRemoveDescriptors​(org.eclipse.equinox.p2.metadata.IArtifactKey[] keys)  
      protected void internalRemoveDescriptors​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor[] descriptors)  
      protected void internalStore​(org.eclipse.core.runtime.IProgressMonitor monitor)
      Persists the index of this repository.
      IArtifactSink newAddingArtifactSink​(org.eclipse.equinox.p2.metadata.IArtifactKey key)
      Returns a new IArtifactSink instance that adds the received artifact to this repository on IArtifactSink.commitWrite().
      IRawArtifactSink newAddingRawArtifactSink​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor newDescriptor)
      Returns a new IRawArtifactSink instance that adds the received artifact to this repository on IArtifactSink.commitWrite().
      org.eclipse.equinox.p2.query.IQueryResult<org.eclipse.equinox.p2.metadata.IArtifactKey> query​(org.eclipse.equinox.p2.query.IQuery<org.eclipse.equinox.p2.metadata.IArtifactKey> query, org.eclipse.core.runtime.IProgressMonitor monitor)  
      • Methods inherited from class org.eclipse.equinox.p2.repository.artifact.spi.AbstractArtifactRepository

        createArtifactDescriptor, createArtifactKey, equals, executeBatch, hashCode
      • Methods inherited from class org.eclipse.equinox.p2.repository.spi.AbstractRepository

        assertModifiable, getDescription, getLocation, getName, getProperties, getProperty, getProvider, getProvisioningAgent, getType, getVersion, isModifiable, setDescription, setLocation, setName, setProperties, setProperty, setProperty, setProvider, setType, setVersion
      • Methods inherited from class org.eclipse.core.runtime.PlatformObject

        getAdapter
      • Methods inherited from interface org.eclipse.core.runtime.IAdaptable

        getAdapter
      • Methods inherited from interface org.eclipse.equinox.p2.repository.artifact.IArtifactRepository

        addDescriptor, addDescriptor, addDescriptors, addDescriptors, createArtifactDescriptor, createArtifactKey, executeBatch, getArtifacts, getOutputStream, getRawArtifact, removeAll, removeAll, removeDescriptor, removeDescriptor, removeDescriptor, removeDescriptor, removeDescriptors, removeDescriptors, removeDescriptors, removeDescriptors
      • Methods inherited from interface org.eclipse.equinox.p2.repository.IRepository

        getDescription, getLocation, getName, getProperties, getProperty, getProvider, getProvisioningAgent, getType, getVersion, isModifiable, setProperty, setProperty
    • Field Detail

      • descriptors

        protected Set<ArtifactDescriptorT extends org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor> descriptors
      • descriptorsMap

        protected Map<org.eclipse.equinox.p2.metadata.IArtifactKey,​Set<ArtifactDescriptorT extends org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor>> descriptorsMap
    • Constructor Detail

      • ArtifactRepositoryBaseImpl

        protected ArtifactRepositoryBaseImpl​(org.eclipse.equinox.p2.core.IProvisioningAgent agent,
                                             URI location,
                                             ArtifactTransferPolicy transferPolicy)
    • Method Detail

      • getComparableDescriptor

        protected abstract org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor getComparableDescriptor​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)
        Returns an IArtifactDescriptor instance which is comparable to the artifact descriptors stored in the index (i.e. the descriptors member). A valid implementation is to convert the argument to the internal descriptor type ArtifactDescriptorT, but this is not a requirement. This method should be implemented in a way so that calling descriptors.contains(getComparableDescriptor(foreignDescriptor)) with a descriptor from a foreign artifact repository returns true if and only if copying that foreign artifact to this repository with AbstractArtifactRepository2.getOutputStream(IArtifactDescriptor) would not add a new artifact to this repository.

        This method may be called by any API method with an IArtifactDescriptor argument.

        Parameters:
        descriptor - An IArtifactDescriptor from any artifact repository.
      • contains

        public final boolean contains​(org.eclipse.equinox.p2.metadata.IArtifactKey key)
        Description copied from interface: IArtifactProvider
        Returns true if this is a provider for the given artifact.
        Specified by:
        contains in interface IArtifactProvider
        Specified by:
        contains in interface org.eclipse.equinox.p2.repository.artifact.IArtifactRepository
        Specified by:
        contains in class org.eclipse.equinox.p2.repository.artifact.spi.AbstractArtifactRepository
        Parameters:
        key - An artifact key
        Returns:
        true if this instance can provide the artifact for the given key
      • contains

        public final boolean contains​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)
        Description copied from interface: IRawArtifactProvider
        Returns true if this a provider for an artifact in the given format
        Specified by:
        contains in interface org.eclipse.equinox.p2.repository.artifact.IArtifactRepository
        Specified by:
        contains in interface IRawArtifactProvider
        Specified by:
        contains in class org.eclipse.equinox.p2.repository.artifact.spi.AbstractArtifactRepository
        Parameters:
        descriptor - An artifact descriptor
        Returns:
        true if this instance can provide the artifact as raw artifact in the described format
      • getArtifactDescriptors

        public final org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor[] getArtifactDescriptors​(org.eclipse.equinox.p2.metadata.IArtifactKey key)
        Description copied from interface: IRawArtifactProvider
        Return the raw artifact formats in which the given artifact can be provided.
        Specified by:
        getArtifactDescriptors in interface org.eclipse.equinox.p2.repository.artifact.IArtifactRepository
        Specified by:
        getArtifactDescriptors in interface IRawArtifactProvider
        Specified by:
        getArtifactDescriptors in class org.eclipse.equinox.p2.repository.artifact.spi.AbstractArtifactRepository
        Parameters:
        key - An artifact key
        Returns:
        The descriptors associated with the given key
      • query

        public final org.eclipse.equinox.p2.query.IQueryResult<org.eclipse.equinox.p2.metadata.IArtifactKey> query​(org.eclipse.equinox.p2.query.IQuery<org.eclipse.equinox.p2.metadata.IArtifactKey> query,
                                                                                                                   org.eclipse.core.runtime.IProgressMonitor monitor)
        Specified by:
        query in interface org.eclipse.equinox.p2.query.IQueryable<ArtifactDescriptorT extends org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor>
      • descriptorQueryable

        public final org.eclipse.equinox.p2.query.IQueryable<org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor> descriptorQueryable()
        Specified by:
        descriptorQueryable in interface org.eclipse.equinox.p2.repository.artifact.IArtifactRepository
      • getInternalDescriptorForAdding

        protected abstract ArtifactDescriptorT getInternalDescriptorForAdding​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)
                                                                       throws IllegalArgumentException
        Returns an artifact descriptor of the internal descriptor type ArtifactDescriptorT which may be added to the index. Implementations may require that the descriptor argument is a descriptor instance created by this repository – see AbstractArtifactRepository.createArtifactDescriptor(IArtifactKey).

        This method is called by methods that add entries to the index, i.e. from newAddingArtifactSink(IArtifactKey).

        Parameters:
        descriptor - An IArtifactDescriptor instance
        Throws:
        IllegalArgumentException - if the provided descriptor cannot be added
      • internalAddInternalDescriptor

        protected final void internalAddInternalDescriptor​(ArtifactDescriptorT internalDescriptor)
      • internalStore

        protected void internalStore​(org.eclipse.core.runtime.IProgressMonitor monitor)
        Persists the index of this repository.

        This method is called after every (bulk) change to the index.

        Specified by:
        internalStore in class AbstractArtifactRepository2
      • internalGetArtifactStorageLocation

        protected abstract File internalGetArtifactStorageLocation​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)
        Returns the file system location where the given artifact is or would be stored. Unlike getArtifactFile(IArtifactDescriptor), this method does not check if the given artifact exists in the repository and never returns null.

        This method may be called by any API method for reading or writing artifacts.

      • getArtifactFile

        public final File getArtifactFile​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor descriptor)
        Description copied from interface: IRawArtifactFileProvider
        Returns the file system location of the given artifact in the given format.
        Specified by:
        getArtifactFile in interface org.eclipse.equinox.p2.repository.artifact.IFileArtifactRepository
        Specified by:
        getArtifactFile in interface IRawArtifactFileProvider
        Parameters:
        descriptor - The key and format of an artifact
        Returns:
        The location of the specified raw artifact, ornull the that artifact does not exist in the given format.
      • getArtifactFile

        public final File getArtifactFile​(org.eclipse.equinox.p2.metadata.IArtifactKey key)
        Description copied from interface: IArtifactFileProvider
        Returns the file system location of the given artifact.
        Specified by:
        getArtifactFile in interface IArtifactFileProvider
        Specified by:
        getArtifactFile in interface org.eclipse.equinox.p2.repository.artifact.IFileArtifactRepository
        Parameters:
        key - An artifact key
        Returns:
        The location of the specified artifact, or null the given artifact does not exist.
      • getArtifact

        public final org.eclipse.core.runtime.IStatus getArtifact​(IArtifactSink sink,
                                                                  org.eclipse.core.runtime.IProgressMonitor monitor)
                                                           throws ArtifactSinkException
        Description copied from interface: IArtifactProvider
        Writes the requested artifact to the given IArtifactSink.

        The implementation is free to pick the most suitable internal storage format to serve the request, e.g. it may extract the artifact from a pack200-compressed format. If an error is detected while streaming the artifact (e.g. an MD5 checksum error), the implementation may re-attempt the read from all other available sources. In case there were multiple read attempts, a multi-status with the results of all attempts is returned.

        Specified by:
        getArtifact in interface IArtifactProvider
        Parameters:
        sink - A sink for a specific artifact. When this method returns, the sink will either be closed (with IArtifactSink.commitWrite() or IArtifactSink.abortWrite(), depending on the status), or not have received any content.
        monitor - A progress monitor, or null
        Returns:
        A non-fatal status (warning or better) if the read operation was successful.
        Throws:
        ArtifactSinkException - if that exception is thrown by the given IArtifactSink
        See Also:
        IArtifactSink.getArtifactToBeWritten()
      • internalNewAddingArtifactSink

        protected final org.eclipse.tycho.repository.p2base.artifact.repository.ArtifactRepositoryBaseImpl.AddingArtifactSink internalNewAddingArtifactSink​(ArtifactDescriptorT canonicalDescriptorToBeAdded)
                                                                                                                                                     throws org.eclipse.equinox.p2.core.ProvisionException
        Throws:
        org.eclipse.equinox.p2.core.ProvisionException
      • newAddingRawArtifactSink

        public final IRawArtifactSink newAddingRawArtifactSink​(org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor newDescriptor)
                                                        throws org.eclipse.equinox.p2.core.ProvisionException
        Description copied from class: AbstractArtifactRepository2
        Returns a new IRawArtifactSink instance that adds the received artifact to this repository on IArtifactSink.commitWrite().
        Specified by:
        newAddingRawArtifactSink in class AbstractArtifactRepository2
        Parameters:
        newDescriptor - The artifact descriptor to the added to this repository
        Throws:
        org.eclipse.equinox.p2.core.ProvisionException - if the artifact is already stored in the repository in the given format.