1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package gov.nist.secauto.metaschema.core.datatype.adapter;
28
29 import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatTypes;
30
31 import gov.nist.secauto.metaschema.core.datatype.AbstractDataTypeAdapter;
32 import gov.nist.secauto.metaschema.core.metapath.item.atomic.IIPv6AddressItem;
33 import gov.nist.secauto.metaschema.core.util.ObjectUtils;
34
35 import java.util.List;
36
37 import edu.umd.cs.findbugs.annotations.NonNull;
38 import inet.ipaddr.AddressStringException;
39 import inet.ipaddr.IPAddressString;
40 import inet.ipaddr.IPAddressStringParameters;
41 import inet.ipaddr.IncompatibleAddressException;
42 import inet.ipaddr.ipv6.IPv6Address;
43
44 public class IPv6AddressAdapter
45 extends AbstractDataTypeAdapter<IPv6Address, IIPv6AddressItem> {
46 @NonNull
47 private static final List<String> NAMES = ObjectUtils.notNull(
48 List.of("ip-v6-address"));
49 private static final IPAddressStringParameters IP_V_6;
50
51 static {
52 IP_V_6 = new IPAddressStringParameters.Builder().allowIPv4(false).allowEmpty(false).allowSingleSegment(false)
53 .allowWildcardedSeparator(false).getIPv6AddressParametersBuilder().allowBinary(false)
54 .allowPrefixesBeyondAddressSize(false).getParentBuilder().toParams();
55 }
56
57 IPv6AddressAdapter() {
58 super(IPv6Address.class);
59 }
60
61 @Override
62 public List<String> getNames() {
63 return NAMES;
64 }
65
66 @Override
67 public JsonFormatTypes getJsonRawType() {
68 return JsonFormatTypes.STRING;
69 }
70
71 @SuppressWarnings("null")
72 @Override
73 public IPv6Address parse(String value) {
74 try {
75 return (IPv6Address) new IPAddressString(value, IP_V_6).toAddress();
76 } catch (AddressStringException | IncompatibleAddressException ex) {
77 throw new IllegalArgumentException(ex.getLocalizedMessage(), ex);
78 }
79 }
80
81 @Override
82 public IPv6Address copy(Object obj) {
83
84 return (IPv6Address) obj;
85 }
86
87 @Override
88 public Class<IIPv6AddressItem> getItemClass() {
89 return IIPv6AddressItem.class;
90 }
91
92 @Override
93 public IIPv6AddressItem newItem(Object value) {
94 IPv6Address item = toValue(value);
95 return IIPv6AddressItem.valueOf(item);
96 }
97 }