1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.core.model;
7   
8   import java.util.Collection;
9   
10  import edu.umd.cs.findbugs.annotations.NonNull;
11  
12  /**
13   * Provides grouped container model functionality through delegation.
14   * <p>
15   * This interface provides default implementations for grouped container model
16   * operations by delegating to an {@link IContainerModelSupport} instance.
17   *
18   * @param <NMI>
19   *          the Java type of named model instances
20   * @param <FI>
21   *          the Java type of field instances
22   * @param <AI>
23   *          the Java type of assembly instances
24   */
25  public interface IFeatureContainerModelGrouped<
26      NMI extends INamedModelInstanceGrouped,
27      FI extends IFieldInstanceGrouped,
28      AI extends IAssemblyInstanceGrouped>
29      extends IContainerModelGrouped {
30    /**
31     * Get the model container implementation instance.
32     *
33     * @return the model container instance
34     */
35    @NonNull
36    IContainerModelSupport<NMI, NMI, FI, AI> getModelContainer();
37  
38    @Override
39    default boolean hasChildren() {
40      return !getModelContainer().getModelInstances().isEmpty();
41    }
42  
43    @Override
44    default Collection<NMI> getModelInstances() {
45      return getNamedModelInstances();
46    }
47  
48    @Override
49    default NMI getNamedModelInstanceByName(Integer name) {
50      return getModelContainer().getNamedModelInstanceMap().get(name);
51    }
52  
53    @SuppressWarnings("null")
54    @Override
55    default Collection<NMI> getNamedModelInstances() {
56      return getModelContainer().getNamedModelInstanceMap().values();
57    }
58  
59    @Override
60    default FI getFieldInstanceByName(Integer name) {
61      return getModelContainer().getFieldInstanceMap().get(name);
62    }
63  
64    @SuppressWarnings("null")
65    @Override
66    default Collection<FI> getFieldInstances() {
67      return getModelContainer().getFieldInstanceMap().values();
68    }
69  
70    @Override
71    default AI getAssemblyInstanceByName(Integer name) {
72      return getModelContainer().getAssemblyInstanceMap().get(name);
73    }
74  
75    @SuppressWarnings("null")
76    @Override
77    default Collection<AI> getAssemblyInstances() {
78      return getModelContainer().getAssemblyInstanceMap().values();
79    }
80  }