org.apache.sling.provisioning.model.Artifact Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.apache.sling.provisioning.model Show documentation
Show all versions of org.apache.sling.provisioning.model Show documentation
The provisioning model for Apache Sling
The newest version!
/*
* 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.sling.provisioning.model;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* Description of an artifact.
* An artifact is described by it's Apache Maven coordinates consisting of group id, artifact id, and version.
* In addition, the classifier and type can be specified as well. If no type is specified, "jar" is assumed.
* An artifact can have any metadata.
*/
public class Artifact extends Commentable implements Comparable {
/** The required group id. */
private final String groupId;
/** The required artifact id. */
private final String artifactId;
/** The required version. */
private final String version;
/** The optional classifier. */
private final String classifier;
/** The optional type. */
private final String type;
/** Artifact metadata. */
private final Map metadata = new HashMap();
/**
* Create a new artifact object
* @param gId The group id (required)
* @param aId The artifact id (required)
* @param version The version (required)
* @param classifier The classifier (optional)
* @param type The type/extension (optional, defaults to jar)
*/
public Artifact(final String gId,
final String aId,
final String version,
final String classifier,
final String type) {
this(gId, aId, version, classifier, type, Collections.emptyMap());
}
/**
* Create a new artifact object
* @param gId The group id (required)
* @param aId The artifact id (required)
* @param version The version (required)
* @param classifier The classifier (optional)
* @param type The type/extension (optional, defaults to jar)
* @param metadata The metadata associated with the Artifact
*/
public Artifact(final String gId,
final String aId,
final String version,
final String classifier,
final String type,
final Map metadata) {
this.groupId = (gId != null ? gId.trim() : null);
this.artifactId = (aId != null ? aId.trim() : null);
this.version = (version != null ? version.trim() : null);
final String trimmedType = (type != null ? type.trim() : null);
if ( "bundle".equals(trimmedType) || trimmedType == null || trimmedType.isEmpty() ) {
this.type = "jar";
} else {
this.type = trimmedType;
}
final String trimmedClassifier = (classifier != null ? classifier.trim() : null);
if ( trimmedClassifier != null && trimmedClassifier.isEmpty() ) {
this.classifier = null;
} else {
this.classifier = trimmedClassifier;
}
this.metadata.putAll(metadata);
}
/**
* Create a new artifact from a maven url,
* 'mvn:' [ repository-url '!' ] group-id '/' artifact-id [ '/' [version] [ '/' [type] [ '/' classifier ] ] ] ]
* @param url The url
* @return A new artifact
* @throws IllegalArgumentException If the url is not valid
*/
public static Artifact fromMvnUrl(final String url) {
if ( url == null || !url.startsWith("mvn:") ) {
throw new IllegalArgumentException("Invalid mvn url: " + url);
}
final String content = url.substring(4);
// ignore repository url
int pos = content.indexOf('!');
if ( pos != -1 ) {
throw new IllegalArgumentException("Repository url is not supported for Maven artifacts at the moment.");
}
final String coordinates = (pos == -1 ? content : content.substring(pos + 1));
String gId = null;
String aId = null;
String version = null;
String type = null;
String classifier = null;
int part = 0;
String value = coordinates;
while ( value != null ) {
pos = value.indexOf('/');
final String current;
if ( pos == -1 ) {
current = value;
value = null;
} else {
if ( pos == 0 ) {
current = null;
} else {
current = value.substring(0, pos);
}
value = value.substring(pos + 1);
}
if ( current != null ) {
if ( part == 0 ) {
gId = current;
} else if ( part == 1 ) {
aId = current;
} else if ( part == 2 ) {
version = current;
} else if ( part == 3 ) {
type = current;
} else if ( part == 4 ) {
classifier = current;
}
}
part++;
}
if ( version == null ) {
version = "LATEST";
}
return new Artifact(gId, aId, version, classifier, type);
}
@Override
public int hashCode() {
return toMvnUrl().hashCode();
}
@Override
public boolean equals(Object o) {
if(o == null) return false;
if(!(o instanceof Artifact)) return false;
return toMvnUrl().equals(((Artifact)o).toMvnUrl());
}
@Override
public int compareTo(final Object o) {
if(o == null) return 1;
if(!(o instanceof Artifact)) return 1;
return toMvnUrl().compareTo(((Artifact)o).toMvnUrl());
}
/**
* Return a mvn url
* @return A mvn url
* @see #fromMvnUrl(String)
*/
public String toMvnUrl() {
final StringBuilder sb = new StringBuilder("mvn:");
sb.append(this.groupId);
sb.append('/');
sb.append(this.artifactId);
sb.append('/');
sb.append(this.version);
if ( this.classifier != null || !"jar".equals(this.type)) {
sb.append('/');
sb.append(this.type);
if ( this.classifier != null ) {
sb.append('/');
sb.append(this.classifier);
}
}
return sb.toString();
}
/**
* Return the group id.
* @return The group id.
*/
public String getGroupId() {
return groupId;
}
/**
* Return the artifact id.
* @return The artifact id.
*/
public String getArtifactId() {
return artifactId;
}
/**
* Return the version.
* @return The version.
*/
public String getVersion() {
return version;
}
/**
* Return the optional classifier.
* @return The classifier or null.
*/
public String getClassifier() {
return classifier;
}
/**
* Return the type.
* @return The type.
*/
public String getType() {
return type;
}
/**
* Get the metadata of the artifact.
* @return The metadata.
*/
public Map getMetadata() {
return this.metadata;
}
/**
* Create a Maven like relative repository path.
* @return A relative repository path.
*/
public String getRepositoryPath() {
final StringBuilder sb = new StringBuilder();
sb.append(groupId.replace('.', '/'));
sb.append('/');
sb.append(artifactId);
sb.append('/');
sb.append(version);
sb.append('/');
sb.append(artifactId);
sb.append('-');
sb.append(version);
if ( classifier != null ) {
sb.append('-');
sb.append(classifier);
}
sb.append('.');
sb.append(type);
return sb.toString();
}
@Override
public String toString() {
return "Artifact [groupId=" + groupId
+ ", artifactId=" + artifactId
+ ", version=" + version
+ ", classifier=" + classifier
+ ", type=" + type
+ ( this.getLocation() != null ? ", location=" + this.getLocation() : "")
+ "]";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy