1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.databind.model;
7   
8   import java.io.IOException;
9   
10  import dev.metaschema.core.model.IBoundObject;
11  import dev.metaschema.core.model.IContainerFlagSupport;
12  import dev.metaschema.core.model.IFeatureDefinitionInstanceInlined;
13  import dev.metaschema.core.model.IModelElementVisitor;
14  import dev.metaschema.core.util.ObjectUtils;
15  import dev.metaschema.databind.model.info.IFeatureScalarItemValueHandler;
16  import dev.metaschema.databind.model.info.IItemReadHandler;
17  import dev.metaschema.databind.model.info.IItemWriteHandler;
18  
19  /**
20   * Represents a bound field instance that contains scalar (simple) data, such as
21   * a string or number value.
22   */
23  public interface IBoundInstanceModelFieldScalar
24      extends IBoundInstanceModelField<Object>,
25      IBoundDefinitionModelField<Object>, IFeatureScalarItemValueHandler,
26      IFeatureDefinitionInstanceInlined<IBoundDefinitionModelField<Object>, IBoundInstanceModelFieldScalar> {
27  
28    // integrate above
29    @Override
30    default IBoundDefinitionModelField<Object> getDefinition() {
31      return IFeatureDefinitionInstanceInlined.super.getDefinition();
32    }
33  
34    @Override
35    default boolean isInline() {
36      return IFeatureDefinitionInstanceInlined.super.isInline();
37    }
38  
39    @Override
40    default IBoundInstanceModelFieldScalar getInlineInstance() {
41      return IFeatureDefinitionInstanceInlined.super.getInlineInstance();
42    }
43  
44    @Override
45    IBoundDefinitionModelAssembly getContainingDefinition();
46  
47    @Override
48    default IContainerFlagSupport<IBoundInstanceFlag> getFlagContainer() {
49      return IContainerFlagSupport.empty();
50    }
51  
52    @Override
53    default IBoundInstanceFlag getJsonKey() {
54      // no flags
55      return null;
56    }
57  
58    @Override
59    default IBoundInstanceFlag getItemJsonKey(Object item) {
60      // no flags, no JSON key
61      return null;
62    }
63  
64    @Override
65    default Object getFieldValue(Object item) {
66      // the item is the field value
67      return item;
68    }
69  
70    @Override
71    default String getJsonValueKeyName() {
72      // no bound value, no value key name
73      return null;
74    }
75  
76    @Override
77    default IBoundInstanceFlag getJsonValueKeyFlagInstance() {
78      // no bound value, no value key name
79      return null;
80    }
81  
82    @Override
83    default Object readItem(IBoundObject parent, IItemReadHandler handler) throws IOException {
84      return handler.readItemField(ObjectUtils.requireNonNull(parent, "parent"), this);
85    }
86  
87    @Override
88    default void writeItem(Object item, IItemWriteHandler handler) throws IOException {
89      handler.writeItemField(item, this);
90    }
91  
92    @Override
93    default <CONTEXT, RESULT> RESULT accept(IModelElementVisitor<CONTEXT, RESULT> visitor, CONTEXT context) {
94      return IBoundInstanceModelField.super.accept(visitor, context);
95    }
96  }