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.databind.model.info;
28
29 import gov.nist.secauto.metaschema.core.datatype.IDataTypeAdapter;
30 import gov.nist.secauto.metaschema.core.util.ObjectUtils;
31 import gov.nist.secauto.metaschema.databind.io.BindingException;
32 import gov.nist.secauto.metaschema.databind.io.json.IJsonParsingContext;
33 import gov.nist.secauto.metaschema.databind.io.json.IJsonWritingContext;
34 import gov.nist.secauto.metaschema.databind.io.xml.IXmlParsingContext;
35 import gov.nist.secauto.metaschema.databind.io.xml.IXmlWritingContext;
36 import gov.nist.secauto.metaschema.databind.model.IBoundFieldInstance;
37 import gov.nist.secauto.metaschema.databind.model.IClassBinding;
38
39 import java.io.IOException;
40
41 import javax.xml.namespace.QName;
42 import javax.xml.stream.XMLStreamException;
43 import javax.xml.stream.events.StartElement;
44
45 import edu.umd.cs.findbugs.annotations.NonNull;
46
47
48 class JavaTypeAdapterDataTypeHandler implements IDataTypeHandler {
49 @NonNull
50 private final IBoundFieldInstance property;
51
52 public JavaTypeAdapterDataTypeHandler(IBoundFieldInstance property) {
53 this.property = ObjectUtils.requireNonNull(property, "property");
54 }
55
56 @Override
57 public IDataTypeAdapter<?> getJavaTypeAdapter() {
58 return property.getDefinition().getJavaTypeAdapter();
59 }
60
61 @Override
62 public IClassBinding getClassBinding() {
63
64 return null;
65 }
66
67 @Override
68 public boolean isUnwrappedValueAllowedInXml() {
69 return getJavaTypeAdapter().isUnrappedValueAllowedInXml();
70 }
71
72 @Override
73 public boolean isJsonKeyRequired() {
74 return false;
75 }
76
77 @SuppressWarnings({
78 "resource",
79 "unchecked" })
80 @Override
81 public <T> T readItem(Object parentInstance, IJsonParsingContext context)
82 throws IOException {
83 return (T) getJavaTypeAdapter().parse(context.getReader());
84 }
85
86 @Override
87 public Object readItem(Object parentInstance, StartElement start, IXmlParsingContext context)
88 throws IOException, XMLStreamException {
89 return getJavaTypeAdapter().parse(context.getReader());
90 }
91
92 @Override
93 public void writeItem(Object item, QName currentParentName, IXmlWritingContext context)
94 throws IOException, XMLStreamException {
95 getJavaTypeAdapter().writeXmlValue(item, currentParentName, context.getWriter());
96 }
97
98 @SuppressWarnings("resource")
99 @Override
100 public void writeItem(Object targetObject, IJsonWritingContext context) throws IOException {
101 getJavaTypeAdapter().writeJsonValue(ObjectUtils.requireNonNull(targetObject), context.getWriter());
102 }
103
104 @Override
105 public Object copyItem(@NonNull Object fromItem, Object parentInstance) throws BindingException {
106 return getJavaTypeAdapter().copy(fromItem);
107 }
108 }