1   
2   package dev.metaschema.core.metapath.item.node;
3   
4   import dev.metaschema.core.metapath.item.atomic.IAnyAtomicItem;
5   import dev.metaschema.core.metapath.item.atomic.IAtomicValuedItem;
6   import dev.metaschema.core.model.IValuedDefinition;
7   import edu.umd.cs.findbugs.annotations.NonNull;
8   import edu.umd.cs.findbugs.annotations.Nullable;
9   
10  // FIXME: cleanup these feature interfaces to reduce the number of interfaces and methods
11  // FIXME: rename to IFeatureRequiredDataAtomicValuedNodeItem
12  interface IFeatureAtomicValuedItem
13      extends IFeatureRequiredDataItem, IAtomicValuedItem {
14  
15    @NonNull
16    IValuedDefinition getDefinition();
17  
18    @Nullable
19    Object getAtomicValue();
20  
21    @Nullable
22    default IAnyAtomicItem newAtomicItem() {
23      Object atomicValue = getAtomicValue();
24      IAnyAtomicItem retval = null;
25      if (atomicValue != null) {
26        IValuedDefinition def = getDefinition();
27        retval = def.getJavaTypeAdapter().newItem(atomicValue);
28      }
29      return retval;
30    }
31  }