View Javadoc

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   * Created by IntelliJ IDEA.
16   * User: Pranitha
17   * Date: 3/7/12
18   * Time: 12:29 PM
19   * To change this template use File | Settings | File Templates.
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                 hierarchicalStreamReader.moveDown();
185                 if (hierarchicalStreamReader.getNodeName().equals("uuid")) {
186                     String value = hierarchicalStreamReader.getValue();
187                     responseDocument.setUuid(value);
188                 }
189 
190                 if (hierarchicalStreamReader.getNodeName().equals("content")) {
191                     String value = hierarchicalStreamReader.getValue();
192                     Content content = new Content(value);
193                     responseDocument.setContent(content);
194                 }
195 
196                  hierarchicalStreamReader.moveUp();
197                 if(hierarchicalStreamReader.getNodeName().equals("documentName"))
198                 {
199                    responseDocument.setDocumentName( hierarchicalStreamReader.getValue());
200                 }
201                  if(hierarchicalStreamReader.getNodeName().equals("documentTitle"))
202                 {
203                    responseDocument.setDocumentTitle( hierarchicalStreamReader.getValue());
204                 }
205                  if(hierarchicalStreamReader.getNodeName().equals("documentMimeType"))
206                 {
207                    responseDocument.setDocumentMimeType( hierarchicalStreamReader.getValue());
208                 }
209                 hierarchicalStreamReader.moveDown();
210 
211                 hierarchicalStreamReader.moveUp();
212                 if (hierarchicalStreamReader.hasMoreChildren()) {
213                     hierarchicalStreamReader.moveDown();
214                     if (hierarchicalStreamReader.getNodeName().equals("linkedDocuments")) {
215                         while (hierarchicalStreamReader.hasMoreChildren()) {
216                             hierarchicalStreamReader.moveDown();
217                             responseDocument.addLinkedDocument(
218                                     (ResponseDocument) unmarshal(hierarchicalStreamReader, unmarshallingContext));
219                             hierarchicalStreamReader.moveUp();
220                         }
221                     }
222                     hierarchicalStreamReader.moveUp();
223                 }
224         */
225         return responseDocument;
226     }
227 
228     @Override
229     public boolean canConvert(Class aClass) {
230         return aClass.equals(ResponseDocument.class);
231     }
232 }