package aQute.bnd.annotation.headers;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Maven defines contributors and developers in the POM. This annotation will
 * generate a (not standardized by OSGi) Bundle-Contributors header.
 * <p>
 * This annotation can be used directly on a type or it can 'color' an
 * annotation. This coloring allows custom annotations that define a specific
 * contributor. For example:
 *
 * <pre>
 *  {@code @}BundleContributor("Peter.Kriens@aQute.biz")
 * {@code @}interface pkriens {} {@code @}pkriens public class MyFoo { ... }
 * </pre>
 *
 * Duplicates are removed before the header is generated and the coloring does
 * not create an entry in the header, only an annotation on an actual type is
 * counted. This makes it possible to make a library of contributors without
 * then adding them all to the header.
 * <p>
 * See <a href=https://maven.apache.org/pom.html#Developers>Maven POM
 * reference</a>
 */
@Retention(RetentionPolicy.CLASS)
@Target({
	ElementType.ANNOTATION_TYPE, ElementType.TYPE
})
public @interface BundleContributors {

	/**
	 * The email address of the developer.
	 */
	String value();

	/**
	 * The display name of the developer. If not specified, the {@link #value()}
	 * is used.
	 */
	String name() default "";

	/**
	 * The roles this contributor plays in the development.
	 */
	String[] roles() default {};

	/**
	 * The name of the organization where the contributor works for.
	 */
	String organization() default "";

	/**
	 * The url of the organization where the contributor works for.
	 */
	String organizationUrl() default "";

	/**
	 * Time offset in hours from UTC without Daylight savings
	 */
	int timezone() default 0;
}
