private Appointment addVEventPropertiestoAppointment()

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;
	}