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