001package org.eclipse.aether.util.repository;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 * 
012 *  http://www.apache.org/licenses/LICENSE-2.0
013 * 
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import org.eclipse.aether.RepositorySystemSession;
023import org.eclipse.aether.artifact.Artifact;
024import org.eclipse.aether.metadata.Metadata;
025import org.eclipse.aether.resolution.ResolutionErrorPolicy;
026import org.eclipse.aether.resolution.ResolutionErrorPolicyRequest;
027
028import static java.util.Objects.requireNonNull;
029
030/**
031 * A resolution error policy that allows to control caching for artifacts and metadata at a global level.
032 */
033public final class SimpleResolutionErrorPolicy
034    implements ResolutionErrorPolicy
035{
036
037    private final int artifactPolicy;
038
039    private final int metadataPolicy;
040
041    /**
042     * Creates a new error policy with the specified behavior for both artifacts and metadata.
043     * 
044     * @param cacheNotFound {@code true} to enable caching of missing items, {@code false} to disable it.
045     * @param cacheTransferErrors {@code true} to enable chaching of transfer errors, {@code false} to disable it.
046     */
047    public SimpleResolutionErrorPolicy( boolean cacheNotFound, boolean cacheTransferErrors )
048    {
049        this( ( cacheNotFound ? CACHE_NOT_FOUND : 0 ) | ( cacheTransferErrors ? CACHE_TRANSFER_ERROR : 0 ) );
050    }
051
052    /**
053     * Creates a new error policy with the specified bit mask for both artifacts and metadata.
054     * 
055     * @param policy The bit mask describing the policy for artifacts and metadata.
056     */
057    public SimpleResolutionErrorPolicy( int policy )
058    {
059        this( policy, policy );
060    }
061
062    /**
063     * Creates a new error policy with the specified bit masks for artifacts and metadata.
064     * 
065     * @param artifactPolicy The bit mask describing the policy for artifacts.
066     * @param metadataPolicy The bit mask describing the policy for metadata.
067     */
068    public SimpleResolutionErrorPolicy( int artifactPolicy, int metadataPolicy )
069    {
070        this.artifactPolicy = artifactPolicy;
071        this.metadataPolicy = metadataPolicy;
072    }
073
074    public int getArtifactPolicy( RepositorySystemSession session, ResolutionErrorPolicyRequest<Artifact> request )
075    {
076        requireNonNull( session, "session cannot be null" );
077        requireNonNull( request, "request cannot be null" );
078        return artifactPolicy;
079    }
080
081    public int getMetadataPolicy( RepositorySystemSession session, ResolutionErrorPolicyRequest<Metadata> request )
082    {
083        requireNonNull( session, "session cannot be null" );
084        requireNonNull( request, "request cannot be null" );
085        return metadataPolicy;
086    }
087
088}