linneo

Anotaciones

Cuatro anotaciones de io.github.devbpm.linneo.annotation declaran qué contiene un modelo de datos. Todas son @Documented, @Retention(RUNTIME) y @since 0.1.0. Las lee el Classifier, que nunca lee los valores de los campos.

Anotación Destino Declara Página
@Category campo, componente de record la categoría de un campo, opcionalmente con niveles más estrictos y su identificabilidad category.md
@DefaultCategory tipo la categoría no personal de todos los campos sin anotar de una clase, con el motivo default-category.md
@CategoryByRow campo, componente de record un campo cuya categoría depende de cada fila, con la categoría más protectora que puede tener una fila category-by-row.md
@Exempt campo, componente de record un campo que no contiene datos del modelo, con el motivo exempt.md

En un componente de record, las anotaciones se aplican también al campo del componente, que es lo que lee el clasificador.

Qué campos se clasifican

El clasificador recorre la clase y sus superclases (se detiene antes de Object, Record y Enum) y considera todos los campos que declaran salvo los estáticos, transient y sintéticos (y los llamados $$_..., que añade Hibernate), que se omiten siempre sin necesidad de anotación. Consulta Classifier.

Orden de resolución

Para cada campo considerado, gana la primera regla que se cumple:

# Regla Resultado (FieldClassification.basis())
1 El campo tiene @Exempt se omite: sin clasificación
2 El campo tiene @Category la categoría declarada (DECLARED)
2 El campo tiene @CategoryByRow la categoría techo (BY_ROW)
3 La clase que declara el campo tiene @DefaultCategory ese valor por defecto (CLASS_DEFAULT)
4 La clase que se clasifica tiene @DefaultCategory ese valor por defecto (CLASS_DEFAULT)
5 ninguna de las anteriores error UNCLASSIFIED_FIELD

Consecuencias:

Conflictos

Combinación en un campo Violación Efecto
@Exempt + @Category y/o @CategoryByRow CONFLICTING_ANNOTATIONS: @Exempt cannot be combined with @Category or @CategoryByRow se omite el campo (el motivo de @Exempt se sigue comprobando)
@Category + @CategoryByRow CONFLICTING_ANNOTATIONS: @Category and @CategoryByRow cannot be used together el campo no se clasifica
@Category o @CategoryByRow + @DefaultCategory de la clase ninguna prevalece la anotación del campo

Todos los conflictos son errores. Consulta Violaciones para ver todos los códigos.

Ejemplo

import io.github.devbpm.linneo.annotation.*;
import static io.github.devbpm.linneo.Categories.*;

@DefaultCategory(value = SYSTEM_CONFIGURATION, reason = "menu configuration")
public class MenuGroup {
    private String code;                      // CLASS_DEFAULT: system.configuration
    private String label;                     // CLASS_DEFAULT: system.configuration

    @Category(USER_UNIQUE_ID)                 // DECLARED: prevalece sobre el valor por defecto
    private Long createdBy;

    @Exempt("computed from code")
    private String displayKey;                // se omite

    private transient String cache;           // se omite: transient
}

Véase también: @Category · @DefaultCategory · @CategoryByRow · @Exempt · Classifier · curso: Anotar modelos