1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  package org.apache.maven.artifact.repository;
20  
21  import java.util.Calendar;
22  import java.util.Date;
23  
24  
25  
26  
27  
28  
29  @Deprecated
30  public class ArtifactRepositoryPolicy {
31      public static final String UPDATE_POLICY_NEVER = "never";
32  
33      public static final String UPDATE_POLICY_ALWAYS = "always";
34  
35      public static final String UPDATE_POLICY_DAILY = "daily";
36  
37      public static final String UPDATE_POLICY_INTERVAL = "interval";
38  
39      public static final String CHECKSUM_POLICY_FAIL = "fail";
40  
41      public static final String CHECKSUM_POLICY_WARN = "warn";
42  
43      public static final String CHECKSUM_POLICY_IGNORE = "ignore";
44  
45      public static final String DEFAULT_CHECKSUM_POLICY = CHECKSUM_POLICY_FAIL;
46  
47      private boolean enabled;
48  
49      private String updatePolicy;
50  
51      private String checksumPolicy;
52  
53      public ArtifactRepositoryPolicy() {
54          this(true, null, null);
55      }
56  
57      public ArtifactRepositoryPolicy(ArtifactRepositoryPolicy policy) {
58          this(policy.isEnabled(), policy.getUpdatePolicy(), policy.getChecksumPolicy());
59      }
60  
61      public ArtifactRepositoryPolicy(boolean enabled, String updatePolicy, String checksumPolicy) {
62          this.enabled = enabled;
63  
64          if (updatePolicy == null) {
65              updatePolicy = UPDATE_POLICY_DAILY;
66          }
67          this.updatePolicy = updatePolicy;
68  
69          if (checksumPolicy == null) {
70              checksumPolicy = DEFAULT_CHECKSUM_POLICY;
71          }
72          this.checksumPolicy = checksumPolicy;
73      }
74  
75      public void setEnabled(boolean enabled) {
76          this.enabled = enabled;
77      }
78  
79      public void setUpdatePolicy(String updatePolicy) {
80          if (updatePolicy != null) {
81              this.updatePolicy = updatePolicy;
82          }
83      }
84  
85      public void setChecksumPolicy(String checksumPolicy) {
86          if (checksumPolicy != null) {
87              this.checksumPolicy = checksumPolicy;
88          }
89      }
90  
91      public boolean isEnabled() {
92          return enabled;
93      }
94  
95      public String getUpdatePolicy() {
96          return updatePolicy;
97      }
98  
99      public String getChecksumPolicy() {
100         return checksumPolicy;
101     }
102 
103     public boolean checkOutOfDate(Date lastModified) {
104         boolean checkForUpdates = false;
105 
106         if (UPDATE_POLICY_ALWAYS.equals(updatePolicy)) {
107             checkForUpdates = true;
108         } else if (UPDATE_POLICY_DAILY.equals(updatePolicy)) {
109             
110             Calendar cal = Calendar.getInstance();
111 
112             cal.set(Calendar.HOUR_OF_DAY, 0);
113             cal.set(Calendar.MINUTE, 0);
114             cal.set(Calendar.SECOND, 0);
115             cal.set(Calendar.MILLISECOND, 0);
116 
117             if (cal.getTime().after(lastModified)) {
118                 checkForUpdates = true;
119             }
120         } else if (updatePolicy.startsWith(UPDATE_POLICY_INTERVAL)) {
121             String s = updatePolicy.substring(UPDATE_POLICY_INTERVAL.length() + 1);
122             int minutes = Integer.parseInt(s);
123             Calendar cal = Calendar.getInstance();
124             cal.add(Calendar.MINUTE, -minutes);
125             if (cal.getTime().after(lastModified)) {
126                 checkForUpdates = true;
127             }
128         }
129         
130         return checkForUpdates;
131     }
132 
133     @Override
134     public String toString() {
135         StringBuilder buffer = new StringBuilder(64);
136         buffer.append("{enabled=");
137         buffer.append(enabled);
138         buffer.append(", checksums=");
139         buffer.append(checksumPolicy);
140         buffer.append(", updates=");
141         buffer.append(updatePolicy);
142         buffer.append('}');
143         return buffer.toString();
144     }
145 
146     public void merge(ArtifactRepositoryPolicy policy) {
147         if (policy != null && policy.isEnabled()) {
148             setEnabled(true);
149 
150             if (ordinalOfCksumPolicy(policy.getChecksumPolicy()) < ordinalOfCksumPolicy(getChecksumPolicy())) {
151                 setChecksumPolicy(policy.getChecksumPolicy());
152             }
153 
154             if (ordinalOfUpdatePolicy(policy.getUpdatePolicy()) < ordinalOfUpdatePolicy(getUpdatePolicy())) {
155                 setUpdatePolicy(policy.getUpdatePolicy());
156             }
157         }
158     }
159 
160     private int ordinalOfCksumPolicy(String policy) {
161         if (ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL.equals(policy)) {
162             return 2;
163         } else if (ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals(policy)) {
164             return 0;
165         } else {
166             return 1;
167         }
168     }
169 
170     @SuppressWarnings("checkstyle:magicnumber")
171     private int ordinalOfUpdatePolicy(String policy) {
172         if (ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY.equals(policy)) {
173             return 1440;
174         } else if (ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS.equals(policy)) {
175             return 0;
176         } else if (policy != null && policy.startsWith(ArtifactRepositoryPolicy.UPDATE_POLICY_INTERVAL)) {
177             String s = policy.substring(UPDATE_POLICY_INTERVAL.length() + 1);
178             return Integer.parseInt(s);
179         } else {
180             return Integer.MAX_VALUE;
181         }
182     }
183 }