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 dev.metaschema.core.util.ObjectUtils;
011import edu.umd.cs.findbugs.annotations.NonNull;
012import edu.umd.cs.findbugs.annotations.Nullable;
013
014/**
015 * Represents a definition that may contain flags.
016 *
017 * @param <FI>
018 *          the flag instance Java type
019 */
020public interface IFeatureContainerFlag<FI extends IFlagInstance> extends IModelDefinition {
021  /**
022   * Lazy initialize the flag instances associated with this definition.
023   *
024   * @return the flag container
025   */
026  @NonNull
027  IContainerFlagSupport<FI> getFlagContainer();
028
029  @Override
030  @Nullable
031  default FI getFlagInstanceByName(Integer index) {
032    return getFlagContainer().getFlagInstanceMap().get(index);
033  }
034
035  @Override
036  @NonNull
037  default Collection<? extends FI> getFlagInstances() {
038    return ObjectUtils.notNull(getFlagContainer().getFlagInstanceMap().values());
039  }
040
041  @Override
042  default FI getJsonKey() {
043    return getFlagContainer().getJsonKeyFlagInstance();
044  }
045}