001/* 002 * SPDX-FileCopyrightText: none 003 * SPDX-License-Identifier: CC0-1.0 004 */ 005 006package dev.metaschema.databind.model; 007 008import java.util.Collection; 009 010import dev.metaschema.core.model.INamedModelInstanceAbsolute; 011import dev.metaschema.core.model.JsonGroupAsBehavior; 012import dev.metaschema.core.qname.IEnhancedQName; 013import edu.umd.cs.findbugs.annotations.NonNull; 014import edu.umd.cs.findbugs.annotations.Nullable; 015 016/** 017 * Represents a bound model instance that is named and can be addressed by that 018 * name in the Metaschema model. 019 * 020 * @param <ITEM> 021 * the Java type of the bound item 022 */ 023public interface IBoundInstanceModelNamed<ITEM> 024 extends IBoundInstanceModel<ITEM>, INamedModelInstanceAbsolute { 025 026 @Override 027 @NonNull 028 IBoundDefinitionModel<ITEM> getDefinition(); 029 030 @Override 031 default String getName() { 032 // delegate to the definition 033 return getDefinition().getName(); 034 } 035 036 @Override 037 default Integer getIndex() { 038 // delegate to the definition 039 return getDefinition().getIndex(); 040 } 041 042 @Override 043 @Nullable 044 default IBoundInstanceFlag getEffectiveJsonKey() { 045 return JsonGroupAsBehavior.KEYED.equals(getJsonGroupAsBehavior()) 046 ? getJsonKey() 047 : null; 048 } 049 050 @Override 051 default IBoundInstanceFlag getJsonKey() { 052 return getDefinition().getJsonKey(); 053 } 054 055 @Override 056 default IBoundInstanceFlag getItemJsonKey(Object item) { 057 return getEffectiveJsonKey(); 058 } 059 060 @Override 061 default Collection<? extends Object> getItemValues(Object value) { 062 return getCollectionInfo().getItemsFromValue(value); 063 } 064 065 @Override 066 default boolean canHandleXmlQName(IEnhancedQName qname) { 067 return qname.equals(getQName()); 068 } 069}