blob: 38ffe58c397438e9ebcf5139f00b2c21d1827394 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2007, 2012 SpringSource
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.virgo.ide.runtime.core.artefacts;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.virgo.ide.bundlerepository.domain.BundleImport;
import org.eclipse.virgo.ide.bundlerepository.domain.OsgiVersion;
/**
* A library stored in BRITS. A library is a collection of bundles grouped under a common name, id, and version.
*
* @author acolyer
*/
public class LibraryArtefact extends Artefact implements Comparable<LibraryArtefact> {
/**
* The bundle imports declared by the library
*/
private List<BundleImport> bundleImports;
/** for persistence use only */
protected LibraryArtefact() {
}
/**
* Create a new LibraryArtefact. This will *not* be stored in the database unless explicitly stored using the
* ArtefactRepository. Storing a library artefact does *not* the bundles it contains - these must be stored in the
* database independently first.
*
* @param name human readable name of the library (e.g. "Spring Framework")
* @param symbolicName identifying name of the library (e.g. "org.springframework")
* @param version the library version, following normal OSGi conventions
* @param organisationName the organisation name as found in ivy.xml
* @param moduleName the module name as found in ivy.xml
* @param bundles the bundles that are part of this library
*/
public LibraryArtefact(String name, String symbolicName, OsgiVersion version, String organisationName, String moduleName) {
super(name, symbolicName, version, organisationName, moduleName);
this.bundleImports = new ArrayList<BundleImport>();
}
/**
* Add a new import to this library
*
* @param imp the import to add
*/
public void addBundleImport(BundleImport imp) {
this.bundleImports.add(imp);
}
/**
* The set of bundles contained in this library.
*/
public List<BundleImport> getBundleImports() {
return this.bundleImports;
}
/**
* The relative URL needed to download this library from S3
*/
@Override
public String getRelativeUrlPath() {
return "/" + getOrganisationName() + "/" + getModuleName() + "/" + getVersion() + "/" + getModuleName() + "-" + getVersion() + ".libd";
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Library-Name: ");
builder.append(this.getName());
builder.append("\n");
builder.append("Library-SymbolicName: ");
builder.append(this.getSymbolicName());
builder.append("\n");
builder.append("Library-Version: ");
builder.append(this.getVersion());
builder.append("\n");
builder.append("Library bundles: \n");
if (this.bundleImports != null) {
for (BundleImport b : this.bundleImports) {
builder.append(" ");
builder.append(b.getSymbolicName());
builder.append(" v.");
builder.append(b.getVersionRange());
builder.append("\n");
}
}
return builder.toString();
}
/**
* Sort by symbolic name, and then reverse version. See the javadoc for the TreeSet class to understand the
* implications of this wrt. Set semantics. Since equality is based on id, and compareTo is based on symbolicName
* and version, full Set semantics when using LibraryArtefacts in a TreeSet are not guaranteed.
*/
public int compareTo(LibraryArtefact other) {
if (this == other) {
return 0;
}
if (other == null) {
return 0;
}
if (this.getSymbolicName().equals(other.getSymbolicName())) {
return other.getVersion().compareTo(this.getVersion());
} else {
return this.getSymbolicName().compareTo(other.getSymbolicName());
}
}
/**
* Returns LIBRARY;
*
* @see org.eclipse.virgo.ide.runtime.core.artefacts.IArtefact#getType()
*/
public ArtefactType getArtefactType() {
return ArtefactType.LIBRARY;
}
}