/**
  * Set up the meetingInfo field in the message with various pieces of information gleaned from
  * MeetingRequest tags. This information will be used later to generate an appropriate reply email
  * if the user chooses to respond
  *
  * @param msg the Message being built
  * @throws IOException
  */
 private void meetingRequestParser(EmailContent.Message msg) throws IOException {
   PackedString.Builder packedString = new PackedString.Builder();
   while (nextTag(Tags.EMAIL_MEETING_REQUEST) != END) {
     switch (tag) {
       case Tags.EMAIL_DTSTAMP:
         packedString.put(MeetingInfo.MEETING_DTSTAMP, getValue());
         break;
       case Tags.EMAIL_START_TIME:
         packedString.put(MeetingInfo.MEETING_DTSTART, getValue());
         break;
       case Tags.EMAIL_END_TIME:
         packedString.put(MeetingInfo.MEETING_DTEND, getValue());
         break;
       case Tags.EMAIL_ORGANIZER:
         packedString.put(MeetingInfo.MEETING_ORGANIZER_EMAIL, getValue());
         break;
       case Tags.EMAIL_LOCATION:
         packedString.put(MeetingInfo.MEETING_LOCATION, getValue());
         break;
       case Tags.EMAIL_GLOBAL_OBJID:
         packedString.put(
             MeetingInfo.MEETING_UID, CalendarUtilities.getUidFromGlobalObjId(getValue()));
         break;
       case Tags.EMAIL_CATEGORIES:
         skipParser(tag);
         break;
       case Tags.EMAIL_RECURRENCES:
         recurrencesParser();
         break;
       case Tags.EMAIL_RESPONSE_REQUESTED:
         packedString.put(MeetingInfo.MEETING_RESPONSE_REQUESTED, getValue());
         break;
       case Tags.EMAIL_ALL_DAY_EVENT:
         if (getValueInt() == 1) {
           packedString.put(MeetingInfo.MEETING_ALL_DAY, "1");
         }
         break;
       default:
         skipTag();
     }
   }
   if (msg.mSubject != null) {
     packedString.put(MeetingInfo.MEETING_TITLE, msg.mSubject);
   }
   msg.mMeetingInfo = packedString.toString();
 }