private EventRecurrence getRecurrence(MSTask mst) { if (mst.getRecurrence() == null) { return null; } MSRecurrence pr = mst.getRecurrence(); EventRecurrence or = new EventRecurrence(); Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); int multiply = 0; switch (pr.getType()) { case DAILY: or.setKind(RecurrenceKind.daily); or.setDays(RecurrenceDayOfWeekConverter.toRecurrenceDays(pr.getDayOfWeek())); multiply = Calendar.DAY_OF_MONTH; break; case MONTHLY: or.setKind(RecurrenceKind.monthlybydate); multiply = Calendar.MONTH; break; case MONTHLY_NDAY: or.setKind(RecurrenceKind.monthlybyday); multiply = Calendar.MONTH; break; case WEEKLY: or.setKind(RecurrenceKind.weekly); or.setDays(RecurrenceDayOfWeekConverter.toRecurrenceDays(pr.getDayOfWeek())); multiply = Calendar.WEEK_OF_YEAR; break; case YEARLY: or.setKind(RecurrenceKind.yearly); cal.setTimeInMillis(mst.getUtcStartDate().getTime()); cal.set(Calendar.DAY_OF_MONTH, pr.getDayOfMonth()); cal.set(Calendar.MONTH, pr.getMonthOfYear() - 1); mst.setUtcStartDate(cal.getTime()); or.setFrequence(1); multiply = Calendar.YEAR; break; case YEARLY_NDAY: or.setKind(RecurrenceKind.yearly); multiply = Calendar.YEAR; break; } // interval if (pr.getInterval() != null) { or.setFrequence(pr.getInterval()); } // occurence or end date Date endDate = null; if (pr.getOccurrences() != null && pr.getOccurrences() > 0) { cal.setTimeInMillis(pr.getStart().getTime()); cal.add(multiply, pr.getOccurrences() - 1); endDate = new Date(cal.getTimeInMillis()); } else { endDate = pr.getUntil(); } or.setEnd(endDate); return or; }