001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package dev.metaschema.core.model;
007
008import java.util.Collection;
009
010import edu.umd.cs.findbugs.annotations.NonNull;
011
012/**
013 * Provides grouped container model functionality through delegation.
014 * <p>
015 * This interface provides default implementations for grouped container model
016 * operations by delegating to an {@link IContainerModelSupport} instance.
017 *
018 * @param <NMI>
019 *          the Java type of named model instances
020 * @param <FI>
021 *          the Java type of field instances
022 * @param <AI>
023 *          the Java type of assembly instances
024 */
025public interface IFeatureContainerModelGrouped<
026    NMI extends INamedModelInstanceGrouped,
027    FI extends IFieldInstanceGrouped,
028    AI extends IAssemblyInstanceGrouped>
029    extends IContainerModelGrouped {
030  /**
031   * Get the model container implementation instance.
032   *
033   * @return the model container instance
034   */
035  @NonNull
036  IContainerModelSupport<NMI, NMI, FI, AI> getModelContainer();
037
038  @Override
039  default boolean hasChildren() {
040    return !getModelContainer().getModelInstances().isEmpty();
041  }
042
043  @Override
044  default Collection<NMI> getModelInstances() {
045    return getNamedModelInstances();
046  }
047
048  @Override
049  default NMI getNamedModelInstanceByName(Integer name) {
050    return getModelContainer().getNamedModelInstanceMap().get(name);
051  }
052
053  @SuppressWarnings("null")
054  @Override
055  default Collection<NMI> getNamedModelInstances() {
056    return getModelContainer().getNamedModelInstanceMap().values();
057  }
058
059  @Override
060  default FI getFieldInstanceByName(Integer name) {
061    return getModelContainer().getFieldInstanceMap().get(name);
062  }
063
064  @SuppressWarnings("null")
065  @Override
066  default Collection<FI> getFieldInstances() {
067    return getModelContainer().getFieldInstanceMap().values();
068  }
069
070  @Override
071  default AI getAssemblyInstanceByName(Integer name) {
072    return getModelContainer().getAssemblyInstanceMap().get(name);
073  }
074
075  @SuppressWarnings("null")
076  @Override
077  default Collection<AI> getAssemblyInstances() {
078    return getModelContainer().getAssemblyInstanceMap().values();
079  }
080}