package org.springframework.roo.project;
import java.util.Arrays;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
/**
* The combination of Maven-style groupId, artifactId, and version.
*
* @author Andrew Swan
* @since 1.2.0
*/
public class GAV implements Comparable<GAV> {
/**
* Returns an instance based on the given concatenated Maven coordinates.
*
* @param coordinates the groupId, artifactId, and version, separated by
* {@link MavenUtils#COORDINATE_SEPARATOR}
* @return a non-blank instance
* @throws IllegalArgumentException if the string is not formatted as
* explained above, or if any of the elements are themselves
* invalid.
*/
public static GAV getInstance(final String coordinates) {
final String[] coordinateArray =
ArrayUtils.nullToEmpty(StringUtils.split(coordinates, MavenUtils.COORDINATE_SEPARATOR));
Validate.isTrue(coordinateArray.length == 3, "Expected three coordinates, but found "
+ coordinateArray.length + ": " + Arrays.toString(coordinateArray) + "; did you use the '"
+ MavenUtils.COORDINATE_SEPARATOR + "' separator?");
return new GAV(coordinateArray[0], coordinateArray[1], coordinateArray[2]);
}
private final String artifactId;
private final String groupId;
private final String version;
/**
* Constructor
*
* @param groupId must be a valid Maven ID
* @param artifactId must be a valid Maven ID
* @param version cannot be blank
*/
public GAV(final String groupId, final String artifactId, final String version) {
// Check
Validate.isTrue(MavenUtils.isValidMavenId(groupId), "Invalid groupId '%s'", groupId);
Validate.isTrue(MavenUtils.isValidMavenId(artifactId), "Invalid artifactId '%s'", artifactId);
Validate.notBlank(version, "Version is required for %s:%s", groupId, artifactId);
// Assign
this.groupId = groupId;
this.artifactId = artifactId;
this.version = version;
}
public int compareTo(final GAV other) {
Validate.notNull(other, "Cannot compare %s to null", this);
int result = groupId.compareTo(other.getGroupId());
if (result == 0) {
result = artifactId.compareTo(other.getArtifactId());
}
if (result == 0) {
result = version.compareTo(other.getVersion());
}
return result;
}
@Override
public boolean equals(final Object other) {
return other == this || other instanceof GAV && compareTo((GAV) other) == 0;
}
public String getArtifactId() {
return artifactId;
}
public String getGroupId() {
return groupId;
}
public String getVersion() {
return version;
}
@Override
public int hashCode() {
return artifactId.hashCode();
}
@Override
public String toString() {
// For debugging
return StringUtils.join(ArrayUtils.toArray(groupId, artifactId, version), ":");
}
}