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 cardinality condition(s) to be met in the context of 022 * the containing annotation. 023 */ 024@Documented 025@Retention(RUNTIME) 026@Target(ANNOTATION_TYPE) 027public @interface HasCardinality { 028 /** 029 * An optional identifier for the constraint, which must be unique to only this 030 * constraint. 031 * 032 * @return the identifier if provided or an empty string otherwise 033 */ 034 @SuppressWarnings("PMD.ShortMethodName") 035 @NonNull 036 String id() default ""; 037 038 /** 039 * An optional formal name for the constraint. 040 * 041 * @return the formal name if provided or an empty string otherwise 042 */ 043 @NonNull 044 String formalName() default ""; 045 046 /** 047 * An optional description of the constraint. 048 * 049 * @return the description if provided or an empty string otherwise 050 */ 051 @NonNull 052 String description() default ""; 053 054 /** 055 * The significance of a violation of this constraint. 056 * 057 * @return the level 058 */ 059 @NonNull 060 Level level() default IConstraint.Level.ERROR; 061 062 /** 063 * An optional metapath that points to the target flag or field value that the 064 * constraint applies to. If omitted the target will be ".", which means the 065 * target is the value of the {@link BoundFlag}, {@link BoundField} or 066 * {@link BoundFieldValue} annotation the constraint appears on. In the prior 067 * case, this annotation may only appear on a {@link BoundField} if the field 068 * has no flags, which results in a {@link BoundField} annotation on a field 069 * instance with a scalar, data type value. 070 * 071 * @return the target metapath 072 */ 073 @NonNull 074 String target() default "."; 075 076 /** 077 * An optional set of properties associated with these allowed values. 078 * 079 * @return the properties or an empty array with no properties 080 */ 081 Property[] properties() default {}; 082 083 /** 084 * The minimum occurrence of the target. This value cannot be less than or equal 085 * to the corresponding value defined on the target. The value must be greater 086 * than {@code 0}. 087 * 088 * @return a non-negative integer or {@code -1} if not defined 089 */ 090 int minOccurs() default -1; 091 092 /** 093 * The maximum occurrence of the target. This value must be greater than or 094 * equal to the {@link #minOccurs()} if both are provided. This value must be 095 * less than the corresponding value defined on the target. 096 * 097 * @return a non-negative integer or {@code -1} if not defined 098 */ 099 int maxOccurs() default -1; 100 101 /** 102 * The message to emit when the constraint is violated. 103 * 104 * @return the message or an empty string otherwise 105 */ 106 @NonNull 107 String message() default ""; 108 109 /** 110 * Any remarks about the constraint, encoded as an escaped Markdown string. 111 * 112 * @return an encoded markdown string or an empty string if no remarks are 113 * provided 114 */ 115 @NonNull 116 String remarks() default ""; 117}