001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package gov.nist.secauto.metaschema.databind.model.info;
007
008import gov.nist.secauto.metaschema.core.datatype.IDataTypeAdapter;
009import gov.nist.secauto.metaschema.core.model.IBoundObject;
010import gov.nist.secauto.metaschema.databind.io.BindingException;
011import gov.nist.secauto.metaschema.databind.model.IValuedMutable;
012
013import edu.umd.cs.findbugs.annotations.NonNull;
014import edu.umd.cs.findbugs.annotations.Nullable;
015
016public interface IFeatureScalarItemValueHandler
017    extends IItemValueHandler<Object>, IValuedMutable {
018
019  default void setValue(@NonNull Object parent, @NonNull String text) {
020    Object item = getValueFromString(text);
021    setValue(parent, item);
022  }
023
024  @Nullable
025  default String toStringFromItem(@NonNull Object parent) {
026    Object item = getValue(parent);
027    return item == null ? null : getJavaTypeAdapter().asString(item);
028  }
029
030  default Object getValueFromString(@NonNull String text) {
031    return getJavaTypeAdapter().parse(text);
032  }
033
034  /**
035   * Get the data type adapter supporting the scalar value.
036   *
037   * @return the data type adapter
038   */
039  @NonNull
040  IDataTypeAdapter<?> getJavaTypeAdapter();
041
042  @Override
043  default Object deepCopyItem(Object source, IBoundObject parentInstance) throws BindingException {
044    return getJavaTypeAdapter().copy(source);
045  }
046}