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}