1 /*****************************************************************
2 * Licensed to the Apache Software Foundation (ASF) under one *
3 * or more contributor license agreements. See the NOTICE file *
4 * distributed with this work for additional information *
5 * regarding copyright ownership. The ASF licenses this file *
6 * to you under the Apache License, Version 2.0 (the *
7 * "License"); you may not use this file except in compliance *
8 * with the License. You may obtain a copy of the License at *
9 * *
10 * http://www.apache.org/licenses/LICENSE-2.0 *
11 * *
12 * Unless required by applicable law or agreed to in writing, *
13 * software distributed under the License is distributed on an *
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
15 * KIND, either express or implied. See the License for the *
16 * specific language governing permissions and limitations *
17 * under the License. *
18 ****************************************************************/
19
20
21 package org.apache.james.postage.result;
22
23 import org.apache.james.postage.PostageRunner;
24
25 /***
26 * contains all gathered data concerning one mail message
27 */
28 public class MailProcessingRecord {
29
30 private static String SEPARATOR = ",";
31 private static int m_messageId = 1;
32
33 boolean matchedSentAndReceived = false;
34 boolean isReceivedValid = false;
35
36 long timeConnectStart;
37 String mailId;
38 String subject;
39 String sender;
40 String senderMailAddress;
41 String receiver;
42 String receiverMailAddress;
43 long timeSendEnd;
44 long timeSendStart;
45 long byteSendText;
46 long byteSendBinary;
47 int errorNumberSending;
48 String errorTextSending;
49
50 long timeReceived;
51 long timeServerReceived;
52 long timeFetchStart;
53 long timeFetchEnd;
54 long byteReceivedText;
55 long byteReceivedBinary;
56 long byteReceivedTotal;
57 String receivingQueue;
58
59 public synchronized static String getNextId() {
60 return PostageRunner.getMessageIdPrefix() + (m_messageId++);
61 }
62
63 public boolean isMatchedSentAndReceived() {
64 return matchedSentAndReceived;
65 }
66
67 public void setValid() {
68 isReceivedValid = true;
69 }
70
71 public boolean isReceivedValid() {
72 return isReceivedValid;
73 }
74
75 public long getTimeConnectStart() {
76 return timeConnectStart;
77 }
78
79 public void setTimeConnectStart(long timeConnectStart) {
80 this.timeConnectStart = timeConnectStart;
81 }
82
83 public String getMailId() {
84 return mailId;
85 }
86
87 public void setMailId(String mailId) {
88 this.mailId = mailId;
89 }
90
91 public String getSubject() {
92 return subject;
93 }
94
95 public void setSubject(String subject) {
96 this.subject = subject;
97 }
98
99 public String getSender() {
100 return sender;
101 }
102
103 public void setSender(String sender) {
104 this.sender = sender;
105 }
106
107 public String getSenderMailAddress() {
108 return senderMailAddress;
109 }
110
111 public void setSenderMailAddress(String senderMailAddress) {
112 this.senderMailAddress = senderMailAddress;
113 }
114
115 public String getReceiver() {
116 return receiver;
117 }
118
119 public void setReceiver(String receiver) {
120 this.receiver = receiver;
121 }
122
123 public String getReceiverMailAddress() {
124 return receiverMailAddress;
125 }
126
127 public void setReceiverMailAddress(String receiverMailAddress) {
128 this.receiverMailAddress = receiverMailAddress;
129 }
130
131 public long getTimeSendStart() {
132 return timeSendStart;
133 }
134
135 public void setTimeSendStart(long timeSendStart) {
136 this.timeSendStart = timeSendStart;
137 }
138
139 public long getTimeSendEnd() {
140 return timeSendEnd;
141 }
142
143 public void setTimeSendEnd(long timeSendEnd) {
144 this.timeSendEnd = timeSendEnd;
145 }
146
147 public long getByteSendText() {
148 return byteSendText;
149 }
150
151 public void setByteSendText(long byteSendText) {
152 this.byteSendText = byteSendText;
153 }
154
155 public long getByteSendBinary() {
156 return byteSendBinary;
157 }
158
159 public void setByteSendBinary(long byteSendBinary) {
160 this.byteSendBinary = byteSendBinary;
161 }
162
163 public long getByteReceivedText() {
164 return byteReceivedText;
165 }
166
167 public void setByteReceivedText(long byteReceivedText) {
168 this.byteReceivedText = byteReceivedText;
169 }
170
171 public long getByteReceivedBinary() {
172 return byteReceivedBinary;
173 }
174
175 public void setByteReceivedBinary(long byteReceivedBinary) {
176 this.byteReceivedBinary = byteReceivedBinary;
177 }
178
179 public long getByteReceivedTotal() {
180 return byteReceivedTotal;
181 }
182
183 public void setByteReceivedTotal(long byteReceivedTotal) {
184 this.byteReceivedTotal = byteReceivedTotal;
185 }
186
187 public int getErrorNumberSending() {
188 return errorNumberSending;
189 }
190
191 public void setErrorNumberSending(int errorNumberSending) {
192 this.errorNumberSending = errorNumberSending;
193 }
194
195 public String getErrorTextSending() {
196 return errorTextSending;
197 }
198
199 public void setErrorTextSending(String errorTextSending) {
200 this.errorTextSending = errorTextSending;
201 }
202
203 public long getTimeReceived() {
204 return timeReceived;
205 }
206
207 public void setTimeReceived(long timeReceived) {
208 this.timeReceived = timeReceived;
209 }
210
211 public long getTimeFetchStart() {
212 return timeFetchStart;
213 }
214
215 public void setTimeFetchStart(long timeFetchStart) {
216 this.timeFetchStart = timeFetchStart;
217 }
218
219 public long getTimeFetchEnd() {
220 return timeFetchEnd;
221 }
222
223 public void setTimeFetchEnd(long timeFetchEnd) {
224 this.timeFetchEnd = timeFetchEnd;
225 }
226
227 public long getTimeServerReceived() {
228 return timeServerReceived;
229 }
230
231 public void setTimeServerReceived(long timeServerReceived) {
232 this.timeServerReceived = timeServerReceived;
233 }
234
235 public String getReceivingQueue() {
236 return receivingQueue;
237 }
238
239 public void setReceivingQueue(String receivingQueue) {
240 this.receivingQueue = receivingQueue;
241 }
242
243 public void merge(MailProcessingRecord anotherRecord) {
244 if (matchedSentAndReceived) throw new IllegalStateException("already merged");
245 matchedSentAndReceived = true;
246
247 if (timeConnectStart == 0) timeConnectStart = anotherRecord.timeConnectStart;
248 if (mailId == null) mailId = anotherRecord.mailId;
249 if (subject == null) subject = anotherRecord.subject;
250 if (sender == null) sender = anotherRecord.sender;
251 if (senderMailAddress == null) senderMailAddress = anotherRecord.senderMailAddress;
252 if (receiver == null) receiver = anotherRecord.receiver;
253 if (receiverMailAddress == null) receiverMailAddress = anotherRecord.receiverMailAddress;
254 if (timeSendStart == 0) timeSendStart = anotherRecord.timeSendStart;
255 if (timeSendEnd == 0) timeSendEnd = anotherRecord.timeSendEnd;
256 if (byteSendText == 0) byteSendText = anotherRecord.byteSendText;
257 if (byteSendBinary == 0) byteSendBinary = anotherRecord.byteSendBinary;
258 if (byteReceivedText == 0) byteReceivedText = anotherRecord.byteReceivedText;
259 if (byteReceivedBinary == 0) byteReceivedBinary = anotherRecord.byteReceivedBinary;
260 if (byteReceivedTotal == 0) byteReceivedTotal = anotherRecord.byteReceivedTotal;
261 if (errorNumberSending == 0) errorNumberSending = anotherRecord.errorNumberSending;
262 if (errorTextSending == null) errorTextSending = anotherRecord.errorTextSending;
263 if (timeReceived == 0) timeReceived = anotherRecord.timeReceived;
264 if (timeFetchStart == 0) timeFetchStart = anotherRecord.timeFetchStart;
265 if (timeFetchEnd == 0) timeFetchEnd = anotherRecord.timeFetchEnd;
266 if (timeServerReceived == 0) timeServerReceived = anotherRecord.timeServerReceived;
267 if (receivingQueue == null) receivingQueue = anotherRecord.receivingQueue;
268 if (anotherRecord.isReceivedValid) isReceivedValid = anotherRecord.isReceivedValid;
269 }
270
271 public static StringBuffer writeHeader() {
272 StringBuffer stringBuffer = new StringBuffer();
273 stringBuffer.append("timeConnectStart").append(SEPARATOR);
274 stringBuffer.append("mailId").append(SEPARATOR);
275 stringBuffer.append("ReceivedMatchedSent").append(SEPARATOR);
276 stringBuffer.append("subject").append(SEPARATOR);
277 stringBuffer.append("sender").append(SEPARATOR);
278 stringBuffer.append("senderMailAddress").append(SEPARATOR);
279 stringBuffer.append("receiver").append(SEPARATOR);
280 stringBuffer.append("receiverMailAddress").append(SEPARATOR);
281 stringBuffer.append("timeSendStart").append(SEPARATOR);
282 stringBuffer.append("timeSendEnd").append(SEPARATOR);
283 stringBuffer.append("byteSendText").append(SEPARATOR);
284 stringBuffer.append("byteSendBinary").append(SEPARATOR);
285 stringBuffer.append("byteReceivedText").append(SEPARATOR);
286 stringBuffer.append("byteReceivedBinary").append(SEPARATOR);
287 stringBuffer.append("byteReceivedTotal").append(SEPARATOR);
288 stringBuffer.append("errorNumberSending").append(SEPARATOR);
289 stringBuffer.append("errorTextSending").append(SEPARATOR);
290 stringBuffer.append("timeReceived").append(SEPARATOR);
291 stringBuffer.append("timeFetchStart").append(SEPARATOR);
292 stringBuffer.append("timeFetchEnd").append(SEPARATOR);
293 stringBuffer.append("timeServerReceived").append(SEPARATOR);
294 stringBuffer.append("receivingQueue").append(SEPARATOR);
295 stringBuffer.append("valid").append(SEPARATOR);
296 stringBuffer.append("\r\n");
297
298 return stringBuffer;
299 }
300
301 public StringBuffer writeData() {
302 StringBuffer stringBuffer = new StringBuffer();
303 stringBuffer.append(timeConnectStart).append(SEPARATOR);
304 stringBuffer.append(mailId).append(SEPARATOR);
305 stringBuffer.append(isMatchedSentAndReceived() ? "MATCHED" : "UNMATCHED").append(SEPARATOR);
306 stringBuffer.append(subject).append(SEPARATOR);
307 stringBuffer.append(sender).append(SEPARATOR);
308 stringBuffer.append(senderMailAddress).append(SEPARATOR);
309 stringBuffer.append(receiver).append(SEPARATOR);
310 stringBuffer.append(receiverMailAddress).append(SEPARATOR);
311 stringBuffer.append(timeSendStart).append(SEPARATOR);
312 stringBuffer.append(timeSendEnd).append(SEPARATOR);
313 stringBuffer.append(byteSendText).append(SEPARATOR);
314 stringBuffer.append(byteSendBinary).append(SEPARATOR);
315 stringBuffer.append(byteReceivedText).append(SEPARATOR);
316 stringBuffer.append(byteReceivedBinary).append(SEPARATOR);
317 stringBuffer.append(byteReceivedTotal).append(SEPARATOR);
318 stringBuffer.append(errorNumberSending).append(SEPARATOR);
319 stringBuffer.append(errorTextSending).append(SEPARATOR);
320 stringBuffer.append(timeReceived).append(SEPARATOR);
321 stringBuffer.append(timeFetchStart).append(SEPARATOR);
322 stringBuffer.append(timeFetchEnd).append(SEPARATOR);
323 stringBuffer.append(timeServerReceived).append(SEPARATOR);
324 stringBuffer.append(receivingQueue).append(SEPARATOR);
325 stringBuffer.append(isReceivedValid).append(SEPARATOR);
326 stringBuffer.append("\r\n");
327
328 return stringBuffer;
329 }
330
331 }