/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * 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.kie.server.api.model; import com.thoughtworks.xstream.annotations.XStreamAlias; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /** * Enables filtering of {@link ReleaseId}s based on provided constraints (groupId, artifactId, version). * <p> * This implementation compares the expected parts for equality (e.g. the filter accepts the * releaseId in case the groupId/artifactId/version exactly matches the configured one). It is also possible * to filter only on a subset of the constraints (e.g. only on groupId). * <p> * The class comes with {@link Builder} which can be used to easily create all kinds of filters. */ @XmlRootElement(name = "release-id-filter") @XStreamAlias("release-id-filter") @XmlAccessorType(XmlAccessType.NONE) public class ReleaseIdFilter { @XmlElement(name = "group-id") @XStreamAlias("group-id") private final String groupId; @XmlElement(name = "artifact-id") @XStreamAlias("artifact-id") private final String artifactId; @XmlElement(name = "version") @XStreamAlias("version") private final String version; public static final ReleaseIdFilter ACCEPT_ALL = new ReleaseIdFilter(null, null, null); private ReleaseIdFilter() { // passing NULLs is a bad practice, but JAXB needs no-arg constructor this(null, null, null); } public ReleaseIdFilter(String groupId, String artifactId, String version) { this.groupId = groupId; this.artifactId = artifactId; this.version = version; } public ReleaseIdFilter(ReleaseId releaseId) { this(releaseId.getGroupId(), releaseId.getArtifactId(),releaseId.getVersion()); } public String getGroupId() { return groupId; } public String getArtifactId() { return artifactId; } public String getVersion() { return version; } /** * Checks whether the specified releaseId matches (is accepted by) this filter. * * @param releaseId releaseId to match against * @return true if this filter accepts the specified releaseId, otherwise false */ public boolean accept(ReleaseId releaseId) { if (releaseId == null) { throw new IllegalArgumentException("ReleaseId can not be null!"); } return matches(groupId, releaseId.getGroupId()) && matches(artifactId, releaseId.getArtifactId()) && matches(version, releaseId.getVersion()); } /** * Checks whether the string filter matches the provided value. * <p> * Filter can be null, which means "match all". * * @param filter string filter * @param value value to match against * @return true if the filter matches the value, otherwise false */ private boolean matches(String filter, String value) { if (filter == null) { return true; } return filter.equals(value); } @Override public String toString() { return "ReleaseIdFilter{" + "groupId='" + groupId + '\'' + ", artifactId='" + artifactId + '\'' + ", version='" + version + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } ReleaseIdFilter that = (ReleaseIdFilter) o; if (groupId != null ? !groupId.equals(that.groupId) : that.groupId != null) { return false; } if (artifactId != null ? !artifactId.equals(that.artifactId) : that.artifactId != null) { return false; } return version != null ? version.equals(that.version) : that.version == null; } @Override public int hashCode() { int result = groupId != null ? groupId.hashCode() : 0; result = 31 * result + (artifactId != null ? artifactId.hashCode() : 0); result = 31 * result + (version != null ? version.hashCode() : 0); return result; } public static class Builder { private String groupId; private String artifactId; private String version; public Builder groupId(String groupId) { this.groupId = groupId; return this; } public Builder artifactId(String artifactId) { this.artifactId = artifactId; return this; } public Builder version(String version) { this.version = version; return this; } public Builder releaseId(ReleaseId releaseId) { this.groupId = releaseId.getGroupId(); this.artifactId = releaseId.getArtifactId(); this.version = releaseId.getVersion(); return this; } public ReleaseIdFilter build() { return new ReleaseIdFilter(groupId, artifactId, version); } } }