1 36 package org.columba.ristretto.imap.parser; 37 38 import java.util.regex.Matcher ; 39 import java.util.regex.Pattern ; 40 41 import org.columba.ristretto.imap.ResponseTextCode; 42 import org.columba.ristretto.parser.ParserException; 43 44 50 public class ResponseTextCodeParser { 51 52 private static final Pattern typePattern = Pattern.compile("^((ALERT)|" + 53 "(BADCHARSET)|" + 54 "(CAPABILITY)|" + 55 "(PARSE)|" + 56 "(PERMANENTFLAGS)|" + 57 "(READ.ONLY)|" + 58 "(READ.WRITE)|" + 59 "(TRYCREATE)|" + 60 "(UIDNEXT)|" + 61 "(UIDVALIDITY)|" + 62 "(UNSEEN))\\s?(.*)"); 64 71 public static ResponseTextCode parse(String in) throws ParserException { 72 ResponseTextCode result = new ResponseTextCode(); 73 Matcher matcher = typePattern.matcher(in); 74 75 if( matcher.find() ) { 76 if( matcher.group(2) != null ) { 77 result.setType(ResponseTextCode.ALERT); 78 } else if( matcher.group(3) != null ) { 79 result.setType(ResponseTextCode.BADCHARSET); 80 result.setStringArrayValue(StringListParser.parse(matcher.group(13))); 81 } else if( matcher.group(4) != null ) { 82 result.setType(ResponseTextCode.CAPABILITY); 83 result.setStringArrayValue(StringListParser.parse(matcher.group(13))); 84 } else if( matcher.group(5)!=null) { 85 result.setType(ResponseTextCode.PARSE); 86 } else if( matcher.group(6)!=null) { 87 result.setType(ResponseTextCode.PERMANENTFLAGS); 88 result.setStringArrayValue(StringListParser.parse(matcher.group(13))); 89 } else if( matcher.group(7)!=null) { 90 result.setType(ResponseTextCode.READ_ONLY); 91 } else if( matcher.group(8)!=null) { 92 result.setType(ResponseTextCode.READ_WRITE); 93 } else if( matcher.group(9)!=null) { 94 result.setType(ResponseTextCode.TRYCREATE); 95 } else if( matcher.group(10)!=null) { 96 result.setType(ResponseTextCode.UIDNEXT); 97 result.setIntValue(parseIntValue(matcher.group(13))); 98 } else if( matcher.group(11)!=null) { 99 result.setType(ResponseTextCode.UIDVALIDITY); 100 result.setIntValue(parseIntValue(matcher.group(13))); 101 } else if( matcher.group(12)!=null) { 102 result.setType(ResponseTextCode.UNSEEN); 103 result.setIntValue(parseIntValue(matcher.group(13))); 104 } 105 } else { 106 result.setType(ResponseTextCode.UNSPECIFIED); 107 result.setStringValue(in.toString()); 108 } 109 110 return result; 111 } 112 113 private static int parseIntValue(String string) { 114 return Integer.parseInt(string); 115 } 116 117 118 } 119 | Popular Tags |