in openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/caldav/IcalUtils.java [179:255]
private Appointment addVEventPropertiestoAppointment(Appointment a, CalendarComponent event) {
event.getProperty(Property.UID).ifPresent(uid -> a.setIcalId(uid.getValue()));
Date d = getDate(event, Property.DTSTART);
a.setStart(getDate(event, Property.DTSTART));
event.getProperty(Property.DTEND).ifPresentOrElse(dtend -> a.setEnd(getDate(dtend))
, () -> a.setEnd(addTimetoDate(d, java.util.Calendar.HOUR_OF_DAY, 1)));
event.getProperty(Property.DTSTAMP).ifPresent(dtstamp -> a.setInserted(getDate(dtstamp)));
event.getProperty(Property.LAST_MODIFIED).ifPresent(lastmod -> a.setUpdated(getDate(lastmod)));
event.getProperty(Property.DESCRIPTION).ifPresent(description -> a.setDescription(description.getValue()));
event.getProperty(Property.SUMMARY).ifPresent(summary -> a.setTitle(summary.getValue()));
event.getProperty(Property.LOCATION).ifPresent(location -> a.setLocation(location.getValue()));
event.getProperty(Property.RRULE).ifPresent(recur ->
recur.getParameter("FREQ").ifPresent(freq -> {
if (freq.getValue().equals(Frequency.DAILY.name())) {
a.setIsDaily(true);
} else if (freq.getValue().equals(Frequency.WEEKLY.name())) {
a.setIsWeekly(true);
} else if (freq.getValue().equals(Frequency.MONTHLY.name())) {
a.setIsMonthly(true);
} else if (freq.getValue().equals(Frequency.YEARLY.name())) {
a.setIsYearly(true);
}
})
);
Set<MeetingMember> attList = a.getMeetingMembers() == null ? new HashSet<>()
: new HashSet<>(a.getMeetingMembers());
AtomicReference<String> organizerEmail = new AtomicReference<>();
//Note this value can be repeated in attendees as well.
event.getProperty(Property.ORGANIZER).ifPresent(organizer -> {
URI uri = URI.create(organizer.getValue());
//If the value of the organizer is an email
if (SCHEME_MAILTO.equals(uri.getScheme())) {
String email = uri.getSchemeSpecificPart();
organizerEmail.set(email);
if (!email.equals(a.getOwner().getAddress().getEmail())) {
//Contact or exist and owner
User org = userDao.getByEmail(email);
if (org == null) {
org = userDao.getContact(email, a.getOwner());
attList.add(createMeetingMember(a, org));
} else if (!org.getId().equals(a.getOwner().getId())) {
attList.add(createMeetingMember(a, org));
}
}
}
});
event.getProperties(Property.ATTENDEE).forEach(attendee -> {
URI uri = URI.create(attendee.getValue());
if (SCHEME_MAILTO.equals(uri.getScheme())) {
String email = uri.getSchemeSpecificPart();
Optional<Role> role = attendee.getParameter(Role.CHAIR.getName());
if (role.isPresent() && role.get().getValue().equals(Role.CHAIR.getValue()) && email.equals(organizerEmail.get())) {
return;
}
User u = userDao.getByEmail(email);
if (u == null) {
u = userDao.getContact(email, a.getOwner());
}
attList.add(createMeetingMember(a, u));
}
});
a.setMeetingMembers(attList.isEmpty() ? null : new ArrayList<>(attList));
return a;
}