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}