1
2
3
4
5
6 package dev.metaschema.core.metapath.item.atomic.impl;
7
8 import java.net.URI;
9
10 import dev.metaschema.core.metapath.item.atomic.AbstractAnyAtomicItem;
11 import dev.metaschema.core.metapath.item.atomic.IAnyUriItem;
12 import dev.metaschema.core.metapath.item.function.IMapKey;
13 import dev.metaschema.core.metapath.item.function.impl.AbstractStringMapKey;
14 import dev.metaschema.core.util.ObjectUtils;
15 import edu.umd.cs.findbugs.annotations.NonNull;
16 import nl.talsmasoftware.lazy4j.Lazy;
17
18
19
20
21
22 public abstract class AbstractUriItem
23 extends AbstractAnyAtomicItem<URI>
24 implements IAnyUriItem {
25
26 @SuppressWarnings("synthetic-access")
27 private final Lazy<String> stringValue = Lazy.of(super::asString);
28
29
30
31
32
33
34
35 protected AbstractUriItem(@NonNull URI value) {
36 super(value);
37 }
38
39 @Override
40 @NonNull
41 public URI asUri() {
42 return getValue();
43 }
44
45 @Override
46 public String asString() {
47 return ObjectUtils.notNull(stringValue.get());
48 }
49
50 @Override
51 public IMapKey asMapKey() {
52 return new MapKey();
53 }
54
55 @Override
56 public int hashCode() {
57 return asUri().hashCode();
58 }
59
60 @Override
61 protected String getValueSignature() {
62 return "'" + asString() + "'";
63 }
64
65 @Override
66 public boolean equals(Object obj) {
67 return this == obj
68 || obj instanceof IAnyUriItem && compareTo((IAnyUriItem) obj) == 0;
69
70 }
71
72 private final class MapKey
73 extends AbstractStringMapKey {
74
75 @Override
76 public IAnyUriItem getKey() {
77 return AbstractUriItem.this;
78 }
79
80 @Override
81 public String asString() {
82 return getKey().asString();
83 }
84 }
85 }