1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.eclipse.aether.repository;
20
21 /**
22 * A policy controlling access to a repository.
23 */
24 public final class RepositoryPolicy {
25
26 /**
27 * Never update locally cached data.
28 */
29 public static final String UPDATE_POLICY_NEVER = "never";
30
31 /**
32 * Always update locally cached data.
33 */
34 public static final String UPDATE_POLICY_ALWAYS = "always";
35
36 /**
37 * Update locally cached data once a day.
38 */
39 public static final String UPDATE_POLICY_DAILY = "daily";
40
41 /**
42 * Update locally cached data every X minutes as given by "interval:X".
43 */
44 public static final String UPDATE_POLICY_INTERVAL = "interval";
45
46 /**
47 * Verify checksums and fail the resolution if they do not match.
48 */
49 public static final String CHECKSUM_POLICY_FAIL = "fail";
50
51 /**
52 * Verify checksums and warn if they do not match.
53 */
54 public static final String CHECKSUM_POLICY_WARN = "warn";
55
56 /**
57 * Do not verify checksums.
58 */
59 public static final String CHECKSUM_POLICY_IGNORE = "ignore";
60
61 private final boolean enabled;
62
63 private final String artifactUpdatePolicy;
64
65 private final String metadataUpdatePolicy;
66
67 private final String checksumPolicy;
68
69 /**
70 * Creates a new policy with checksum warnings and daily update checks.
71 */
72 public RepositoryPolicy() {
73 this(true, UPDATE_POLICY_DAILY, UPDATE_POLICY_DAILY, CHECKSUM_POLICY_WARN);
74 }
75
76 /**
77 * Creates a new policy with the specified settings (uses same update policy for data and metadata, retains old
78 * resolver behaviour).
79 */
80 public RepositoryPolicy(boolean enabled, String updatePolicy, String checksumPolicy) {
81 this(enabled, updatePolicy, updatePolicy, checksumPolicy);
82 }
83
84 /**
85 * Creates a new policy with the specified settings.
86 *
87 * @param enabled A flag whether the associated repository should be accessed or not.
88 * @param artifactUpdatePolicy The update interval after which locally cached data from the repository is considered stale
89 * and should be re-fetched, may be {@code null}.
90 * @param metadataUpdatePolicy The update interval after which locally cached metadata from the repository is considered stale
91 * and should be re-fetched, may be {@code null}.
92 * @param checksumPolicy The way checksum verification should be handled, may be {@code null}.
93 * @since 2.0.0
94 */
95 public RepositoryPolicy(
96 boolean enabled, String artifactUpdatePolicy, String metadataUpdatePolicy, String checksumPolicy) {
97 this.enabled = enabled;
98 this.artifactUpdatePolicy = (artifactUpdatePolicy != null) ? artifactUpdatePolicy : "";
99 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 }