1 /*
2 * SPDX-FileCopyrightText: none
3 * SPDX-License-Identifier: CC0-1.0
4 */
5
6 package gov.nist.secauto.metaschema.core.model;
7
8 import edu.umd.cs.findbugs.annotations.Nullable;
9
10 /**
11 * A marker interface for Metaschema constructs that can have a default value.
12 */
13 public interface IDefaultable {
14
15 /**
16 * Retrieves the default data value for this model construct.
17 * <p>
18 * Child implementations are expected to override this method to provide a more
19 * reasonable default value.
20 *
21 * @return the default value or {@code null} if there is no default
22 */
23 // from: IModelElement
24 @Nullable
25 default Object getDefaultValue() {
26 // no value by default
27 return null;
28 }
29
30 /**
31 * Get the effective default value for the model construct.
32 * <p>
33 * This should consider default values in any related referenced definitions or
34 * child constructs as needed to determine the default to use.
35 *
36 * @return the effective default value or {@code null} if there is no effective
37 * default value
38 */
39 // from IInstance
40 @Nullable
41 default Object getEffectiveDefaultValue() {
42 return getDefaultValue();
43 }
44
45 /**
46 * Get the actual default value to use for the model construct.
47 * <p>
48 * This will consider the effective default value in the use context to
49 * determine the appropriate default to use. Factors such as the required
50 * instance cardinality may affect if the effective default or an empty
51 * collection is used.
52 *
53 * @return the actual default value or {@code null} if there is no actual
54 * default value
55 */
56 @Nullable
57 default Object getResolvedDefaultValue() {
58 return getEffectiveDefaultValue();
59 }
60 }