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 java.util.Collection;
9
10 import edu.umd.cs.findbugs.annotations.NonNull;
11 import edu.umd.cs.findbugs.annotations.Nullable;
12
13 /**
14 * Indicates that the Metaschema type that has a complex model that can contain
15 * field and assembly instances.
16 */
17 public interface IContainerModel extends IContainer {
18
19 @Override
20 default boolean hasChildren() {
21 return !getModelInstances().isEmpty();
22 }
23
24 /**
25 * Retrieve the Metaschema module definition containing this container.
26 *
27 * @return the containing Metaschema module definition
28 */
29 @NonNull
30 IAssemblyDefinition getOwningDefinition();
31
32 /**
33 * Get all model instances within the container.
34 *
35 * @return an ordered collection of model instances
36 */
37 @NonNull
38 Collection<? extends IModelInstance> getModelInstances();
39
40 /**
41 * Get all named model instances within the container.
42 *
43 * @return an ordered mapping of use name to model instance
44 */
45 @NonNull
46 Collection<? extends INamedModelInstance> getNamedModelInstances();
47
48 /**
49 * Get the model instance contained within the model with the associated use
50 * name.
51 *
52 * @param index
53 * the effective name-based qualified name index of the model instance
54 * @return the matching model instance, or {@code null} if no match was found
55 * @see INamedModelInstance#getEffectiveName()
56 */
57 @Nullable
58 INamedModelInstance getNamedModelInstanceByName(Integer index);
59
60 /**
61 * Get all field instances within the container.
62 *
63 * @return a mapping of use name to field instance
64 */
65 @NonNull
66 Collection<? extends IFieldInstance> getFieldInstances();
67
68 /**
69 * Get the field instance contained within the model with the associated use
70 * name.
71 *
72 * @param index
73 * the use name-based qualified name index of the field instance
74 * @return the matching field instance, or {@code null} if no match was found
75 * @see IFieldInstance#getUseName()
76 */
77 @Nullable
78 IFieldInstance getFieldInstanceByName(Integer index);
79
80 /**
81 * Get all assembly instances within the container.
82 *
83 * @return a mapping of use name to assembly instance
84 */
85 @NonNull
86 Collection<? extends IAssemblyInstance> getAssemblyInstances();
87
88 /**
89 * Get the assembly instance contained within the model with the associated use
90 * name.
91 *
92 * @param index
93 * the effective name-based qualified name index of the assembly
94 * instance
95 * @return the matching assembly instance, or {@code null} if no match was found
96 * @see INamedModelInstance#getEffectiveName()
97 */
98 @Nullable
99 IAssemblyInstance getAssemblyInstanceByName(Integer index);
100 }