View Javadoc
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 }