package io.vertx.codegen;
import io.vertx.codegen.doc.Doc;
import io.vertx.codegen.doc.Text;
import io.vertx.codegen.type.AnnotationValueInfo;
import io.vertx.codegen.type.TypeInfo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Describes a property of a data object model
. Author: Julien Viet
/**
* Describes a property of a {@link io.vertx.codegen.DataObjectModel data object model}.
*
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
public class PropertyInfo {
final PropertyKind kind;
final boolean declared;
final String name;
final Doc doc;
final TypeInfo type;
final String setterMethod;
final String adderMethod;
final String getterMethod;
final boolean jsonifiable;
final boolean deprecated;
final Text deprecatedDesc;
final Map<String, AnnotationValueInfo> annotations;
public PropertyInfo(boolean declared, String name, Doc doc, TypeInfo type, String setterMethod, String adderMethod, String getterMethod,
List<AnnotationValueInfo> annotations, PropertyKind kind, boolean jsonifiable, boolean deprecated, Text deprecatedDesc) {
this.kind = kind;
this.declared = declared;
this.name = name;
this.doc = doc;
this.type = type;
this.annotations = annotations.stream().collect(HashMap::new, (m, a) -> m.put(a.getName(), a), HashMap::putAll);
this.adderMethod = adderMethod;
this.setterMethod = setterMethod;
this.getterMethod = getterMethod;
this.jsonifiable = jsonifiable;
this.deprecated = deprecated;
this.deprecatedDesc = deprecatedDesc;
}
Returns: true if the property is declared by the its data object, that means it does not override the same property
from other data object ancestors
/**
* @return true if the property is declared by the its data object, that means it does not override the same property
* from other data object ancestors
*/
public boolean isDeclared() {
return declared;
}
Returns: the resolved documentation of this property
/**
* @return the resolved documentation of this property
*/
public Doc getDoc() {
return doc;
}
Returns: the property kind
/**
* @return the property kind
*/
public PropertyKind getKind() {
return kind;
}
Returns: the property name
/**
* @return the property name
*/
public String getName() {
return name;
}
Returns: the property type
/**
* @return the property type
*/
public TypeInfo getType() {
return type;
}
Returns: the name of the Java method that can read the state of this property on the data object.
/**
* @return the name of the Java method that can read the state of this property on the data object.
*/
public String getGetterMethod() {
return getterMethod;
}
Returns: the name of the Java method that will update the state of this property on the data object, the nature of the method depends on the isAdder()
and isList()
values.
/**
* @return the name of the Java method that will update the state of this property on the data object, the nature of the method
* depends on the {@link #isAdder()} and {@link #isList()} values.
*/
public String getSetterMethod() {
return setterMethod;
}
public String getAdderMethod() {
return adderMethod;
}
Returns: the list of AnnotationValueInfo
for this property
/**
* @return the list of {@link AnnotationValueInfo} for this property
*/
public List<AnnotationValueInfo> getAnnotations() {
return new ArrayList<>(annotations.values());
}
public AnnotationValueInfo getAnnotation(String annotationName) {
return annotations.get(annotationName);
}
Returns: true if the property is managed as a single value
/**
* @return true if the property is managed as a single value
*/
public boolean isValue() {
return kind == PropertyKind.VALUE;
}
Returns: true if the property is managed by a java.util.List<T>
/**
* @return true if the property is managed by a {@code java.util.List<T>}
*/
public boolean isList() {
return kind == PropertyKind.LIST;
}
Returns: true if the property is managed by a java.util.Set<T>
/**
* @return true if the property is managed by a {@code java.util.Set<T>}
*/
public boolean isSet() {
return kind == PropertyKind.SET;
}
Returns: true if the property is managed by a java.util.Map<String, T>
/**
* @return true if the property is managed by a {@code java.util.Map<String, T>}
*/
public boolean isMap() {
return kind == PropertyKind.MAP;
}
Returns: true if the property has a setter method
/**
* @return true if the property has a setter method
*/
public boolean isSetter() {
return setterMethod != null;
}
Returns: true if the property has an adder method
/**
* @return true if the property has an adder method
*/
public boolean isAdder() {
return adderMethod != null;
}
Returns: true if the property is annotated, either on field or method
/**
* @return true if the property is annotated, either on field or method
*/
public boolean isAnnotated() {
return !annotations.isEmpty();
}
Returns: true if the property type can be converted to a Json type
/**
* @return true if the property type can be converted to a Json type
*/
public boolean isJsonifiable() {
return jsonifiable;
}
Returns: true
if the property has a @Deprecated
annotation
/**
*
* @return {@code true} if the property has a {@code @Deprecated} annotation
*/
public boolean isDeprecated() {
return deprecated;
}
Returns: the description of deprecated
/**
* @return the description of deprecated
*/
public Text getDeprecatedDesc() {
return deprecatedDesc;
}
@Override
public String toString() {
return "PropertyInfo(name=" + name + ")";
}
}