1 package org.kuali.ole.docstore.model.xstream.ingest;
2
3 import com.thoughtworks.xstream.converters.Converter;
4 import com.thoughtworks.xstream.converters.MarshallingContext;
5 import com.thoughtworks.xstream.converters.UnmarshallingContext;
6 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
7 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
8 import org.kuali.ole.docstore.model.xmlpojo.ingest.Content;
9 import org.kuali.ole.docstore.model.xmlpojo.ingest.ResponseDocument;
10
11 import java.util.Iterator;
12 import java.util.List;
13
14
15
16
17
18
19
20
21 public class ResponseDocumentConverter
22 implements Converter {
23
24 @Override
25 public void marshal(Object o, HierarchicalStreamWriter hierarchicalStreamWriter,
26 MarshallingContext marshallingContext) {
27 ResponseDocument responseDocument = (ResponseDocument) o;
28 if (responseDocument.getId() != null) {
29 hierarchicalStreamWriter.addAttribute("id", responseDocument.getId());
30 }
31 if (responseDocument.getCategory() != null) {
32 hierarchicalStreamWriter.addAttribute("category", responseDocument.getCategory());
33 }
34 if (responseDocument.getType() != null) {
35 hierarchicalStreamWriter.addAttribute("type", responseDocument.getType());
36 }
37 if (responseDocument.getFormat() != null) {
38 hierarchicalStreamWriter.addAttribute("format", responseDocument.getFormat());
39 }
40 if(responseDocument.getStatus() != null){
41 hierarchicalStreamWriter.startNode("status");
42 hierarchicalStreamWriter.setValue(responseDocument.getStatus());
43 hierarchicalStreamWriter.endNode();
44 }
45 if(responseDocument.getStatus() != null){
46 hierarchicalStreamWriter.startNode("statusMessage");
47 hierarchicalStreamWriter.setValue(responseDocument.getStatusMessage());
48 hierarchicalStreamWriter.endNode();
49 }
50
51 if (responseDocument.getUuid() != null) {
52 hierarchicalStreamWriter.startNode("uuid");
53 hierarchicalStreamWriter.setValue(responseDocument.getUuid());
54 hierarchicalStreamWriter.endNode();
55 }
56 if (responseDocument.getContent()!= null) {
57 hierarchicalStreamWriter.startNode("content");
58 hierarchicalStreamWriter.setValue(responseDocument.getContent().getContent());
59 hierarchicalStreamWriter.endNode();
60 }
61
62 if(responseDocument.getDocumentName() != null)
63 {
64 hierarchicalStreamWriter.startNode("documentName");
65 hierarchicalStreamWriter.setValue(responseDocument.getDocumentName());
66 hierarchicalStreamWriter.endNode();
67 }
68 if(responseDocument.getDocumentTitle() != null)
69 {
70 hierarchicalStreamWriter.startNode("documentTitle");
71 hierarchicalStreamWriter.setValue(responseDocument.getDocumentTitle());
72 hierarchicalStreamWriter.endNode();
73 }
74 if(responseDocument.getDocumentMimeType() != null)
75 {
76 hierarchicalStreamWriter.startNode("documentMimeType");
77 hierarchicalStreamWriter.setValue(responseDocument.getDocumentMimeType());
78 hierarchicalStreamWriter.endNode();
79 }
80 if (responseDocument.getVersion() != null) {
81 hierarchicalStreamWriter.startNode("version");
82 hierarchicalStreamWriter.setValue(responseDocument.getVersion());
83 hierarchicalStreamWriter.endNode();
84 }
85
86 List<ResponseDocument> linkedResponseDocuments = responseDocument.getLinkedDocuments();
87 if (linkedResponseDocuments != null && linkedResponseDocuments.size() > 0) {
88 hierarchicalStreamWriter.startNode("linkedDocuments");
89 for (Iterator<ResponseDocument> iterator = linkedResponseDocuments.iterator(); iterator.hasNext(); ) {
90 hierarchicalStreamWriter.startNode("linkedDocument");
91 ResponseDocument respDoc = iterator.next();
92 marshal(respDoc, hierarchicalStreamWriter, marshallingContext);
93 List<ResponseDocument> instanceResposeDocuments = responseDocument.getLinkedInstanceDocuments();
94 if (instanceResposeDocuments != null && instanceResposeDocuments.size() > 0) {
95 hierarchicalStreamWriter.startNode("linkedDocuments");
96 for (Iterator<ResponseDocument> instanceIterator = instanceResposeDocuments
97 .iterator(); instanceIterator.hasNext(); ) {
98 hierarchicalStreamWriter.startNode("linkedDocument");
99 ResponseDocument instanceDoc = instanceIterator.next();
100 marshalInstance(instanceDoc, hierarchicalStreamWriter, marshallingContext);
101 hierarchicalStreamWriter.endNode();
102 }
103 hierarchicalStreamWriter.endNode();
104 }
105 hierarchicalStreamWriter.endNode();
106 }
107 hierarchicalStreamWriter.endNode();
108 }
109 }
110
111 private void marshalInstance(ResponseDocument instanceDoc, HierarchicalStreamWriter hierarchicalStreamWriter,
112 MarshallingContext marshallingContext) {
113 ResponseDocument responseDocument = (ResponseDocument) instanceDoc;
114 hierarchicalStreamWriter.addAttribute("id", responseDocument.getId());
115 hierarchicalStreamWriter.addAttribute("category", responseDocument.getCategory());
116 hierarchicalStreamWriter.addAttribute("type", responseDocument.getType());
117 hierarchicalStreamWriter.addAttribute("format", responseDocument.getFormat());
118 hierarchicalStreamWriter.startNode("content");
119 hierarchicalStreamWriter.setValue(responseDocument.getContent().getContent());
120 hierarchicalStreamWriter.endNode();
121 hierarchicalStreamWriter.startNode("uuid");
122 hierarchicalStreamWriter.setValue(responseDocument.getUuid());
123 hierarchicalStreamWriter.endNode();
124 }
125
126 @Override
127 public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader,
128 UnmarshallingContext unmarshallingContext) {
129
130 ResponseDocument responseDocument = new ResponseDocument();
131 responseDocument.setId(hierarchicalStreamReader.getAttribute("id"));
132 responseDocument.setCategory(hierarchicalStreamReader.getAttribute("category"));
133 responseDocument.setType(hierarchicalStreamReader.getAttribute("type"));
134 responseDocument.setFormat(hierarchicalStreamReader.getAttribute("format"));
135
136
137 while (hierarchicalStreamReader.hasMoreChildren()) {
138 hierarchicalStreamReader.moveDown();
139 if(hierarchicalStreamReader.getNodeName().equals("status")){
140 responseDocument.setStatus(hierarchicalStreamReader.getValue());
141 }
142 else if(hierarchicalStreamReader.getNodeName().equals("statusMessage")){
143 responseDocument.setStatusMessage(hierarchicalStreamReader.getValue());
144 }
145
146 else if (hierarchicalStreamReader.getNodeName().equals("uuid")) {
147 responseDocument.setUuid(hierarchicalStreamReader.getValue());
148 }
149
150 else if (hierarchicalStreamReader.getNodeName().equals("content")) {
151 String value = hierarchicalStreamReader.getValue();
152 Content content = new Content(value);
153 responseDocument.setContent(content);
154 }
155
156 else if (hierarchicalStreamReader.getNodeName().equals("documentName")) {
157 responseDocument.setDocumentName(hierarchicalStreamReader.getValue());
158 }
159 else if (hierarchicalStreamReader.getNodeName().equals("documentTitle")) {
160 responseDocument.setDocumentTitle(hierarchicalStreamReader.getValue());
161 }
162
163 else if (hierarchicalStreamReader.getNodeName().equals("documentMimeType")) {
164 responseDocument.setDocumentMimeType(hierarchicalStreamReader.getValue());
165 }
166
167 else if (hierarchicalStreamReader.getNodeName().equals("version")) {
168 responseDocument.setVersion(hierarchicalStreamReader.getValue());
169 }
170
171 else if (hierarchicalStreamReader.getNodeName().equals("linkedDocuments")) {
172 while (hierarchicalStreamReader.hasMoreChildren()) {
173 hierarchicalStreamReader.moveDown();
174 responseDocument.addLinkedDocument(
175 (ResponseDocument) unmarshal(hierarchicalStreamReader, unmarshallingContext));
176 hierarchicalStreamReader.moveUp();
177 }
178 }
179 hierarchicalStreamReader.moveUp();
180 }
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225 return responseDocument;
226 }
227
228 @Override
229 public boolean canConvert(Class aClass) {
230 return aClass.equals(ResponseDocument.class);
231 }
232 }