All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.osgi.internal.loader.classpath.ManifestPackageAttributes Maven / Gradle / Ivy

Go to download

AspectJ tools most notably contains the AspectJ compiler (AJC). AJC applies aspects to Java classes during compilation, fully replacing Javac for plain Java classes and also compiling native AspectJ or annotation-based @AspectJ syntax. Furthermore, AJC can weave aspects into existing class files in a post-compile binary weaving step. This library is a superset of AspectJ weaver and hence also of AspectJ runtime.

There is a newer version: 1.9.22.1
Show newest version
/******************************************************************************
 * Copyright (c) 2016 Alex Blewitt and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     Alex Blewitt - initial API and implementation
 ******************************************************************************/
package org.eclipse.osgi.internal.loader.classpath;

/**
 * Stores a pair of {@link TitleVersionVendor} package attributes for the Implementation- and Specification- entries.
 */
class ManifestPackageAttributes {
	/**
	 * Constant used when no titles, versions or vendors are specified for the package.
	 */
	static final ManifestPackageAttributes NONE = new ManifestPackageAttributes(TitleVersionVendor.NONE, TitleVersionVendor.NONE);
	private final TitleVersionVendor implementation;
	private final TitleVersionVendor specification;

	/**
	 * Utility method to return the first version, or the second if it is null
	 * @param first the string to return if not null
	 * @param second the fallback value if the first is null
	 * @return the first value, or the second value if the first is null
	 */
	private static String or(String first, String second) {
		return first == null ? second : first;
	}

	/**
	 * Factory method for creating ManifestPackageAttributes.  If any of the given title,
	 * version, or vendor values are null then the defaultAttributes will be
	 * used.  If the defaultAttributes is null or returns all null values then
	 * null values will be used.  If null values are used for all of the
	 * versions, titles, and vendors then {@link #NONE} is returned.
	 * @param specificationTitle the package specification title
	 * @param specificationVersion the package specification version
	 * @param specificationVendor the package specification vendor
	 * @param implementationTitle the package implementation title
	 * @param implementationVersion the package implementation version
	 * @param implementationVendor the package implementation vendor
	 * @param defaultAttributes the default attributes to use when the specified title, version or vendor is null.
	 * @return
	 */
	static ManifestPackageAttributes of(String specificationTitle, String specificationVersion, String specificationVendor, String implementationTitle, String implementationVersion, String implementationVendor, ManifestPackageAttributes defaultAttributes) {
		if (defaultAttributes == null) {
			defaultAttributes = NONE;
		}
		return of(//
				or(specificationTitle, defaultAttributes.getSpecification().getTitle()), //
				or(specificationVersion, defaultAttributes.getSpecification().getVersion()), //
				or(specificationVendor, defaultAttributes.getSpecification().getVendor()), //
				or(implementationTitle, defaultAttributes.getImplementation().getTitle()), //
				or(implementationVersion, defaultAttributes.getImplementation().getVersion()), //
				or(implementationVendor, defaultAttributes.getImplementation().getVendor())//
		);
	}

	private static ManifestPackageAttributes of(String specificationTitle, String specificationVersion, String specificationVendor, String implementationTitle, String implementationVersion, String implementationVendor) {
		TitleVersionVendor specification = TitleVersionVendor.of(specificationTitle, specificationVersion, specificationVendor);
		TitleVersionVendor implementation = TitleVersionVendor.of(implementationTitle, implementationVersion, implementationVendor);
		if (specification == TitleVersionVendor.NONE && implementation == TitleVersionVendor.NONE) {
			return NONE;
		}
		return new ManifestPackageAttributes(implementation, specification);
	}

	private ManifestPackageAttributes(TitleVersionVendor implementation, TitleVersionVendor specification) {
		if (implementation == null || specification == null) {
			throw new IllegalArgumentException();
		}
		this.implementation = implementation;
		this.specification = specification;
	}

	/**
	 * Returns the title, version and vendor for the package implementation.
	 * @return the title, version and vendor for the package implemetnation.
	 */
	TitleVersionVendor getImplementation() {
		return implementation;
	}

	/**
	 * Returns the title, version and vendor for the package specification.
	 * @return the title, version and vendor for the package specification.
	 */
	TitleVersionVendor getSpecification() {
		return specification;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy