/*******************************************************************************
 * Copyright (c) 2010 Mia-Software.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Fabien Giquel (Mia-Software) - initial API and implementation
 *******************************************************************************/
package org.eclipse.modisco.infra.discovery.core.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.eclipse.modisco.infra.discovery.core.IDiscoverer;

/**
 *
 * The Parameter annotation describes some informations needed to characterize
 * inputs and outputs for discoverers ({@link IDiscoverer})
 *
 * The developer is free to annotate directly a Java field or a getter/setter
 * method, or both field and getter/setter with a same id.
 *
 * An input data is supposed to be valued before a discovery is launched : At
 * least a setter method (preferred) or a public field (discouraged) must be
 * proposed.
 *
 * An output data is supposed to be accessed after a discovery treatment : At
 * least a setter method (preferred) or a public field (discouraged) must be
 * proposed.
 *
 * A data both input and output of the discovery must respond to both previous
 * conditions.
 *
 * Using the annotation will throw compilation errors in the following cases :
 * <ul>
 * <li>
 * annotating a non public field
 * <li>
 * annotating a static field/method
 * <li>
 * annotating a non getter/setter method (e.g. a method which has a java
 * parameter or returns void)
 * <li>
 * annotating with the same id some field, getter, setter related to different
 * Java types
 * <li>
 * annotating more than one field with the same id
 * <li>
 * annotating more than one getter with the same id
 * <li>
 * annotating more than one setter with the same id
 * <li>
 * giving some "required" value on a getter (a getter describes an output data)
 *
 * </ul>
 *
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.FIELD })
public @interface Parameter {
	/**
	 *
	 * @return the identifier of the discoverer parameter
	 */
	String name();

	/**
	 *
	 * @return the optional description of the discoverer parameter
	 */
	String description() default "";

	/**
	 *
	 * @return <code>true</code> if a value for this discoverer parameter is
	 *         mandatory to launch the discovery.
	 */
	boolean requiresInputValue() default false;
}
