• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright (C) 2011 The Android Open Source Project.
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *      http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 package com.android.exchange.adapter;
17 
18 import java.io.IOException;
19 import java.io.InputStream;
20 import java.io.OutputStream;
21 
22 /**
23  * Parse the result of an ItemOperations command; we use this to load attachments in EAS 14.0
24  */
25 public class ItemOperationsParser extends Parser {
26     private final AttachmentLoader mAttachmentLoader;
27     private int mStatusCode = 0;
28     private final OutputStream mAttachmentOutputStream;
29     private final int mAttachmentSize;
30 
ItemOperationsParser(AttachmentLoader loader, InputStream in, OutputStream out, int size)31     public ItemOperationsParser(AttachmentLoader loader, InputStream in, OutputStream out, int size)
32             throws IOException {
33         super(in);
34         mAttachmentLoader = loader;
35         mAttachmentOutputStream = out;
36         mAttachmentSize = size;
37     }
38 
getStatusCode()39     public int getStatusCode() {
40         return mStatusCode;
41     }
42 
parseProperties()43     private void parseProperties() throws IOException {
44         while (nextTag(Tags.ITEMS_PROPERTIES) != END) {
45             if (tag == Tags.ITEMS_DATA) {
46                 // Wrap the input stream in our custom base64 input stream
47                 Base64InputStream bis = new Base64InputStream(getInput());
48                 // Read the attachment
49                 mAttachmentLoader.readChunked(bis, mAttachmentOutputStream, mAttachmentSize);
50             } else {
51                 skipTag();
52             }
53         }
54     }
55 
parseFetch()56     private void parseFetch() throws IOException {
57         while (nextTag(Tags.ITEMS_FETCH) != END) {
58             if (tag == Tags.ITEMS_PROPERTIES) {
59                 parseProperties();
60             } else {
61                 skipTag();
62             }
63         }
64     }
65 
parseResponse()66     private void parseResponse() throws IOException {
67         while (nextTag(Tags.ITEMS_RESPONSE) != END) {
68             if (tag == Tags.ITEMS_FETCH) {
69                 parseFetch();
70             } else {
71                 skipTag();
72             }
73         }
74     }
75 
76     @Override
parse()77     public boolean parse() throws IOException {
78         boolean res = false;
79         if (nextTag(START_DOCUMENT) != Tags.ITEMS_ITEMS) {
80             throw new IOException();
81         }
82         while (nextTag(START_DOCUMENT) != END_DOCUMENT) {
83             if (tag == Tags.ITEMS_STATUS) {
84                 // Save the status code
85                 mStatusCode = getValueInt();
86             } else if (tag == Tags.ITEMS_RESPONSE) {
87                 parseResponse();
88             } else {
89                 skipTag();
90             }
91         }
92         return res;
93     }
94 }
95