001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package gov.nist.secauto.metaschema.databind.model;
007
008import gov.nist.secauto.metaschema.core.model.IBoundObject;
009import gov.nist.secauto.metaschema.core.model.IContainerFlagSupport;
010import gov.nist.secauto.metaschema.core.model.IFeatureDefinitionInstanceInlined;
011import gov.nist.secauto.metaschema.core.util.ObjectUtils;
012import gov.nist.secauto.metaschema.databind.model.info.IFeatureScalarItemValueHandler;
013import gov.nist.secauto.metaschema.databind.model.info.IItemReadHandler;
014import gov.nist.secauto.metaschema.databind.model.info.IItemWriteHandler;
015
016import java.io.IOException;
017
018public interface IBoundInstanceModelFieldScalar
019    extends IBoundInstanceModelField<Object>,
020    IBoundDefinitionModelField<Object>, IFeatureScalarItemValueHandler,
021    IFeatureDefinitionInstanceInlined<IBoundDefinitionModelField<Object>, IBoundInstanceModelFieldScalar> {
022
023  // integrate above
024  @Override
025  default IBoundDefinitionModelField<Object> getDefinition() {
026    return IFeatureDefinitionInstanceInlined.super.getDefinition();
027  }
028
029  @Override
030  default IBoundInstanceModelFieldScalar getInlineInstance() {
031    return IFeatureDefinitionInstanceInlined.super.getInlineInstance();
032  }
033
034  @Override
035  IBoundDefinitionModelAssembly getContainingDefinition();
036
037  @Override
038  default IContainerFlagSupport<IBoundInstanceFlag> getFlagContainer() {
039    return IContainerFlagSupport.empty();
040  }
041
042  @Override
043  default IBoundInstanceFlag getJsonKey() {
044    // no flags
045    return null;
046  }
047
048  @Override
049  default IBoundInstanceFlag getItemJsonKey(Object item) {
050    // no flags, no JSON key
051    return null;
052  }
053
054  @Override
055  default Object getFieldValue(Object item) {
056    // the item is the field value
057    return item;
058  }
059
060  @Override
061  default String getJsonValueKeyName() {
062    // no bound value, no value key name
063    return null;
064  }
065
066  @Override
067  default IBoundInstanceFlag getJsonValueKeyFlagInstance() {
068    // no bound value, no value key name
069    return null;
070  }
071
072  @Override
073  default Object readItem(IBoundObject parent, IItemReadHandler handler) throws IOException {
074    return handler.readItemField(ObjectUtils.requireNonNull(parent, "parent"), this);
075  }
076
077  @Override
078  default void writeItem(Object item, IItemWriteHandler handler) throws IOException {
079    handler.writeItemField(item, this);
080  }
081}