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 * Verify checksums and fail the resolution if they do not match. 048 */ 049 public static final String CHECKSUM_POLICY_FAIL = "fail"; 050 051 /** 052 * Verify checksums and warn if they do not match. 053 */ 054 public static final String CHECKSUM_POLICY_WARN = "warn"; 055 056 /** 057 * Do not verify 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 public RepositoryPolicy(boolean enabled, String updatePolicy, String checksumPolicy) { 081 this(enabled, updatePolicy, updatePolicy, checksumPolicy); 082 } 083 084 /** 085 * Creates a new policy with the specified settings. 086 * 087 * @param enabled A flag whether the associated repository should be accessed or not. 088 * @param artifactUpdatePolicy The update interval after which locally cached data from the repository is considered stale 089 * and should be re-fetched, may be {@code null}. 090 * @param metadataUpdatePolicy The update interval after which locally cached metadata from the repository is considered stale 091 * and should be re-fetched, may be {@code null}. 092 * @param checksumPolicy The way checksum verification should be handled, may be {@code null}. 093 * @since 2.0.0 094 */ 095 public RepositoryPolicy( 096 boolean enabled, String artifactUpdatePolicy, String metadataUpdatePolicy, String checksumPolicy) { 097 this.enabled = enabled; 098 this.artifactUpdatePolicy = (artifactUpdatePolicy != null) ? artifactUpdatePolicy : ""; 099 this.metadataUpdatePolicy = (metadataUpdatePolicy != null) ? metadataUpdatePolicy : ""; 100 this.checksumPolicy = (checksumPolicy != null) ? checksumPolicy : ""; 101 } 102 103 /** 104 * Indicates whether the associated repository should be contacted or not. 105 * 106 * @return {@code true} if the repository should be contacted, {@code false} otherwise. 107 */ 108 public boolean isEnabled() { 109 return enabled; 110 } 111 112 /** 113 * This method is not used in Resolver, as resolver internally strictly distinguishes between artifact and metadata 114 * update policies. 115 * 116 * @see #getArtifactUpdatePolicy() 117 * @see #getMetadataUpdatePolicy() 118 * @deprecated This method should not be used. Since version 2 Resolver internally distinguishes between artifact 119 * update policy and metadata update policy. This method was left only to preserve binary compatibility, and in 120 * reality invokes {@link #getArtifactUpdatePolicy()}. 121 */ 122 @Deprecated 123 public String getUpdatePolicy() { 124 return getArtifactUpdatePolicy(); 125 } 126 127 /** 128 * Gets the update policy for locally cached artifacts from the repository. 129 * 130 * @return The update policy, never {@code null}. 131 * @since 2.0.0 132 */ 133 public String getArtifactUpdatePolicy() { 134 return artifactUpdatePolicy; 135 } 136 137 /** 138 * Gets the update policy for locally cached metadata from the repository. 139 * 140 * @return The update policy, never {@code null}. 141 * @since 2.0.0 142 */ 143 public String getMetadataUpdatePolicy() { 144 return metadataUpdatePolicy; 145 } 146 147 /** 148 * Gets the policy for checksum validation. 149 * 150 * @return The checksum policy, never {@code null}. 151 */ 152 public String getChecksumPolicy() { 153 return checksumPolicy; 154 } 155 156 @Override 157 public String toString() { 158 return "enabled=" + isEnabled() 159 + ", checksums=" + getChecksumPolicy() 160 + ", artifactUpdates=" + getArtifactUpdatePolicy() 161 + ", metadataUpdates=" + getMetadataUpdatePolicy(); 162 } 163 164 @Override 165 public boolean equals(Object obj) { 166 if (this == obj) { 167 return true; 168 } 169 170 if (obj == null || !getClass().equals(obj.getClass())) { 171 return false; 172 } 173 174 RepositoryPolicy that = (RepositoryPolicy) obj; 175 176 return enabled == that.enabled 177 && artifactUpdatePolicy.equals(that.artifactUpdatePolicy) 178 && metadataUpdatePolicy.equals(that.metadataUpdatePolicy) 179 && checksumPolicy.equals(that.checksumPolicy); 180 } 181 182 @Override 183 public int hashCode() { 184 int hash = 17; 185 hash = hash * 31 + (enabled ? 1 : 0); 186 hash = hash * 31 + artifactUpdatePolicy.hashCode(); 187 hash = hash * 31 + metadataUpdatePolicy.hashCode(); 188 hash = hash * 31 + checksumPolicy.hashCode(); 189 return hash; 190 } 191}