1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.geronimo.javamail.store.imap.connection;
19 import java.util.ArrayList;
20 import java.util.List;
21
22 import javax.mail.MessagingException;
23
24
25
26
27
28
29
30 public class IMAPFetchResponse extends IMAPUntaggedResponse {
31
32 protected List dataItems = new ArrayList();
33
34 public int sequenceNumber;
35
36 public IMAPFetchResponse(int sequenceNumber, byte[] data, IMAPResponseTokenizer source) throws MessagingException {
37 super("FETCH", data);
38
39 this.sequenceNumber = sequenceNumber;
40
41
42 source.checkLeftParen();
43
44
45 while (source.notListEnd()) {
46
47
48 String itemName = source.readAtom(true).toUpperCase();
49
50 if (itemName.equals("ENVELOPE")) {
51 dataItems.add(new IMAPEnvelope(source));
52 }
53 else if (itemName.equals("BODYSTRUCTURE")) {
54 dataItems.add(new IMAPBodyStructure(source));
55 }
56 else if (itemName.equals("FLAGS")) {
57 dataItems.add(new IMAPFlags(source));
58 }
59 else if (itemName.equals("INTERNALDATE")) {
60 dataItems.add(new IMAPInternalDate(source));
61 }
62 else if (itemName.equals("UID")) {
63 dataItems.add(new IMAPUid(sequenceNumber, source));
64 }
65 else if (itemName.equals("RFC822")) {
66
67
68
69
70
71 itemName = source.readAtom(false).toUpperCase();
72 if (itemName.equals(".SIZE")) {
73 dataItems.add(new IMAPMessageSize(source));
74 }
75 else if (itemName.equals(".HEADER")) {
76 dataItems.add(new IMAPInternetHeader(source.readByteArray()));
77 }
78 else if (itemName.equals(".TEXT")) {
79 dataItems.add(new IMAPMessageText(source.readByteArray()));
80 }
81 }
82
83
84
85 else if (itemName.equals("BODY")) {
86
87
88 IMAPBodySection section = new IMAPBodySection(source);
89
90 switch (section.section) {
91 case IMAPBodySection.BODY:
92
93 dataItems.add(new IMAPBody(section, source.readByteArray()));
94 break;
95
96 case IMAPBodySection.HEADERS:
97 case IMAPBodySection.HEADERSUBSET:
98 case IMAPBodySection.MIME:
99
100 dataItems.add(new IMAPInternetHeader(section, source.readByteArray()));
101 break;
102
103 case IMAPBodySection.TEXT:
104
105
106 dataItems.add(new IMAPMessageText(section, source.readByteArray()));
107 break;
108 }
109 }
110 }
111
112 source.checkRightParen();
113 }
114
115
116
117
118
119
120 public int getSequenceNumber() {
121 return sequenceNumber;
122 }
123
124
125
126
127
128
129 public int getCount() {
130 return dataItems.size();
131 }
132
133
134
135
136
137
138 public List getDataItems() {
139 return dataItems;
140 }
141
142
143
144
145
146
147
148
149
150 public IMAPFetchDataItem getDataItem(int type) {
151 for (int i = 0; i < dataItems.size(); i ++) {
152 IMAPFetchDataItem item = (IMAPFetchDataItem)dataItems.get(i);
153 if (item.isType(type)) {
154 return item;
155 }
156 }
157 return null;
158 }
159
160 }
161