1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.core.mdm;
7   
8   import dev.metaschema.core.mdm.impl.DefinitionFieldNodeItem;
9   import dev.metaschema.core.mdm.impl.IDMModelNodeItem;
10  import dev.metaschema.core.metapath.StaticContext;
11  import dev.metaschema.core.metapath.item.atomic.IAnyAtomicItem;
12  import dev.metaschema.core.metapath.item.node.IFieldNodeItem;
13  import dev.metaschema.core.model.IAssemblyDefinition;
14  import dev.metaschema.core.model.IFieldDefinition;
15  import dev.metaschema.core.model.IFieldInstance;
16  import edu.umd.cs.findbugs.annotations.NonNull;
17  
18  /**
19   * Represents a Metapath field node item that is backed by a simple Metaschema
20   * module-based data model.
21   * <p>
22   * The {@link #newInstance(IFieldDefinition, IAnyAtomicItem, StaticContext)}
23   * method can be used to create a node from an {@link IAssemblyDefinition} that
24   * is orphaned from a document model.
25   */
26  public interface IDMFieldNodeItem
27      extends IFieldNodeItem, IDMModelNodeItem<IFieldDefinition, IFieldInstance> {
28    /**
29     * Create new field node item that is detached from a parent node item.
30     *
31     * @param definition
32     *          the Metaschema field definition describing the field
33     * @param value
34     *          the field's initial value
35     * @param staticContext
36     *          the atomic field value
37     * @return the new field node item
38     */
39    @NonNull
40    static IDMFieldNodeItem newInstance(
41        @NonNull IFieldDefinition definition,
42        @NonNull IAnyAtomicItem value,
43        @NonNull StaticContext staticContext) {
44      return new DefinitionFieldNodeItem(definition, value, staticContext);
45    }
46  }