001/* 002 * SPDX-FileCopyrightText: none 003 * SPDX-License-Identifier: CC0-1.0 004 */ 005 006package dev.metaschema.databind.model; 007 008import dev.metaschema.core.model.IBoundObject; 009import dev.metaschema.core.model.INamedModelInstanceGrouped; 010import dev.metaschema.core.model.JsonGroupAsBehavior; 011import dev.metaschema.core.model.util.ModuleUtils; 012import dev.metaschema.core.util.ObjectUtils; 013import dev.metaschema.databind.io.BindingException; 014import dev.metaschema.databind.model.info.IFeatureComplexItemValueHandler; 015import edu.umd.cs.findbugs.annotations.Nullable; 016 017/** 018 * Represents a model instance that is a member of a choice group instance. 019 */ 020public interface IBoundInstanceModelGroupedNamed 021 extends INamedModelInstanceGrouped, IFeatureComplexItemValueHandler { 022 @Override 023 IBoundInstanceModelChoiceGroup getParentContainer(); 024 025 @Override 026 IBoundDefinitionModelComplex getDefinition(); 027 028 @Override 029 @Nullable 030 default IBoundInstanceFlag getEffectiveJsonKey() { 031 return JsonGroupAsBehavior.KEYED.equals(getParentContainer().getJsonGroupAsBehavior()) 032 ? getJsonKey() 033 : null; 034 } 035 036 @Override 037 default IBoundInstanceFlag getJsonKey() { 038 String name = getParentContainer().getJsonKeyFlagInstanceName(); 039 return name == null 040 ? null 041 : ObjectUtils.requireNonNull( 042 getDefinition().getFlagInstanceByName( 043 ModuleUtils.parseFlagName(getContainingModule(), name).getIndexPosition())); 044 } 045 046 @Override 047 default IBoundDefinitionModelAssembly getContainingDefinition() { 048 return getParentContainer().getContainingDefinition(); 049 } 050 051 @Override 052 default String getName() { 053 return getDefinition().getName(); 054 } 055 056 @Override 057 default IBoundObject deepCopyItem(IBoundObject item, IBoundObject parentInstance) throws BindingException { 058 return getDefinition().deepCopyItem(item, parentInstance); 059 } 060 061 @Override 062 default void callBeforeDeserialize(IBoundObject targetObject, IBoundObject parentObject) throws BindingException { 063 getDefinition().callBeforeDeserialize(targetObject, parentObject); 064 } 065 066 @Override 067 default void callAfterDeserialize(IBoundObject targetObject, IBoundObject parentObject) throws BindingException { 068 getDefinition().callAfterDeserialize(targetObject, parentObject); 069 } 070}