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