1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package gov.nist.secauto.metaschema.core.model.constraint;
7   
8   import gov.nist.secauto.metaschema.core.metapath.DynamicContext;
9   import gov.nist.secauto.metaschema.core.metapath.item.node.INodeItem;
10  
11  import edu.umd.cs.findbugs.annotations.NonNull;
12  import edu.umd.cs.findbugs.annotations.Nullable;
13  
14  /**
15   * Represents a constraint that allows a configurable message.
16   *
17   * @since 2.0.0
18   */
19  public interface IConfigurableMessageConstraint extends IConstraint {
20  
21    /**
22     * A message to emit when the constraint is violated. Allows embedded Metapath
23     * expressions using the syntax {@code \{ metapath \}}.
24     *
25     * @return the message if defined or {@code null} otherwise
26     */
27    @Nullable
28    String getMessage();
29  
30    /**
31     * Generate a violation message using the provided item and dynamic context for
32     * inline Metapath value insertion.
33     *
34     * @param item
35     *          the target Metapath item to use as the focus for Metapath evaluation
36     * @param context
37     *          the dynamic context for Metapath evaluation
38     * @return the message
39     * @throws IllegalStateException
40     *           if a custom message is not defined, which will occur if this method
41     *           is called while {@link #getMessage()} returns {@code null}
42     */
43    @NonNull
44    String generateMessage(@NonNull INodeItem item, @NonNull DynamicContext context);
45  }