package org.societies.utilities.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;
/**
* This annotation is used to distinguish between Societies External Interfaces that:<br>
* <ol>
* <li>
* are provided by the Societies Framework
* for 3rd Party Developers to use (<b>type = provided</b>)
* </li>
* <li>
* are required to be implemented by 3rd Party Services
* from the Societies Framework <br>(only if those 3rd Party Services want to use the SOCIETIES components that define them) (<b>type = required</b>)
* </li></ol>
*
* @author gspadotto
*
*/
@Documented
@Target(value = {ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface SocietiesExternalInterface {
/**
* The type of Societies Interface.
* Can be either Required or Provided.<br>
* <b>Required</b> interfaces are functionalities that need to be implemented by Societies Clients so that framework components can invoke them.<br>
* <b>Provided</b> interfaces are functionalities that are exposed to Societies Clients from framework components.<br>
*/
public enum SocietiesInterfaceType { REQUIRED, PROVIDED};
SocietiesInterfaceType type() default SocietiesInterfaceType.PROVIDED;
}