1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package gov.nist.secauto.metaschema.databind.model;
7   
8   import gov.nist.secauto.metaschema.core.model.INamedModelInstanceAbsolute;
9   import gov.nist.secauto.metaschema.core.model.JsonGroupAsBehavior;
10  import gov.nist.secauto.metaschema.core.qname.IEnhancedQName;
11  
12  import java.util.Collection;
13  
14  import edu.umd.cs.findbugs.annotations.NonNull;
15  import edu.umd.cs.findbugs.annotations.Nullable;
16  
17  public interface IBoundInstanceModelNamed<ITEM>
18      extends IBoundInstanceModel<ITEM>, INamedModelInstanceAbsolute {
19  
20    @Override
21    @NonNull
22    IBoundDefinitionModel<ITEM> getDefinition();
23  
24    @Override
25    default String getName() {
26      // delegate to the definition
27      return getDefinition().getName();
28    }
29  
30    @Override
31    default Integer getIndex() {
32      // delegate to the definition
33      return getDefinition().getIndex();
34    }
35  
36    @Override
37    @Nullable
38    default IBoundInstanceFlag getEffectiveJsonKey() {
39      return JsonGroupAsBehavior.KEYED.equals(getJsonGroupAsBehavior())
40          ? getJsonKey()
41          : null;
42    }
43  
44    @Override
45    default IBoundInstanceFlag getJsonKey() {
46      return getDefinition().getJsonKey();
47    }
48  
49    @Override
50    default IBoundInstanceFlag getItemJsonKey(Object item) {
51      return getEffectiveJsonKey();
52    }
53  
54    @Override
55    default Collection<? extends Object> getItemValues(Object value) {
56      return getCollectionInfo().getItemsFromValue(value);
57    }
58  
59    @Override
60    default boolean canHandleXmlQName(IEnhancedQName qname) {
61      return qname.equals(getQName());
62    }
63  }