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