/**
* Copyright 2011-2017 Asakusa Framework Team.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.asakusafw.vocabulary.operator;
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;
/**
* A meta-data for each operator.
* Clients should not be use this annotation directly.
* @since 0.5.0
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface OperatorInfo {
/**
* Kind of this operator.
*/
Class<?> kind();
/**
* A list of inputs for the target operator.
*/
Input[] input();
/**
* A list of outputs for the target operator.
*/
Output[] output();
/**
* A list of parameters for the target operator.
*/
Parameter[] parameter();
/**
* Operator input.
* @since 0.5.0
*/
@Target({ })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Input {
/**
* The factory parameter position.
*/
int position();
/**
* The input name.
*/
String name();
/**
* The input data model type.
* If this input is generic, the type must be represents its upper-bound type.
*/
Class<?> type();
/**
* The type variable name of the target data model.
* If this input is not generic, this must be an empty string.
*/
String typeVariable() default "";
}
/**
* Operator output.
* @since 0.5.0
*/
@Target({ })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Output {
/**
* The output name.
*/
String name();
/**
* The output data model type.
* If this output is generic, the type must be represents its upper-bound type.
*/
Class<?> type();
/**
* The type variable name of the target data model.
* If this output is not generic, this must be an empty string.
*/
String typeVariable() default "";
}
/**
* Operator parameter.
* @since 0.5.0
*/
@Target({ })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Parameter {
/**
* The factory parameter position.
*/
int position();
/**
* The parameter name.
*/
String name();
/**
* The parameter type.
*/
Class<?> type();
/**
* The type variable name of the target data model.
* This is only {@link #type()} represents {@link java.lang.Class data model type}; then
* this represents its type argument.
* If this parameter does not represents data model type, this must be an empty string.
*/
String typeVariable() default "";
}
}