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