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