private ItemChangeMeetingResponse handleSingleResponse(UserDataRequest udr, MeetingResponse item)
      throws CollectionNotFoundException, ProcessingEmailException, ConversionException {

    MSEmail email = retrieveMailWithMeetingRequest(udr, item);

    ItemChangeMeetingResponse meetingResponse = new ItemChangeMeetingResponse();

    if (email != null) {
      handle(meetingResponse, udr, email, item.getUserResponse());
      deleteInvitationEmail(udr, item);
    } else {
      meetingResponse.setStatus(MeetingResponseStatus.INVALID_MEETING_RREQUEST);
    }

    meetingResponse.setReqId(item.getReqId());
    return meetingResponse;
  }
  private void handle(
      ItemChangeMeetingResponse meetingResponse,
      UserDataRequest udr,
      MSEmail email,
      AttendeeStatus userResponse)
      throws ConversionException {

    meetingResponse.setStatus(MeetingResponseStatus.SUCCESS);
    try {
      String calId = calendarBackend.handleMeetingResponse(udr, email, userResponse);
      if (!AttendeeStatus.DECLINE.equals(userResponse)) {
        meetingResponse.setCalId(calId);
      }
    } catch (ItemNotFoundException e) {
      logger.error(e.getMessage(), e);
      meetingResponse.setStatus(MeetingResponseStatus.SERVER_ERROR);
    } catch (UnexpectedObmSyncServerException e) {
      logger.error(e.getMessage(), e);
      meetingResponse.setStatus(MeetingResponseStatus.SERVER_ERROR);
    } catch (DaoException e) {
      logger.error(e.getMessage(), e);
      meetingResponse.setStatus(MeetingResponseStatus.SERVER_ERROR);
    } catch (CollectionNotFoundException e) {
      logger.error(e.getMessage(), e);
      meetingResponse.setStatus(MeetingResponseStatus.INVALID_MEETING_RREQUEST);
    }
  }