blob: 75d9b8a59eb3818c756f72db7580c34550a3aff0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.maven.artifact.repository;
import java.util.Calendar;
import java.util.Date;
/**
* Describes a set of policies for a repository to use under certain conditions.
*
* @deprecated Avoid use of this type, if you need access to local repository use repository system session instead.
*/
@Deprecated
public class ArtifactRepositoryPolicy {
public static final String UPDATE_POLICY_NEVER = "never";
public static final String UPDATE_POLICY_ALWAYS = "always";
public static final String UPDATE_POLICY_DAILY = "daily";
public static final String UPDATE_POLICY_INTERVAL = "interval";
public static final String CHECKSUM_POLICY_FAIL = "fail";
public static final String CHECKSUM_POLICY_WARN = "warn";
public static final String CHECKSUM_POLICY_IGNORE = "ignore";
public static final String DEFAULT_CHECKSUM_POLICY = CHECKSUM_POLICY_FAIL;
private boolean enabled;
private String updatePolicy;
private String checksumPolicy;
public ArtifactRepositoryPolicy() {
this(true, null, null);
}
public ArtifactRepositoryPolicy(ArtifactRepositoryPolicy policy) {
this(policy.isEnabled(), policy.getUpdatePolicy(), policy.getChecksumPolicy());
}
public ArtifactRepositoryPolicy(boolean enabled, String updatePolicy, String checksumPolicy) {
this.enabled = enabled;
if (updatePolicy == null) {
updatePolicy = UPDATE_POLICY_DAILY;
}
this.updatePolicy = updatePolicy;
if (checksumPolicy == null) {
checksumPolicy = DEFAULT_CHECKSUM_POLICY;
}
this.checksumPolicy = checksumPolicy;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public void setUpdatePolicy(String updatePolicy) {
if (updatePolicy != null) {
this.updatePolicy = updatePolicy;
}
}
public void setChecksumPolicy(String checksumPolicy) {
if (checksumPolicy != null) {
this.checksumPolicy = checksumPolicy;
}
}
public boolean isEnabled() {
return enabled;
}
public String getUpdatePolicy() {
return updatePolicy;
}
public String getChecksumPolicy() {
return checksumPolicy;
}
public boolean checkOutOfDate(Date lastModified) {
boolean checkForUpdates = false;
if (UPDATE_POLICY_ALWAYS.equals(updatePolicy)) {
checkForUpdates = true;
} else if (UPDATE_POLICY_DAILY.equals(updatePolicy)) {
// Get local midnight boundary
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
if (cal.getTime().after(lastModified)) {
checkForUpdates = true;
}
} else if (updatePolicy.startsWith(UPDATE_POLICY_INTERVAL)) {
String s = updatePolicy.substring(UPDATE_POLICY_INTERVAL.length() + 1);
int minutes = Integer.parseInt(s);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, -minutes);
if (cal.getTime().after(lastModified)) {
checkForUpdates = true;
}
}
// else assume "never"
return checkForUpdates;
}
@Override
public String toString() {
StringBuilder buffer = new StringBuilder(64);
buffer.append("{enabled=");
buffer.append(enabled);
buffer.append(", checksums=");
buffer.append(checksumPolicy);
buffer.append(", updates=");
buffer.append(updatePolicy);
buffer.append('}');
return buffer.toString();
}
public void merge(ArtifactRepositoryPolicy policy) {
if (policy != null && policy.isEnabled()) {
setEnabled(true);
if (ordinalOfCksumPolicy(policy.getChecksumPolicy()) < ordinalOfCksumPolicy(getChecksumPolicy())) {
setChecksumPolicy(policy.getChecksumPolicy());
}
if (ordinalOfUpdatePolicy(policy.getUpdatePolicy()) < ordinalOfUpdatePolicy(getUpdatePolicy())) {
setUpdatePolicy(policy.getUpdatePolicy());
}
}
}
private int ordinalOfCksumPolicy(String policy) {
if (ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL.equals(policy)) {
return 2;
} else if (ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals(policy)) {
return 0;
} else {
return 1;
}
}
@SuppressWarnings("checkstyle:magicnumber")
private int ordinalOfUpdatePolicy(String policy) {
if (ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY.equals(policy)) {
return 1440;
} else if (ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS.equals(policy)) {
return 0;
} else if (policy != null && policy.startsWith(ArtifactRepositoryPolicy.UPDATE_POLICY_INTERVAL)) {
String s = policy.substring(UPDATE_POLICY_INTERVAL.length() + 1);
return Integer.parseInt(s);
} else {
return Integer.MAX_VALUE;
}
}
}