1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package gov.nist.secauto.metaschema.databind.model.info;
7   
8   import gov.nist.secauto.metaschema.core.datatype.IDataTypeAdapter;
9   import gov.nist.secauto.metaschema.core.model.IBoundObject;
10  import gov.nist.secauto.metaschema.databind.io.BindingException;
11  import gov.nist.secauto.metaschema.databind.model.IValuedMutable;
12  
13  import edu.umd.cs.findbugs.annotations.NonNull;
14  import edu.umd.cs.findbugs.annotations.Nullable;
15  
16  public interface IFeatureScalarItemValueHandler
17      extends IItemValueHandler<Object>, IValuedMutable {
18  
19    default void setValue(@NonNull Object parent, @NonNull String text) {
20      Object item = getValueFromString(text);
21      setValue(parent, item);
22    }
23  
24    @Nullable
25    default String toStringFromItem(@NonNull Object parent) {
26      Object item = getValue(parent);
27      return item == null ? null : getJavaTypeAdapter().asString(item);
28    }
29  
30    default Object getValueFromString(@NonNull String text) {
31      return getJavaTypeAdapter().parse(text);
32    }
33  
34    /**
35     * Get the data type adapter supporting the scalar value.
36     *
37     * @return the data type adapter
38     */
39    @NonNull
40    IDataTypeAdapter<?> getJavaTypeAdapter();
41  
42    @Override
43    default Object deepCopyItem(Object source, IBoundObject parentInstance) throws BindingException {
44      return getJavaTypeAdapter().copy(source);
45    }
46  }