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.markup;
28
29 import com.fasterxml.jackson.core.JsonGenerator;
30 import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatTypes;
31
32 import gov.nist.secauto.metaschema.core.datatype.AbstractCustomJavaDataTypeAdapter;
33 import gov.nist.secauto.metaschema.core.metapath.item.atomic.IMarkupItem;
34 import gov.nist.secauto.metaschema.core.util.ObjectUtils;
35
36 import org.codehaus.stax2.XMLStreamWriter2;
37 import org.codehaus.stax2.evt.XMLEventFactory2;
38
39 import java.io.IOException;
40
41 import javax.xml.namespace.QName;
42 import javax.xml.stream.XMLEventWriter;
43 import javax.xml.stream.XMLStreamException;
44 import javax.xml.stream.events.StartElement;
45
46 import edu.umd.cs.findbugs.annotations.NonNull;
47
48 public abstract class AbstractMarkupAdapter<TYPE extends IMarkupString<TYPE>>
49 extends AbstractCustomJavaDataTypeAdapter<TYPE, IMarkupItem> {
50
51
52
53
54
55
56
57 protected AbstractMarkupAdapter(@NonNull Class<TYPE> clazz) {
58 super(clazz);
59 }
60
61 @Override
62 public JsonFormatTypes getJsonRawType() {
63 return JsonFormatTypes.STRING;
64 }
65
66 @Override
67 public boolean isXmlMixed() {
68 return true;
69 }
70
71
72 @Override
73 public void writeXmlValue(
74 Object value,
75 StartElement parent,
76 XMLEventFactory2 eventFactory,
77 XMLEventWriter eventWriter)
78 throws XMLStreamException {
79
80 IMarkupString<?> markupString = (IMarkupString<?>) value;
81
82 markupString.writeXHtml(
83 ObjectUtils.notNull(parent.getName().getNamespaceURI()),
84 eventFactory,
85 eventWriter);
86 }
87
88 @Override
89 public void writeXmlValue(Object value, QName parentName, XMLStreamWriter2 streamWriter)
90 throws XMLStreamException {
91 IMarkupString<?> markupString = (IMarkupString<?>) value;
92
93 markupString.writeXHtml(
94 ObjectUtils.notNull(parentName.getNamespaceURI()),
95 streamWriter);
96 }
97
98 @Override
99 public void writeJsonValue(Object value, JsonGenerator generator) throws IOException {
100
101 IMarkupString<?> markupString;
102 try {
103 markupString = (IMarkupString<?>) value;
104 } catch (ClassCastException ex) {
105 throw new IOException(ex);
106 }
107
108 generator.writeString(markupString.toMarkdown().trim());
109 }
110 }