1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.core.metapath.item.atomic.impl;
7   
8   import dev.metaschema.core.datatype.IDataTypeAdapter;
9   import dev.metaschema.core.datatype.adapter.MetaschemaDataTypeProvider;
10  import dev.metaschema.core.metapath.impl.AbstractMapKey;
11  import dev.metaschema.core.metapath.item.atomic.AbstractAtomicItemBase;
12  import dev.metaschema.core.metapath.item.atomic.IQNameItem;
13  import dev.metaschema.core.metapath.item.atomic.IStringItem;
14  import dev.metaschema.core.metapath.item.function.IMapKey;
15  import dev.metaschema.core.metapath.item.function.IOpaqueMapKey;
16  import dev.metaschema.core.qname.IEnhancedQName;
17  import edu.umd.cs.findbugs.annotations.NonNull;
18  
19  /**
20   * An implementation of a Metapath atomic item with a boolean value.
21   */
22  public class QNameItemImpl
23      extends AbstractAtomicItemBase<IEnhancedQName>
24      implements IQNameItem {
25    @NonNull
26    private final IEnhancedQName value;
27  
28    /**
29     * Construct a new item with the provided {@code value}.
30     *
31     * @param value
32     *          the value to wrap
33     */
34    public QNameItemImpl(@NonNull IEnhancedQName value) {
35      this.value = value;
36    }
37  
38    @Override
39    public IEnhancedQName getValue() {
40      return toEnhancedQName();
41    }
42  
43    @Override
44    public IEnhancedQName toEnhancedQName() {
45      return value;
46    }
47  
48    @Override
49    public String asString() {
50      return toEnhancedQName().toEQName();
51    }
52  
53    @Override
54    public IStringItem asStringItem() {
55      return IStringItem.valueOf(asString());
56    }
57  
58    @Override
59    public IDataTypeAdapter<IEnhancedQName> getJavaTypeAdapter() {
60      return MetaschemaDataTypeProvider.QNAME;
61    }
62  
63    @Override
64    protected String getValueSignature() {
65      return asString();
66    }
67  
68    @Override
69    public IMapKey asMapKey() {
70      return new MapKey();
71    }
72  
73    @Override
74    public int hashCode() {
75      return value.hashCode();
76    }
77  
78    @Override
79    public boolean equals(Object obj) {
80      return this == obj
81          || obj instanceof IQNameItem && compareTo((IQNameItem) obj) == 0;
82    }
83  
84    private final class MapKey
85        extends AbstractMapKey
86        implements IOpaqueMapKey {
87      @Override
88      public IQNameItem getKey() {
89        return QNameItemImpl.this;
90      }
91    }
92  }