in protocols/imap/src/main/java/org/apache/james/imap/decode/DecoderUtils.java [247:403]
public static int decodeMonth(char monthFirstChar, char monthSecondChar, char monthThirdChar) throws DecodingException {
final int result;
// Bitwise magic! Eliminate possibility by three switches
int possibleMonths = ALL_MONTH_BITS;
switch (monthFirstChar) {
case 'J':
case 'j':
possibleMonths &= (JAN_BIT | JUN_BIT | JUL_BIT);
break;
case 'F':
case 'f':
possibleMonths &= FEB_BIT;
break;
case 'M':
case 'm':
possibleMonths &= (MAR_BIT | MAY_BIT);
break;
case 'A':
case 'a':
possibleMonths &= (APR_BIT | AUG_BIT);
break;
case 'S':
case 's':
possibleMonths &= SEP_BIT;
break;
case 'O':
case 'o':
possibleMonths &= OCT_BIT;
break;
case 'N':
case 'n':
possibleMonths &= NOV_BIT;
break;
case 'D':
case 'd':
possibleMonths &= DEC_BIT;
break;
default:
possibleMonths = 0;
break;
}
switch (monthSecondChar) {
case 'A':
case 'a':
possibleMonths &= (JAN_BIT | MAR_BIT | MAY_BIT);
break;
case 'E':
case 'e':
possibleMonths &= (FEB_BIT | SEP_BIT | DEC_BIT);
break;
case 'P':
case 'p':
possibleMonths &= (APR_BIT);
break;
case 'U':
case 'u':
possibleMonths &= (JUN_BIT | JUL_BIT | AUG_BIT);
break;
case 'C':
case 'c':
possibleMonths &= OCT_BIT;
break;
case 'O':
case 'o':
possibleMonths &= NOV_BIT;
break;
default:
possibleMonths = 0;
break;
}
switch (monthThirdChar) {
case 'N':
case 'n':
possibleMonths &= (JAN_BIT | JUN_BIT);
break;
case 'B':
case 'b':
possibleMonths &= FEB_BIT;
break;
case 'R':
case 'r':
possibleMonths &= (MAR_BIT | APR_BIT);
break;
case 'Y':
case 'y':
possibleMonths &= MAY_BIT;
break;
case 'L':
case 'l':
possibleMonths &= JUL_BIT;
break;
case 'G':
case 'g':
possibleMonths &= AUG_BIT;
break;
case 'P':
case 'p':
possibleMonths &= SEP_BIT;
break;
case 'T':
case 't':
possibleMonths &= OCT_BIT;
break;
case 'V':
case 'v':
possibleMonths &= NOV_BIT;
break;
case 'C':
case 'c':
possibleMonths &= DEC_BIT;
break;
default:
possibleMonths = 0;
break;
}
switch (possibleMonths) {
case JAN_BIT:
result = Calendar.JANUARY;
break;
case FEB_BIT:
result = Calendar.FEBRUARY;
break;
case MAR_BIT:
result = Calendar.MARCH;
break;
case APR_BIT:
result = Calendar.APRIL;
break;
case MAY_BIT:
result = Calendar.MAY;
break;
case JUN_BIT:
result = Calendar.JUNE;
break;
case JUL_BIT:
result = Calendar.JULY;
break;
case AUG_BIT:
result = Calendar.AUGUST;
break;
case SEP_BIT:
result = Calendar.SEPTEMBER;
break;
case OCT_BIT:
result = Calendar.OCTOBER;
break;
case NOV_BIT:
result = Calendar.NOVEMBER;
break;
case DEC_BIT:
result = Calendar.DECEMBER;
break;
default:
throw new DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, "Expected month name but was " + monthFirstChar + monthSecondChar + monthThirdChar);
}
return result;
}