1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.core.mdm.impl;
7   
8   import java.util.Collection;
9   import java.util.List;
10  
11  import dev.metaschema.core.mdm.IDMFlagNodeItem;
12  import dev.metaschema.core.metapath.item.atomic.IAnyAtomicItem;
13  import dev.metaschema.core.metapath.item.node.IModelNodeItem;
14  import dev.metaschema.core.qname.IEnhancedQName;
15  import dev.metaschema.core.util.CollectionUtil;
16  import edu.umd.cs.findbugs.annotations.NonNull;
17  
18  /**
19   * This abstract Metapath flag node item implementation supports creating a
20   * Metaschema module-based data model.
21   */
22  public abstract class AbstractDMFlagNodeItem
23      extends AbstractDMNodeItem
24      implements IDMFlagNodeItem {
25    @NonNull
26    private IAnyAtomicItem value;
27  
28    /**
29     * Construct a new node item.
30     *
31     * @param value
32     *          the initial field value
33     */
34    protected AbstractDMFlagNodeItem(
35        @NonNull IAnyAtomicItem value) {
36      // only allow extending classes to create instances
37      this.value = value;
38    }
39  
40    @Override
41    public IAnyAtomicItem toAtomicItem() {
42      return value;
43    }
44  
45    /**
46     * Change the field's value to the provided value.
47     *
48     * @param value
49     *          the new field value
50     */
51    public void setValue(@NonNull IAnyAtomicItem value) {
52      this.value = getValueItemType().cast(value);
53    }
54  
55    /**
56     * Change the field's value to the provided value.
57     * <p>
58     * This method expects the provided value to align with the object type
59     * supported by the underlying atomic type.
60     *
61     * @param value
62     *          the new field value
63     */
64    public void setValue(@NonNull Object value) {
65      this.value = getValueItemType().newItem(value);
66    }
67  
68    @Override
69    public String stringValue() {
70      return toAtomicItem().asString();
71    }
72  
73    @Override
74    protected String getValueSignature() {
75      return toAtomicItem().toSignature();
76    }
77  
78    @Override
79    public Collection<? extends List<? extends IModelNodeItem<?, ?>>> getModelItems() {
80      // no model items
81      return CollectionUtil.emptyList();
82    }
83  
84    @Override
85    public List<? extends IModelNodeItem<?, ?>> getModelItemsByName(IEnhancedQName name) {
86      // no model items
87      return CollectionUtil.emptyList();
88    }
89  
90  }