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.schemagen.datatype;
28
29 import gov.nist.secauto.metaschema.core.datatype.IDataTypeAdapter;
30
31 import java.util.Collections;
32 import java.util.HashMap;
33 import java.util.HashSet;
34 import java.util.LinkedHashMap;
35 import java.util.Map;
36 import java.util.Set;
37
38 import edu.umd.cs.findbugs.annotations.NonNull;
39
40 public abstract class AbstractDatatypeManager implements IDatatypeManager {
41 @NonNull
42 private static final Map<String, String> DATATYPE_TRANSLATION_MAP
43 = new LinkedHashMap<>();
44
45 static {
46 DATATYPE_TRANSLATION_MAP.put("base64", "Base64Datatype");
47 DATATYPE_TRANSLATION_MAP.put("boolean", "BooleanDatatype");
48 DATATYPE_TRANSLATION_MAP.put("date", "DateDatatype");
49 DATATYPE_TRANSLATION_MAP.put("date-with-timezone", "DateWithTimezoneDatatype");
50 DATATYPE_TRANSLATION_MAP.put("date-time", "DateTimeDatatype");
51 DATATYPE_TRANSLATION_MAP.put("date-time-with-timezone", "DateTimeWithTimezoneDatatype");
52 DATATYPE_TRANSLATION_MAP.put("day-time-duration", "DayTimeDurationDatatype");
53 DATATYPE_TRANSLATION_MAP.put("decimal", "DecimalDatatype");
54 DATATYPE_TRANSLATION_MAP.put("email-address", "EmailAddressDatatype");
55 DATATYPE_TRANSLATION_MAP.put("hostname", "HostnameDatatype");
56 DATATYPE_TRANSLATION_MAP.put("integer", "IntegerDatatype");
57 DATATYPE_TRANSLATION_MAP.put("ip-v4-address", "IPV4AddressDatatype");
58 DATATYPE_TRANSLATION_MAP.put("ip-v6-address", "IPV6AddressDatatype");
59 DATATYPE_TRANSLATION_MAP.put("markup-line", "MarkupLineDatatype");
60 DATATYPE_TRANSLATION_MAP.put("markup-multiline", "MarkupMultilineDatatype");
61 DATATYPE_TRANSLATION_MAP.put("non-negative-integer", "NonNegativeIntegerDatatype");
62 DATATYPE_TRANSLATION_MAP.put("positive-integer", "PositiveIntegerDatatype");
63 DATATYPE_TRANSLATION_MAP.put("string", "StringDatatype");
64 DATATYPE_TRANSLATION_MAP.put("token", "TokenDatatype");
65 DATATYPE_TRANSLATION_MAP.put("uri", "URIDatatype");
66 DATATYPE_TRANSLATION_MAP.put("uri-reference", "URIReferenceDatatype");
67 DATATYPE_TRANSLATION_MAP.put("uuid", "UUIDDatatype");
68 DATATYPE_TRANSLATION_MAP.put("year-month-duration", "YearMonthDurationDatatype");
69 }
70
71 @NonNull
72 private final Map<IDataTypeAdapter<?>, String> datatypeToTypeMap = new HashMap<>();
73
74 @SuppressWarnings("null")
75 @NonNull
76 protected static Map<String, String> getDatatypeTranslationMap() {
77 return Collections.unmodifiableMap(DATATYPE_TRANSLATION_MAP);
78 }
79
80 @Override
81 public Set<String> getUsedTypes() {
82 return new HashSet<>(datatypeToTypeMap.values());
83 }
84
85 @SuppressWarnings("null")
86 @Override
87 @NonNull
88 public String getTypeNameForDatatype(@NonNull IDataTypeAdapter<?> datatype) {
89 synchronized (this) {
90 String name = datatypeToTypeMap.get(datatype);
91 if (name == null) {
92 name = getDatatypeTranslationMap().get(datatype.getPreferredName());
93 datatypeToTypeMap.put(datatype, name);
94 }
95 return name;
96 }
97 }
98 }