/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.apache.ivy.core.cache; import java.text.ParseException; import org.apache.ivy.core.module.descriptor.Artifact; import org.apache.ivy.core.module.descriptor.DependencyDescriptor; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; import org.apache.ivy.core.module.id.ModuleRevisionId; import org.apache.ivy.core.report.ArtifactDownloadReport; import org.apache.ivy.core.resolve.ResolvedModuleRevision; import org.apache.ivy.plugins.repository.ArtifactResourceResolver; import org.apache.ivy.plugins.repository.Repository; import org.apache.ivy.plugins.repository.Resource; import org.apache.ivy.plugins.repository.ResourceDownloader; import org.apache.ivy.plugins.resolver.DependencyResolver; import org.apache.ivy.plugins.resolver.util.ResolvedResource; public interface RepositoryCacheManager { /** * Returns the name of the repository cache manager. * * @return the name of the repository cache manager. */ public abstract String getName(); /** * Saves the information of which resolvers were used to resolve a module (both for metadata and * artifact), so that this info can be loaded later (even after a jvm restart) for the use of * {@link #findModuleInCache(DependencyDescriptor, CacheMetadataOptions, String)}. * * @param md * the module descriptor resolved * @param metadataResolverName * metadata resolver name * @param artifactResolverName * artifact resolver name */ public abstract void saveResolvers(ModuleDescriptor descriptor, String metadataResolverName, String artifactResolverName); /** * Returns the artifact origin of the given artifact as saved in this cache. * <p> * If the origin is unknown, the returned ArtifactOrigin instance will return true when * {@link ArtifactOrigin#isUnknown(ArtifactOrigin)} is called. * * @param artifact * the artifact for which the saved artifact origin should be returned. * @return the artifact origin of the given artifact as saved in this cache */ public abstract ArtifactOrigin getSavedArtifactOrigin(Artifact artifact); /** * Search a module descriptor in cache for a mrid * * @param dd * the dependency descriptor identifying the module to search * @param requestedRevisionId * the requested dependency module revision id identifying the module to search * @param options * options on how caching should be handled * @param expectedResolver * the resolver with which the md in cache must have been resolved to be returned, * null if this doesn't matter * @return the ResolvedModuleRevision corresponding to the module found, null if none correct * has been found in cache */ public abstract ResolvedModuleRevision findModuleInCache(DependencyDescriptor dd, ModuleRevisionId requestedRevisionId, CacheMetadataOptions options, String expectedResolver); /** * Downloads an artifact to this cache. * * @param artifact * the artifact to download * @param resourceResolver * a resource resolver to use if the artifact needs to be resolved to a Resource for * downloading * @param resourceDownloader * a resource downloader to use if actual download of the resource is needed * @param options * a set of options to adjust the download * @return a report indicating how the download was performed */ public abstract ArtifactDownloadReport download(Artifact artifact, ArtifactResourceResolver resourceResolver, ResourceDownloader resourceDownloader, CacheDownloadOptions options); /** * Download some repository resource and put it in the cache. * <p> * If the cached version is considered enough up to date, no downloading is done. * * @param resource * the resource of the file to put in cache * @param name * the descriptive name of the resource (helps while manually looking into the cache * files) * @param type * the type of the resource (helps while manually looking into the cache files) * @param extension * the extension of the resource (helps while manually looking into the cache files) * @param options * a set of options to adjust the download * @param repository * the repository which resolve the content of the resource * @return a report indicating how the download was performed */ public ArtifactDownloadReport downloadRepositoryResource(Resource resource, String name, String type, String extension, CacheResourceOptions options, Repository repository); /** * Caches an original module descriptor. * <p> * After this call, the original module descriptor file (with no modification nor conversion) * should be available as a local file. * </p> * * @param resolver * the dependency resolver from which the cache request comes from * @param orginalMetadataRef * a resolved resource pointing to the remote original module descriptor * @param dd * the dependency descriptor for which the module descriptor should be cached * @param requestedMetadataArtifact * the module descriptor artifact as requested originally * @param downloader * a ResourceDownloader able to download the original module descriptor resource if * required by this cache implementation * @param options * options to apply to cache this module descriptor * @return a {@link ResolvedModuleRevision} representing the local cached module descriptor, or * null if it failed * @throws ParseException * if an exception occurred while parsing the module descriptor */ public ResolvedModuleRevision cacheModuleDescriptor(DependencyResolver resolver, ResolvedResource orginalMetadataRef, DependencyDescriptor dd, Artifact requestedMetadataArtifact, ResourceDownloader downloader, CacheMetadataOptions options) throws ParseException; /** * Stores a standardized version of an original module descriptor in the cache for later use. * * @param resolver * the dependency resolver from which the cache request comes from * @param orginalMetadataRef * a resolved resource pointing to the remote original module descriptor * @param requestedMetadataArtifact * the module descriptor artifact as requested originally * @param rmr * the {@link ResolvedModuleRevision} representing the local cached module descriptor * @param writer * a {@link ModuleDescriptorWriter} able to write the module descriptor to a stream. */ public void originalToCachedModuleDescriptor(DependencyResolver resolver, ResolvedResource orginalMetadataRef, Artifact requestedMetadataArtifact, ResolvedModuleRevision rmr, ModuleDescriptorWriter writer); /** * Cleans the whole cache. */ public void clean(); /** * Caches a dynamic revision constraint resolution. * * @param dynamicMrid * the dynamic module revision id * @param revision * the resolved revision * @deprecated See {@link #saveResolvedRevision(String, ModuleRevisionId, String)} which * prevents cache + * thrashing when multiple resolvers store the same dynamicMrid */ public void saveResolvedRevision(ModuleRevisionId dynamicMrid, String revision); /** * Caches a dynamic revision constraint resolution for a specific resolver. * * @param resolverName * the resolver in which this dynamic revision was resolved * @param dynamicMrid * the dynamic module revision id * @param revision * the resolved revision */ public void saveResolvedRevision(String resolverName, ModuleRevisionId dynamicMrid, String revision); }