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 * Common interface for model container support classes.
014 *
015 * @param <MI>
016 *          the model instance Java type
017 * @param <NMI>
018 *          the named model instance Java type
019 * @param <FI>
020 *          the field instance Java type
021 * @param <AI>
022 *          the assembly instance Java type
023 */
024public interface IFeatureContainerModelAbsolute<
025    MI extends IModelInstanceAbsolute,
026    NMI extends INamedModelInstanceAbsolute,
027    FI extends IFieldInstanceAbsolute,
028    AI extends IAssemblyInstanceAbsolute>
029    extends IContainerModelAbsolute {
030  /**
031   * Get the model container implementation instance.
032   *
033   * @return the model container instance
034   */
035  @NonNull
036  IContainerModelSupport<MI, NMI, FI, AI> getModelContainer();
037
038  @Override
039  default Collection<? extends MI> getModelInstances() {
040    return getModelContainer().getModelInstances();
041  }
042
043  @Override
044  default NMI getNamedModelInstanceByName(Integer name) {
045    return getModelContainer().getNamedModelInstanceMap().get(name);
046  }
047
048  @SuppressWarnings("null")
049  @Override
050  default Collection<NMI> getNamedModelInstances() {
051    return getModelContainer().getNamedModelInstanceMap().values();
052  }
053
054  @Override
055  default FI getFieldInstanceByName(Integer name) {
056    return getModelContainer().getFieldInstanceMap().get(name);
057  }
058
059  @SuppressWarnings("null")
060  @Override
061  default Collection<FI> getFieldInstances() {
062    return getModelContainer().getFieldInstanceMap().values();
063  }
064
065  @Override
066  default AI getAssemblyInstanceByName(Integer name) {
067    return getModelContainer().getAssemblyInstanceMap().get(name);
068  }
069
070  @SuppressWarnings("null")
071  @Override
072  default Collection<AI> getAssemblyInstances() {
073    return getModelContainer().getAssemblyInstanceMap().values();
074  }
075}