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.time.Period;
9   import java.util.Objects;
10  
11  import dev.metaschema.core.datatype.adapter.MetaschemaDataTypeProvider;
12  import dev.metaschema.core.datatype.adapter.YearMonthAdapter;
13  import dev.metaschema.core.metapath.impl.AbstractMapKey;
14  import dev.metaschema.core.metapath.item.atomic.IYearMonthDurationItem;
15  import dev.metaschema.core.metapath.item.function.IMapKey;
16  import dev.metaschema.core.metapath.item.function.IOpaqueMapKey;
17  import edu.umd.cs.findbugs.annotations.NonNull;
18  
19  /**
20   * An implementation of a Metapath atomic item containing a duration data value
21   * in years and months.
22   */
23  public class YearMonthDurationItemImpl
24      extends AbstractDurationItem<Period>
25      implements IYearMonthDurationItem {
26  
27    /**
28     * Construct a new item with the provided {@code value}.
29     *
30     * @param value
31     *          the value to wrap
32     */
33    public YearMonthDurationItemImpl(@NonNull Period value) {
34      super(value);
35    }
36  
37    @Override
38    public Period asPeriod() {
39      return getValue();
40    }
41  
42    @Override
43    public YearMonthAdapter getJavaTypeAdapter() {
44      return MetaschemaDataTypeProvider.YEAR_MONTH_DURATION;
45    }
46  
47    @Override
48    public int hashCode() {
49      return Objects.hash(asPeriod());
50    }
51  
52    @Override
53    public boolean equals(Object obj) {
54      return this == obj
55          || obj instanceof IYearMonthDurationItem && compareTo((IYearMonthDurationItem) obj) == 0;
56    }
57  
58    @Override
59    public IMapKey asMapKey() {
60      return new MapKey();
61    }
62  
63    private final class MapKey
64        extends AbstractMapKey
65        implements IOpaqueMapKey {
66      @Override
67      public IYearMonthDurationItem getKey() {
68        return YearMonthDurationItemImpl.this;
69      }
70    }
71  }