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.ANNOTATION_TYPE;
9 import static java.lang.annotation.RetentionPolicy.RUNTIME;
10
11 import java.lang.annotation.Documented;
12 import java.lang.annotation.Retention;
13 import java.lang.annotation.Target;
14 import java.util.regex.Pattern;
15
16 import edu.umd.cs.findbugs.annotations.NonNull;
17
18 /**
19 * Identifies a Metapath expression referencing a value that is used in
20 * generating a key as part of a {@link IsUnique}, {@link Index}, or
21 * {@link IndexHasKey} constraint annotation.
22 */
23 @Documented
24 @Retention(RUNTIME)
25 @Target(ANNOTATION_TYPE)
26 public @interface KeyField {
27 /**
28 * An optional metapath that points to the target flag or field value that the
29 * key applies to. If omitted the target will be ".", which means the target is
30 * the value of the {@link BoundFlag}, {@link BoundField} or
31 * {@link BoundFieldValue} annotation the constraint appears on. In the prior
32 * case, this annotation may only appear on a {@link BoundField} if the field
33 * has no flags, which results in a {@link BoundField} annotation on a field
34 * instance with a scalar, data type value.
35 *
36 * @return the target metapath
37 */
38 @NonNull
39 String target() default ".";
40
41 /**
42 * Retrieve an optional pattern to use to retrieve the value. If
43 * non-{@code null}, the first capturing group is used to retrieve the value.
44 * This must be a pattern that can compile using
45 * {@link Pattern#compile(String)}.
46 *
47 * @return a pattern string or an empty string if no pattern is provided
48 */
49 @NonNull
50 String pattern() default "";
51
52 /**
53 * Any remarks about the key field, encoded as an escaped Markdown string.
54 *
55 * @return an encoded markdown string or an empty string if no remarks are
56 * provided
57 */
58 @NonNull
59 String remarks() default "";
60 }