001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019package org.eclipse.aether.repository; 020 021/** 022 * A policy controlling access to a repository. 023 */ 024public final class RepositoryPolicy { 025 026 /** 027 * Never update locally cached data. 028 */ 029 public static final String UPDATE_POLICY_NEVER = "never"; 030 031 /** 032 * Always update locally cached data. 033 */ 034 public static final String UPDATE_POLICY_ALWAYS = "always"; 035 036 /** 037 * Update locally cached data once a day. 038 */ 039 public static final String UPDATE_POLICY_DAILY = "daily"; 040 041 /** 042 * Update locally cached data every X minutes as given by "interval:X". 043 */ 044 public static final String UPDATE_POLICY_INTERVAL = "interval"; 045 046 /** 047 * Enforce presence of checksums and fail the resolution if they do not match or are absent. 048 */ 049 public static final String CHECKSUM_POLICY_FAIL = "fail"; 050 051 /** 052 * Expect presence of checksums and warn if they do not match or are absent. 053 */ 054 public static final String CHECKSUM_POLICY_WARN = "warn"; 055 056 /** 057 * Ignore presence and verification of checksums. 058 */ 059 public static final String CHECKSUM_POLICY_IGNORE = "ignore"; 060 061 private final boolean enabled; 062 063 private final String artifactUpdatePolicy; 064 065 private final String metadataUpdatePolicy; 066 067 private final String checksumPolicy; 068 069 /** 070 * Creates a new policy with checksum warnings and daily update checks. 071 */ 072 public RepositoryPolicy() { 073 this(true, UPDATE_POLICY_DAILY, UPDATE_POLICY_DAILY, CHECKSUM_POLICY_WARN); 074 } 075 076 /** 077 * Creates a new policy with the specified settings (uses same update policy for data and metadata, retains old 078 * resolver behaviour). 079 * 080 * @param enabled A flag whether the associated repository should be accessed or not. 081 * @param updatePolicy The update interval after which locally cached data from the repository is considered 082 * stale and should be re-fetched, may be {@code null}. 083 * @param checksumPolicy The way checksum verification should be handled, may be {@code null}. 084 */ 085 public RepositoryPolicy(boolean enabled, String updatePolicy, String checksumPolicy) { 086 this(enabled, updatePolicy, updatePolicy, checksumPolicy); 087 } 088 089 /** 090 * Creates a new policy with the specified settings. 091 * 092 * @param enabled A flag whether the associated repository should be accessed or not. 093 * @param artifactUpdatePolicy The update interval after which locally cached data from the repository is considered stale 094 * and should be re-fetched, may be {@code null}. 095 * @param metadataUpdatePolicy The update interval after which locally cached metadata from the repository is considered stale 096 * and should be re-fetched, may be {@code null}. 097 * @param checksumPolicy The way checksum verification should be handled, may be {@code null}. 098 * @since 2.0.0 099 */ 100 public RepositoryPolicy( 101 boolean enabled, String artifactUpdatePolicy, String metadataUpdatePolicy, String checksumPolicy) { 102 this.enabled = enabled; 103 this.artifactUpdatePolicy = (artifactUpdatePolicy != null) ? artifactUpdatePolicy : ""; 104 this.metadataUpdatePolicy = (metadataUpdatePolicy != null) ? metadataUpdatePolicy : ""; 105 this.checksumPolicy = (checksumPolicy != null) ? checksumPolicy : ""; 106 } 107 108 /** 109 * Indicates whether the associated repository should be contacted or not. 110 * 111 * @return {@code true} if the repository should be contacted, {@code false} otherwise. 112 */ 113 public boolean isEnabled() { 114 return enabled; 115 } 116 117 /** 118 * This method is not used in Resolver, as resolver internally strictly distinguishes between artifact and metadata 119 * update policies. 120 * 121 * @see #getArtifactUpdatePolicy() 122 * @see #getMetadataUpdatePolicy() 123 * @return The update policy for locally cached artifacts, never {@code null}. 124 * @deprecated This method should not be used. Since version 2 Resolver internally distinguishes between artifact 125 * update policy and metadata update policy. This method was left only to preserve binary compatibility, and in 126 * reality invokes {@link #getArtifactUpdatePolicy()}. 127 */ 128 @Deprecated 129 public String getUpdatePolicy() { 130 return getArtifactUpdatePolicy(); 131 } 132 133 /** 134 * Gets the update policy for locally cached artifacts from the repository. 135 * 136 * @return The update policy, never {@code null}. 137 * @since 2.0.0 138 */ 139 public String getArtifactUpdatePolicy() { 140 return artifactUpdatePolicy; 141 } 142 143 /** 144 * Gets the update policy for locally cached metadata from the repository. 145 * 146 * @return The update policy, never {@code null}. 147 * @since 2.0.0 148 */ 149 public String getMetadataUpdatePolicy() { 150 return metadataUpdatePolicy; 151 } 152 153 /** 154 * Gets the policy for checksum validation. 155 * 156 * @return The checksum policy, never {@code null}. 157 */ 158 public String getChecksumPolicy() { 159 return checksumPolicy; 160 } 161 162 @Override 163 public String toString() { 164 return "enabled=" + isEnabled() 165 + ", checksums=" + getChecksumPolicy() 166 + ", artifactUpdates=" + getArtifactUpdatePolicy() 167 + ", metadataUpdates=" + getMetadataUpdatePolicy(); 168 } 169 170 @Override 171 public boolean equals(Object obj) { 172 if (this == obj) { 173 return true; 174 } 175 176 if (obj == null || !getClass().equals(obj.getClass())) { 177 return false; 178 } 179 180 RepositoryPolicy that = (RepositoryPolicy) obj; 181 182 return enabled == that.enabled 183 && artifactUpdatePolicy.equals(that.artifactUpdatePolicy) 184 && metadataUpdatePolicy.equals(that.metadataUpdatePolicy) 185 && checksumPolicy.equals(that.checksumPolicy); 186 } 187 188 @Override 189 public int hashCode() { 190 int hash = 17; 191 hash = hash * 31 + (enabled ? 1 : 0); 192 hash = hash * 31 + artifactUpdatePolicy.hashCode(); 193 hash = hash * 31 + metadataUpdatePolicy.hashCode(); 194 hash = hash * 31 + checksumPolicy.hashCode(); 195 return hash; 196 } 197}