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}