KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > ristretto > imap > parser > MailboxInfoParser


1 /* ***** BEGIN LICENSE BLOCK *****
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * The contents of this file are subject to the Mozilla Public License Version
5  * 1.1 (the "License"); you may not use this file except in compliance with
6  * the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS" basis,
10  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11  * for the specific language governing rights and limitations under the
12  * License.
13  *
14  * The Original Code is Ristretto Mail API.
15  *
16  * The Initial Developers of the Original Code are
17  * Timo Stich and Frederik Dietz.
18  * Portions created by the Initial Developers are Copyright (C) 2004
19  * All Rights Reserved.
20  *
21  * Contributor(s):
22  *
23  * Alternatively, the contents of this file may be used under the terms of
24  * either the GNU General Public License Version 2 or later (the "GPL"), or
25  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
26  * in which case the provisions of the GPL or the LGPL are applicable instead
27  * of those above. If you wish to allow use of your version of this file only
28  * under the terms of either the GPL or the LGPL, and not to allow others to
29  * use your version of this file under the terms of the MPL, indicate your
30  * decision by deleting the provisions above and replace them with the notice
31  * and other provisions required by the GPL or the LGPL. If you do not delete
32  * the provisions above, a recipient may use your version of this file under
33  * the terms of any one of the MPL, the GPL or the LGPL.
34  *
35  * ***** END LICENSE BLOCK ***** */

36 package org.columba.ristretto.imap.parser;
37
38 import java.util.regex.Pattern JavaDoc;
39
40 import org.columba.ristretto.imap.IMAPResponse;
41 import org.columba.ristretto.imap.ResponseTextCode;
42 import org.columba.ristretto.message.MailboxInfo;
43 import org.columba.ristretto.parser.ParserException;
44
45 /**
46  * Parser for the MailboxInfo.
47  *
48  * @author tstich
49  *
50  */

51 public class MailboxInfoParser {
52     private static final Pattern JavaDoc stringListPattern = Pattern
53             .compile("(\\s|\\()?([^\\s\\)]+)");
54
55     /**
56      * Parse the MailboxInfo of the IMAP response.
57      *
58      * @param in
59      * @return the MailboxInfo
60      * @throws ParserException
61      */

62     public static MailboxInfo parse(IMAPResponse in) throws ParserException {
63         return parse( in, null);
64     }
65     
66     /**
67      * Parse the MailboxInfo in the IMAP response and
68      * add the information to the given MailboxInfo.
69      *
70      * @param in
71      * @param mailboxInfo a preset MailboxInfo
72      * @return the MailboxInfo
73      * @throws ParserException
74      */

75     public static MailboxInfo parse(IMAPResponse in, MailboxInfo mailboxInfo) throws ParserException {
76         MailboxInfo result;
77         
78         if( mailboxInfo != null ) {
79             result = mailboxInfo;
80         } else
81         result = new MailboxInfo();
82
83             String JavaDoc type = in.getResponseSubType();
84             if (type.equals("RECENT")) {
85                 result.setRecent(in.getPreNumber());
86             } else if (type.equals("EXISTS")) {
87                 result.setExists(in.getPreNumber());
88             } else if (type.equals("FLAGS")) {
89                 result.setDefinedFlags(StringListParser.parse(in
90                         .getResponseMessage()));
91             } else if (type.equals("OK")) {
92                 ResponseTextCode info = in.getResponseTextCode();
93                 if (info != null) {
94                     switch (info.getType()) {
95                         case ResponseTextCode.UNSEEN : {
96                             result.setFirstUnseen(info.getIntValue());
97                             break;
98                         }
99                         case ResponseTextCode.UIDVALIDITY : {
100                             result.setUidValidity(info.getIntValue());
101                             break;
102                         }
103                         case ResponseTextCode.UIDNEXT : {
104                             result.setUidNext(info.getIntValue());
105                             break;
106                         }
107                         case ResponseTextCode.PERMANENTFLAGS : {
108                             result
109                                     .setPermanentFlags(info
110                                             .getStringArrayValue());
111                             break;
112                         }
113
114                         case ResponseTextCode.READ_ONLY : {
115                             result.setWriteAccess(false);
116                             break;
117                         }
118
119                         case ResponseTextCode.READ_WRITE : {
120                             result.setWriteAccess(true);
121                             break;
122                         }
123
124                         default : {
125                             // Ignore unknown Response Type
126
}
127                     }
128                 }
129         }
130
131         return result;
132     }
133 }
Popular Tags