package nl.tno.sensorstorm.api.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import nl.tno.sensorstorm.api.particles.DataParticle;
import nl.tno.sensorstorm.api.processing.MetaParticleHandler;
import nl.tno.sensorstorm.api.processing.Operation;
/**
* Mandatory annotation for the {@link Operation}. There can be three parameters
* (inputs, outputs and metaParticleHandlers). The inputs is mandatory and the
* other two are optional.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface OperationDeclaration {
/**
* An array containing one or more types of {@link DataParticle}s that this
* {@link Operation} can process.
*/
Class<? extends DataParticle>[] inputs();
/**
* An array containing zero or more types of {@link DataParticle}s
* specifying the dataParticles this {@link Operation} produces.
*/
Class<? extends DataParticle>[] outputs() default {};
/**
* An array containing zero or more {@link MetaParticleHandler}s that must
* be instantiated and connected to this operation.
*/
Class<? extends MetaParticleHandler>[] metaParticleHandlers() default {};
}