1 /* 2 * SPDX-FileCopyrightText: none 3 * SPDX-License-Identifier: CC0-1.0 4 */ 5 6 package gov.nist.secauto.metaschema.databind.model.annotations; 7 8 import static java.lang.annotation.ElementType.TYPE; 9 import static java.lang.annotation.RetentionPolicy.RUNTIME; 10 11 import gov.nist.secauto.metaschema.core.model.IFieldInstance; 12 import gov.nist.secauto.metaschema.databind.model.IBoundModule; 13 14 import java.lang.annotation.Documented; 15 import java.lang.annotation.Retention; 16 import java.lang.annotation.Target; 17 18 import edu.umd.cs.findbugs.annotations.NonNull; 19 20 /** 21 * This annotation indicates that the target class represents a Module field. 22 * <p> 23 * Classes with this annotation must have a field with the 24 * {@link BoundFieldValue} annotation. 25 */ 26 @Documented 27 @Retention(RUNTIME) 28 @Target(TYPE) 29 public @interface MetaschemaField { 30 /** 31 * Get the documentary formal name of the field. 32 * <p> 33 * If the value is "##none", then the description will be considered 34 * {@code null}. 35 * 36 * @return a markdown string or {@code "##none"} if no formal name is provided 37 */ 38 @NonNull 39 String formalName() default ModelUtil.NO_STRING_VALUE; 40 41 /** 42 * Get the documentary description of the field. 43 * <p> 44 * If the value is "##none", then the description will be considered 45 * {@code null}. 46 * 47 * @return a markdown string or {@code "##none"} if no description is provided 48 */ 49 @NonNull 50 String description() default ModelUtil.NO_STRING_VALUE; 51 52 /** 53 * Name of the field. 54 * 55 * @return the name 56 */ 57 @NonNull 58 String name(); 59 60 /** 61 * The binary name of the assembly. 62 * <p> 63 * The value {@link Integer#MIN_VALUE} indicates that there is no index. 64 * 65 * @return the index value 66 */ 67 int index() default Integer.MIN_VALUE; 68 69 /** 70 * Get the name to use for data instances of this field. 71 * <p> 72 * This overrides the name provided by {@link #name()}. 73 * <p> 74 * The value {@link ModelUtil#NO_STRING_VALUE} indicates that there is no use 75 * name. 76 * 77 * 78 * @return the use name or {@link ModelUtil#NO_STRING_VALUE} if no use name is 79 * provided 80 */ 81 @NonNull 82 String useName() default ModelUtil.NO_STRING_VALUE; 83 84 /** 85 * The binary use name of the assembly. 86 * <p> 87 * The value {@link Integer#MIN_VALUE} indicates that there is no index. 88 * 89 * @return the index value or {@link Integer#MIN_VALUE} if there is no index 90 * value 91 */ 92 int useIndex() default Integer.MIN_VALUE; 93 94 /** 95 * Get the metaschema class that "owns" this assembly, which is the concrete 96 * implementation of the metaschema containing the assembly. 97 * 98 * @return the class that extends {@link IBoundModule} 99 */ 100 @NonNull 101 Class<? extends IBoundModule> moduleClass(); 102 103 /** 104 * If the data type allows it, determines if the field's value must be wrapped 105 * with an XML element whose name is the specified {@link #name()} and namespace 106 * is derived from the namespace of the instance. 107 * 108 * @return {@code true} if the field must be wrapped, or {@code false} otherwise 109 */ 110 boolean inXmlWrapped() default IFieldInstance.DEFAULT_FIELD_IN_XML_WRAPPED; 111 112 /** 113 * An optional set of associated properties. 114 * 115 * @return the properties or an empty array with no properties 116 */ 117 Property[] properties() default {}; 118 119 /** 120 * Get any remarks for this field. 121 * 122 * @return a markdown string or {@code "##none"} if no remarks are provided 123 */ 124 @NonNull 125 String remarks() default ModelUtil.NO_STRING_VALUE; 126 127 /** 128 * Get the value constraints defined for this Metaschema field definition. 129 * 130 * @return the value constraints 131 */ 132 ValueConstraints valueConstraints() default @ValueConstraints; 133 }