001 package org.apache.maven.artifact.repository;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements. See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership. The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License. You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied. See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022 import java.util.Calendar;
023 import java.util.Date;
024
025 /**
026 * Describes a set of policies for a repository to use under certain conditions.
027 *
028 * @author <a href="mailto:brett@apache.org">Brett Porter</a>
029 */
030 public class ArtifactRepositoryPolicy
031 {
032 public static final String UPDATE_POLICY_NEVER = "never";
033
034 public static final String UPDATE_POLICY_ALWAYS = "always";
035
036 public static final String UPDATE_POLICY_DAILY = "daily";
037
038 public static final String UPDATE_POLICY_INTERVAL = "interval";
039
040 public static final String CHECKSUM_POLICY_FAIL = "fail";
041
042 public static final String CHECKSUM_POLICY_WARN = "warn";
043
044 public static final String CHECKSUM_POLICY_IGNORE = "ignore";
045
046 private boolean enabled;
047
048 private String updatePolicy;
049
050 private String checksumPolicy;
051
052 public ArtifactRepositoryPolicy()
053 {
054 this( true, null, null );
055 }
056
057 public ArtifactRepositoryPolicy( ArtifactRepositoryPolicy policy )
058 {
059 this( policy.isEnabled(), policy.getUpdatePolicy(), policy.getChecksumPolicy() );
060 }
061
062 public ArtifactRepositoryPolicy( boolean enabled, String updatePolicy, String checksumPolicy )
063 {
064 this.enabled = enabled;
065
066 if ( updatePolicy == null )
067 {
068 updatePolicy = UPDATE_POLICY_DAILY;
069 }
070 this.updatePolicy = updatePolicy;
071
072 if ( checksumPolicy == null )
073 {
074 checksumPolicy = CHECKSUM_POLICY_WARN;
075 }
076 this.checksumPolicy = checksumPolicy;
077 }
078
079 public void setEnabled( boolean enabled )
080 {
081 this.enabled = enabled;
082 }
083
084 public void setUpdatePolicy( String updatePolicy )
085 {
086 if ( updatePolicy != null )
087 {
088 this.updatePolicy = updatePolicy;
089 }
090 }
091
092 public void setChecksumPolicy( String checksumPolicy )
093 {
094 if ( checksumPolicy != null )
095 {
096 this.checksumPolicy = checksumPolicy;
097 }
098 }
099
100 public boolean isEnabled()
101 {
102 return enabled;
103 }
104
105 public String getUpdatePolicy()
106 {
107 return updatePolicy;
108 }
109
110 public String getChecksumPolicy()
111 {
112 return checksumPolicy;
113 }
114
115 public boolean checkOutOfDate( Date lastModified )
116 {
117 boolean checkForUpdates = false;
118
119 if ( UPDATE_POLICY_ALWAYS.equals( updatePolicy ) )
120 {
121 checkForUpdates = true;
122 }
123 else if ( UPDATE_POLICY_DAILY.equals( updatePolicy ) )
124 {
125 // Get local midnight boundary
126 Calendar cal = Calendar.getInstance();
127
128 cal.set( Calendar.HOUR_OF_DAY, 0 );
129 cal.set( Calendar.MINUTE, 0 );
130 cal.set( Calendar.SECOND, 0 );
131 cal.set( Calendar.MILLISECOND, 0 );
132
133 if ( cal.getTime().after( lastModified ) )
134 {
135 checkForUpdates = true;
136 }
137 }
138 else if ( updatePolicy.startsWith( UPDATE_POLICY_INTERVAL ) )
139 {
140 String s = updatePolicy.substring( UPDATE_POLICY_INTERVAL.length() + 1 );
141 int minutes = Integer.valueOf( s );
142 Calendar cal = Calendar.getInstance();
143 cal.add( Calendar.MINUTE, -minutes );
144 if ( cal.getTime().after( lastModified ) )
145 {
146 checkForUpdates = true;
147 }
148 }
149 // else assume "never"
150 return checkForUpdates;
151 }
152
153 @Override
154 public String toString()
155 {
156 StringBuilder buffer = new StringBuilder( 64 );
157 buffer.append( "{enabled=" );
158 buffer.append( enabled );
159 buffer.append( ", checksums=" );
160 buffer.append( checksumPolicy );
161 buffer.append( ", updates=" );
162 buffer.append( updatePolicy );
163 buffer.append( "}" );
164 return buffer.toString();
165 }
166
167 public void merge( ArtifactRepositoryPolicy policy )
168 {
169 if ( policy != null && policy.isEnabled() )
170 {
171 setEnabled( true );
172
173 if ( ordinalOfChecksumPolicy( policy.getChecksumPolicy() ) < ordinalOfChecksumPolicy( getChecksumPolicy() ) )
174 {
175 setChecksumPolicy( policy.getChecksumPolicy() );
176 }
177
178 if ( ordinalOfUpdatePolicy( policy.getUpdatePolicy() ) < ordinalOfUpdatePolicy( getUpdatePolicy() ) )
179 {
180 setUpdatePolicy( policy.getUpdatePolicy() );
181 }
182 }
183 }
184
185 private int ordinalOfChecksumPolicy( String policy )
186 {
187 if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( policy ) )
188 {
189 return 2;
190 }
191 else if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( policy ) )
192 {
193 return 0;
194 }
195 else
196 {
197 return 1;
198 }
199 }
200
201 private int ordinalOfUpdatePolicy( String policy )
202 {
203 if ( ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY.equals( policy ) )
204 {
205 return 1440;
206 }
207 else if ( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( policy ) )
208 {
209 return 0;
210 }
211 else if ( policy != null && policy.startsWith( ArtifactRepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
212 {
213 String s = policy.substring( UPDATE_POLICY_INTERVAL.length() + 1 );
214 return Integer.valueOf( s );
215 }
216 else
217 {
218 return Integer.MAX_VALUE;
219 }
220 }
221
222 }