1   
2   package dev.metaschema.core.metapath.item.node;
3   
4   import java.net.URI;
5   
6   import dev.metaschema.core.metapath.DynamicContext;
7   import dev.metaschema.core.metapath.StaticContext;
8   import dev.metaschema.core.metapath.format.IPathFormatter;
9   import dev.metaschema.core.metapath.function.InvalidTypeFunctionException;
10  import dev.metaschema.core.metapath.item.ICollectionValue;
11  import dev.metaschema.core.metapath.item.atomic.IAnyAtomicItem;
12  import dev.metaschema.core.metapath.type.IItemType;
13  import dev.metaschema.core.metapath.type.IKindTest;
14  import dev.metaschema.core.model.IAssemblyDefinition;
15  import dev.metaschema.core.model.IAssemblyInstance;
16  import edu.umd.cs.findbugs.annotations.NonNull;
17  import edu.umd.cs.findbugs.annotations.Nullable;
18  
19  /**
20   * A Metapath node valued item representing a Metaschema module assembly.
21   */
22  public interface IAssemblyNodeItem extends IModelNodeItem<IAssemblyDefinition, IAssemblyInstance> {
23    /**
24     * Get the static type information of the node item.
25     *
26     * @return the item type
27     */
28    @NonNull
29    static IItemType type() {
30      return IItemType.assembly();
31    }
32  
33    @Override
34    default IKindTest<IAssemblyNodeItem> getType() {
35      StaticContext staticContext = getStaticContext();
36      return IItemType.assembly(
37          getQName(),
38          getDefinition().getDefinitionQName().toEQName(staticContext),
39          staticContext);
40    }
41  
42    @Override
43    default NodeItemKind getNodeItemKind() {
44      return NodeItemKind.ASSEMBLY;
45    }
46  
47    @Override
48    default NodeType getNodeType() {
49      return NodeType.ASSEMBLY;
50    }
51  
52    @Override
53    default IAssemblyNodeItem getNodeItem() {
54      return this;
55    }
56  
57    @Override
58    @Nullable
59    default URI getBaseUri() {
60      INodeItem parent = getParentNodeItem();
61      return parent == null ? null : parent.getBaseUri();
62    }
63  
64    @Override
65    default String format(@NonNull IPathFormatter formatter) {
66      return formatter.formatAssembly(this);
67    }
68  
69    @Override
70    default IAnyAtomicItem toAtomicItem() {
71      throw new InvalidTypeFunctionException(InvalidTypeFunctionException.DATA_ITEM_IS_FUNCTION, this);
72    }
73  
74    @Override
75    default <CONTEXT, RESULT> RESULT accept(@NonNull INodeItemVisitor<CONTEXT, RESULT> visitor, CONTEXT context) {
76      return visitor.visitAssembly(this, context);
77    }
78  
79    @Override
80    default boolean deepEquals(ICollectionValue other, DynamicContext dynamicContext) {
81      return other instanceof IAssemblyNodeItem
82          && NodeComparators.compareNodeItem(this, (IAssemblyNodeItem) other, dynamicContext);
83    }
84  }