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.model.IModelElementVisitor;
012import gov.nist.secauto.metaschema.core.util.ObjectUtils;
013import gov.nist.secauto.metaschema.databind.model.info.IFeatureScalarItemValueHandler;
014import gov.nist.secauto.metaschema.databind.model.info.IItemReadHandler;
015import gov.nist.secauto.metaschema.databind.model.info.IItemWriteHandler;
016
017import java.io.IOException;
018
019public interface IBoundInstanceModelFieldScalar
020    extends IBoundInstanceModelField<Object>,
021    IBoundDefinitionModelField<Object>, IFeatureScalarItemValueHandler,
022    IFeatureDefinitionInstanceInlined<IBoundDefinitionModelField<Object>, IBoundInstanceModelFieldScalar> {
023
024  // integrate above
025  @Override
026  default IBoundDefinitionModelField<Object> getDefinition() {
027    return IFeatureDefinitionInstanceInlined.super.getDefinition();
028  }
029
030  @Override
031  default boolean isInline() {
032    return IFeatureDefinitionInstanceInlined.super.isInline();
033  }
034
035  @Override
036  default IBoundInstanceModelFieldScalar getInlineInstance() {
037    return IFeatureDefinitionInstanceInlined.super.getInlineInstance();
038  }
039
040  @Override
041  IBoundDefinitionModelAssembly getContainingDefinition();
042
043  @Override
044  default IContainerFlagSupport<IBoundInstanceFlag> getFlagContainer() {
045    return IContainerFlagSupport.empty();
046  }
047
048  @Override
049  default IBoundInstanceFlag getJsonKey() {
050    // no flags
051    return null;
052  }
053
054  @Override
055  default IBoundInstanceFlag getItemJsonKey(Object item) {
056    // no flags, no JSON key
057    return null;
058  }
059
060  @Override
061  default Object getFieldValue(Object item) {
062    // the item is the field value
063    return item;
064  }
065
066  @Override
067  default String getJsonValueKeyName() {
068    // no bound value, no value key name
069    return null;
070  }
071
072  @Override
073  default IBoundInstanceFlag getJsonValueKeyFlagInstance() {
074    // no bound value, no value key name
075    return null;
076  }
077
078  @Override
079  default Object readItem(IBoundObject parent, IItemReadHandler handler) throws IOException {
080    return handler.readItemField(ObjectUtils.requireNonNull(parent, "parent"), this);
081  }
082
083  @Override
084  default void writeItem(Object item, IItemWriteHandler handler) throws IOException {
085    handler.writeItemField(item, this);
086  }
087
088  @Override
089  default <CONTEXT, RESULT> RESULT accept(IModelElementVisitor<CONTEXT, RESULT> visitor, CONTEXT context) {
090    return IBoundInstanceModelField.super.accept(visitor, context);
091  }
092}