001/* 002 * SPDX-FileCopyrightText: none 003 * SPDX-License-Identifier: CC0-1.0 004 */ 005 006package gov.nist.secauto.metaschema.databind.model.annotations; 007 008import static java.lang.annotation.ElementType.ANNOTATION_TYPE; 009import static java.lang.annotation.RetentionPolicy.RUNTIME; 010 011import gov.nist.secauto.metaschema.core.model.constraint.IConstraint; 012import gov.nist.secauto.metaschema.core.model.constraint.IConstraint.Level; 013 014import java.lang.annotation.Documented; 015import java.lang.annotation.Retention; 016import java.lang.annotation.Target; 017 018import edu.umd.cs.findbugs.annotations.NonNull; 019 020/** 021 * This annotation defines a rule that requires that the target contents of the 022 * assembly, represented by the containing {@link MetaschemaAssembly} 023 * annotation, reference items in a name index defined by the {@link Index} 024 * constraint. 025 */ 026 027@Documented 028@Retention(RUNTIME) 029@Target(ANNOTATION_TYPE) 030public @interface IndexHasKey { 031 /** 032 * An optional identifier for the constraint, which must be unique to only this 033 * constraint. 034 * 035 * @return the identifier if provided or an empty string otherwise 036 */ 037 @SuppressWarnings("PMD.ShortMethodName") 038 @NonNull 039 String id() default ""; 040 041 /** 042 * An optional formal name for the constraint. 043 * 044 * @return the formal name if provided or an empty string otherwise 045 */ 046 @NonNull 047 String formalName() default ""; 048 049 /** 050 * An optional description of the constraint. 051 * 052 * @return the description if provided or an empty string otherwise 053 */ 054 @NonNull 055 String description() default ""; 056 057 /** 058 * The significance of a violation of this constraint. 059 * 060 * @return the level 061 */ 062 @NonNull 063 Level level() default IConstraint.Level.ERROR; 064 065 /** 066 * An optional metapath that points to the target flag or field value that the 067 * constraint applies to. If omitted the target will be ".", which means the 068 * target is the value of the {@link BoundFlag}, {@link BoundField} or 069 * {@link BoundFieldValue} annotation the constraint appears on. In the prior 070 * case, this annotation may only appear on a {@link BoundField} if the field 071 * has no flags, which results in a {@link BoundField} annotation on a field 072 * instance with a scalar, data type value. 073 * 074 * @return the target metapath 075 */ 076 @NonNull 077 String target() default "."; 078 079 /** 080 * An optional set of properties associated with these allowed values. 081 * 082 * @return the properties or an empty array with no properties 083 */ 084 Property[] properties() default {}; 085 086 /** 087 * A reference to a named index. 088 * 089 * @return the index name 090 */ 091 @NonNull 092 String indexName(); 093 094 /** 095 * A list of one or more keys to use in looking up an entry in a given index. 096 * 097 * @return one or more keys 098 */ 099 @NonNull 100 KeyField[] keyFields(); 101 102 /** 103 * The message to emit when the constraint is violated. 104 * 105 * @return the message or an empty string otherwise 106 */ 107 @NonNull 108 String message() default ""; 109 110 /** 111 * Any remarks about the constraint, encoded as an escaped Markdown string. 112 * 113 * @return an encoded markdown string or an empty string if no remarks are 114 * provided 115 */ 116 @NonNull 117 String remarks() default ""; 118}