
io.jenkins.updatebot.model.DependencyVersionChange Maven / Gradle / Ivy
/*
* Copyright 2016 Red Hat, Inc.
*
* Red Hat 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 io.jenkins.updatebot.model;
import io.jenkins.updatebot.kind.Kind;
import io.fabric8.utils.Objects;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* Represents the update of a dependency version with an optional scope
*/
public class DependencyVersionChange {
private final Kind kind;
private final String dependency;
private final String version;
private final String scope;
private final boolean add;
public DependencyVersionChange(Kind kind, String dependency, String version) {
this(kind, dependency, version, null);
}
public DependencyVersionChange(Kind kind, String dependency, String version, String scope) {
this(kind, dependency, version, scope, false);
}
public DependencyVersionChange(Kind kind, String dependency, String version, String scope, boolean add) {
this.kind = kind;
this.dependency = dependency;
this.version = version;
this.scope = scope;
this.add = add;
}
public static String describe(List changes) {
if (changes.isEmpty()) {
return "no changes";
}
return changes.stream().map(c -> c.getDependency() + " => " + c.getVersion()).collect(Collectors.joining(", "));
}
public static boolean hasDependency(List changes, DependencyVersionChange change) {
return changes.stream().anyMatch(c -> c.matches(change));
}
/**
* Returns the dependency version changes for the given kind
*/
public static List forKind(Kind kind, List list) {
return list.stream().filter(d -> kind.equals(d.getKind())).collect(Collectors.toList());
}
/**
* Returns the dependency version changes by kind
*/
public static Map> byKind(List list) {
Map> answer = new LinkedHashMap<>();
for (DependencyVersionChange change : list) {
Kind key = change.getKind();
List changes = answer.get(key);
if (changes == null) {
changes = new ArrayList<>();
answer.put(key, changes);
}
changes.add(change);
}
return answer;
}
@Override
public String toString() {
return "DependencyVersionChange{" +
"kind=" + kind +
", dependency='" + dependency + '\'' +
", version='" + version + '\'' +
", scope='" + scope + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DependencyVersionChange that = (DependencyVersionChange) o;
if (kind != that.kind) return false;
if (!dependency.equals(that.dependency)) return false;
if (!version.equals(that.version)) return false;
return scope != null ? scope.equals(that.scope) : that.scope == null;
}
@Override
public int hashCode() {
int result = kind.hashCode();
result = 31 * result + dependency.hashCode();
result = 31 * result + version.hashCode();
result = 31 * result + (scope != null ? scope.hashCode() : 0);
return result;
}
/**
* Returns true if the given change is for the same kind and dependency
*/
public boolean matches(DependencyVersionChange that) {
return Objects.equal(this.kind, that.kind) && Objects.equal(this.dependency, that.dependency);
}
/**
* Returns true if this change matches the given artifact key or if the group is the default Maven plugin group
* and the artifact id matches.
*/
public boolean matches(String groupId, String artifactId) {
if (null == groupId && this.dependency.startsWith(MavenArtifactKey.DEFAULT_MAVEN_PLUGIN_GROUP + ":")) {
return this.dependency.endsWith(":" + artifactId);
}
return matches(new MavenArtifactKey(groupId, artifactId));
}
/**
* Returns true if this change matches the given artifact key
*/
public boolean matches(MavenArtifactKey artifactKey) {
return Objects.equal(this.dependency, artifactKey.toString());
}
public Kind getKind() {
return kind;
}
public String getDependency() {
return dependency;
}
public String getVersion() {
return version;
}
public String getScope() {
return scope;
}
/**
* Returns if we add this dependency if its missing from a project
*/
public boolean isAdd() {
return add;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy