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 java.math.BigDecimal;
9   import java.math.BigInteger;
10  
11  import dev.metaschema.core.datatype.adapter.DecimalAdapter;
12  import dev.metaschema.core.metapath.item.atomic.IIntegerItem;
13  import edu.umd.cs.findbugs.annotations.NonNull;
14  
15  /**
16   * An abstract implementation of a Metapath atomic item containing an integer
17   * data value.
18   */
19  public abstract class AbstractIntegerItem
20      extends AbstractDecimalItem<BigInteger>
21      implements IIntegerItem {
22    /**
23     * Construct a new item with the provided {@code value}.
24     *
25     * @param value
26     *          the value to wrap
27     */
28    protected AbstractIntegerItem(@NonNull BigInteger value) {
29      super(value);
30    }
31  
32    @Override
33    public boolean toEffectiveBoolean() {
34      return !BigInteger.ZERO.equals(asInteger());
35    }
36  
37    @Override
38    public BigDecimal asDecimal() {
39      return new BigDecimal(getValue(), DecimalAdapter.mathContext());
40    }
41  
42    @Override
43    public BigInteger asInteger() {
44      return getValue();
45    }
46  
47    @Override
48    public int hashCode() {
49      return asInteger().hashCode();
50    }
51  
52    @Override
53    public boolean equals(Object obj) {
54      return this == obj
55          || obj instanceof IIntegerItem && compareTo((IIntegerItem) obj) == 0;
56    }
57  }