@Override public List<Integer> getAssignedAttendeeIds(TeamEventDO data) { List<Integer> assignedAttendees = new ArrayList<>(); if (data != null && data.getAttendees() != null) { for (TeamEventAttendeeDO attendee : data.getAttendees()) { assignedAttendees.add(attendee.getId()); } } return assignedAttendees; }
/** * Returns also true, if idSet contains the id of any attendee. * * @see org.projectforge.framework.persistence.api.BaseDao#contains(java.util.Set, * org.projectforge.core.ExtendedBaseDO) */ @Override protected boolean contains(final Set<Integer> idSet, final TeamEventDO entry) { if (super.contains(idSet, entry) == true) { return true; } for (final TeamEventAttendeeDO pos : entry.getAttendees()) { if (idSet.contains(pos.getId()) == true) { return true; } } return false; }
public void initSortedAttendees() { if (sortedAttendees == null) { sortedAttendees = teamEventService.getAddressesAndUserAsAttendee(); sortedAttendees.forEach(att -> { if (att.getId() == null) { att.setId(getAndDecreaseInternalNewAttendeeSequence()); } }); Set<TeamEventAttendeeDO> assignedAttendees = event.getAttendees(); List<TeamEventAttendeeDO> removeAddressAttendeeList = new ArrayList<>(); if (assignedAttendees != null) { for (TeamEventAttendeeDO addressAttendee : sortedAttendees) { for (TeamEventAttendeeDO alreadyAssignedAttendee : assignedAttendees) { if (addressAttendee.equals(alreadyAssignedAttendee)) { removeAddressAttendeeList.add(addressAttendee); } } } sortedAttendees.removeAll(removeAddressAttendeeList); sortedAttendees.addAll(assignedAttendees); } } }
@Override public void assignAttendees(TeamEventDO data, Set<TeamEventAttendeeDO> itemsToAssign, Set<TeamEventAttendeeDO> itemsToUnassign) { for (TeamEventAttendeeDO assignAttendee : itemsToAssign) { if (assignAttendee.getId() == null || assignAttendee.getId() < 0) { assignAttendee.setId(null); if (assignAttendee.getStatus() == null) { assignAttendee.setStatus(TeamEventAttendeeStatus.NEEDS_ACTION); } data.addAttendee(assignAttendee); teamEventAttendeeDao.internalSave(assignAttendee); } } if (data.getAttendees() != null && itemsToUnassign != null && itemsToUnassign.size() > 0) { data.getAttendees().removeAll(itemsToUnassign); for (TeamEventAttendeeDO deleteAttendee : itemsToUnassign) { teamEventAttendeeDao.internalMarkAsDeleted(deleteAttendee); } } teamEventDao.update(data); }
return list; if (CollectionUtils.isNotEmpty(obj.getAttendees()) == true) { for (final TeamEventAttendeeDO attendee : obj.getAttendees()) { final List<DisplayHistoryEntry> entries = internalGetDisplayHistoryEntries(attendee); for (final DisplayHistoryEntry entry : entries) {
@Override public void fixAttendees(final TeamEventDO event) { List<TeamEventAttendeeDO> attendeesFromDbList = this.getAddressesAndUserAsAttendee(); Integer internalNewAttendeeSequence = -10000; boolean found; for (TeamEventAttendeeDO attendeeDO : event.getAttendees()) { found = false; // search for eMail in DB as possible attendee for (TeamEventAttendeeDO dBAttendee : attendeesFromDbList) { if (dBAttendee.getEMailAddress() != null && dBAttendee.getEMailAddress().equals(attendeeDO.getUrl())) { attendeeDO = dBAttendee; attendeeDO.setId(internalNewAttendeeSequence--); found = true; break; } } if (found == false) { attendeeDO.setId(internalNewAttendeeSequence--); } } } }
/** * @see org.projectforge.web.wicket.AbstractEditPage#afterSaveOrUpdate() */ @Override public AbstractSecuredBasePage afterSaveOrUpdate() { super.afterSaveOrUpdate(); if (newEvent != null) { // changed one element of an recurring event newEvent.setSequence(0); newEvent.getAttendees().clear(); teamEventService.save(newEvent); Set<TeamEventAttendeeDO> toAssign = new HashSet<>(); form.assignAttendeesListHelper.getAssignedItems().stream().forEach(a -> toAssign.add(a.clone())); teamEventService.assignAttendees(newEvent, toAssign, null); teamEventService.checkAndSendMail(newEvent, TeamEventDiffType.NEW); } else { TeamEventDO teamEventAfterSaveOrUpdate = teamEventService.getById(getData().getPk()); teamEventService.assignAttendees(teamEventAfterSaveOrUpdate, form.assignAttendeesListHelper.getItemsToAssign(), form.assignAttendeesListHelper.getItemsToUnassign()); teamEventService.checkAndSendMail(teamEventAfterSaveOrUpdate, this.teamEventBeforeSaveOrUpdate); } return null; }
TeamEventDO teamEventClone = getData().clone(); Set<TeamEventAttendeeDO> originAssignedAttendees = new HashSet<>(); teamEventClone.getAttendees().forEach(attendee -> { originAssignedAttendees.add(attendee); });
if (eventDO.getAttendees() != null && eventDO.getAttendees().isEmpty() == false) { tooltipContent.add(new String[] { getString("plugins.teamcal.attendees") + ":" }); for (TeamEventAttendeeDO teamEventAttendeeDO : eventDO.getAttendees()) { final StringBuilder buf = new StringBuilder(); buf.append("- ");
Assert.assertEquals(event.getAttendees().size(), 3); for (TeamEventAttendeeDO attendee : event.getAttendees()) { Assert.assertTrue(attendee.getUrl().equals("organizer@example.com") || attendee.getUrl().equals("a1@example.com")
private boolean checkAndSendMail(final TeamEventDiff diff) { boolean result = true; switch (diff.getDiffType()) { case NEW: case RESTORED: result &= this.sendMail(diff.getEventNewState(), diff, diff.getEventNewState().getAttendees(), EventMailType.NEW); break; case DELETED: result &= this.sendMail(diff.getEventNewState(), diff, diff.getEventNewState().getAttendees(), EventMailType.DELETED); break; case UPDATED: case ATTENDEES: result &= this.sendMail(diff.getEventNewState(), diff, diff.getAttendeesNotChanged(), EventMailType.UPDATED); result &= this.sendMail(diff.getEventNewState(), diff, diff.getAttendeesAdded(), EventMailType.NEW); result &= this.sendMail(diff.getEventOldState(), diff, diff.getAttendeesRemoved(), EventMailType.DELETED); break; case NONE: // nothing to do break; } return result; }
@Test public void computeDiffAttendees1() { TeamEventDO newEvent = EVENT_1; TeamEventDO oldEvent = EVENT_1.clone(); oldEvent.getAttendees().clear(); final TeamEventDiff diff = TeamEventDiff.compute(newEvent, oldEvent, Collections.EMPTY_SET); Assert.assertNotNull(diff); Assert.assertEquals(TeamEventDiffType.ATTENDEES, diff.getDiffType()); Assert.assertTrue(diff.isDiff()); Assert.assertEquals(0, diff.getFieldDiffs().size()); Assert.assertEquals(2, diff.getAttendeesAdded().size()); Assert.assertEquals(0, diff.getAttendeesRemoved().size()); }
eventService.updateAttendees(event, eventInDB.getAttendees()); eventService.update(event); event.getAttendees().forEach(att -> attendees.add(att.clone())); event.setAttendees(null);
@Test public void computeDiffAttendees2() { TeamEventDO newEvent = EVENT_1.clone(); TeamEventDO oldEvent = EVENT_1; newEvent.getAttendees().clear(); final TeamEventDiff diff = TeamEventDiff.compute(newEvent, oldEvent, Collections.EMPTY_SET); Assert.assertNotNull(diff); Assert.assertEquals(TeamEventDiffType.ATTENDEES, diff.getDiffType()); Assert.assertTrue(diff.isDiff()); Assert.assertEquals(0, diff.getFieldDiffs().size()); Assert.assertEquals(0, diff.getAttendeesAdded().size()); Assert.assertEquals(2, diff.getAttendeesRemoved().size()); }
@Test public void computeDiffAttendees3() { TeamEventDO newEvent = EVENT_1.clone(); TeamEventDO oldEvent = EVENT_1.clone(); TeamEventAttendeeDO attendeeRemoved = (TeamEventAttendeeDO) newEvent.getAttendees().toArray()[0]; TeamEventAttendeeDO attendeeNotChanged = (TeamEventAttendeeDO) newEvent.getAttendees().toArray()[1]; newEvent.getAttendees().remove(attendeeRemoved); TeamEventAttendeeDO attendee3 = new TeamEventAttendeeDO(); attendee3.setUrl("url3"); newEvent.addAttendee(attendee3); TeamEventAttendeeDO attendee4 = new TeamEventAttendeeDO(); attendee4.setUrl("url4"); newEvent.addAttendee(attendee4); final TeamEventDiff diff = TeamEventDiff.compute(newEvent, oldEvent, Collections.EMPTY_SET); Assert.assertNotNull(diff); Assert.assertEquals(TeamEventDiffType.ATTENDEES, diff.getDiffType()); Assert.assertTrue(diff.isDiff()); Assert.assertEquals(0, diff.getFieldDiffs().size()); Assert.assertEquals(2, diff.getAttendeesAdded().size()); Assert.assertEquals(1, diff.getAttendeesRemoved().size()); Assert.assertEquals(1, diff.getAttendeesNotChanged().size()); Assert.assertTrue(diff.getAttendeesAdded().contains(attendee3)); Assert.assertTrue(diff.getAttendeesAdded().contains(attendee4)); Assert.assertTrue(diff.getAttendeesRemoved().contains(attendeeRemoved)); Assert.assertTrue(diff.getAttendeesNotChanged().contains(attendeeNotChanged)); }
Assert.assertEquals(Integer.valueOf(0), event.getSequence()); Assert.assertEquals("mailto:organizer@example.com", event.getOrganizer()); Assert.assertEquals(3, event.getAttendees().size()); for (TeamEventAttendeeDO attendee : event.getAttendees()) { if (attendee.getUrl().equals("organizer@example.com")) { validateAttendee(attendee, CuType.INDIVIDUAL, TeamEventAttendeeStatus.ACCEPTED, Role.CHAIR, null, "Organizer", null);
Assert.assertEquals(Integer.valueOf(0), event.getSequence()); Assert.assertEquals("mailto:organizer@example.com", event.getOrganizer()); Assert.assertEquals(3, event.getAttendees().size()); for (TeamEventAttendeeDO attendee : event.getAttendees()) { if (attendee.getUrl().equals("organizer@example.com")) { validateAttendee(attendee, CuType.INDIVIDUAL, TeamEventAttendeeStatus.ACCEPTED, Role.CHAIR, null, "Organizer", null);
Assert.assertEquals(null, event.getOrganizer()); Assert.assertEquals(null, event.getLocation()); Assert.assertEquals(0, event.getAttendees().size()); Assert.assertEquals(null, event.getOrganizer()); Assert.assertEquals("adding location", event.getLocation()); Assert.assertEquals(0, event.getAttendees().size()); Assert.assertEquals(null, event.getOrganizer()); Assert.assertEquals("adding location", event.getLocation()); Assert.assertEquals(0, event.getAttendees().size());
@Override public boolean toVEvent(TeamEventDO event, VEvent vEvent) { if (event.getAttendees() == null) { return false; } // TODO add organizer user, most likely as chair for (TeamEventAttendeeDO a : event.getAttendees()) { String email = "mailto:" + (a.getAddress() != null ? a.getAddress().getEmail() : a.getUrl()); Attendee attendee = new Attendee(URI.create(email)); // set common name if (a.getAddress() != null) { attendee.getParameters().add(new Cn(a.getAddress().getFullName())); } else if (a.getCommonName() != null) { attendee.getParameters().add(new Cn(a.getCommonName())); } else { attendee.getParameters().add(new Cn(a.getUrl())); } attendee.getParameters().add(a.getCuType() != null ? new CuType(a.getCuType()) : CuType.INDIVIDUAL); attendee.getParameters().add(a.getRole() != null ? new Role(a.getRole()) : Role.REQ_PARTICIPANT); if (a.getRsvp() != null) { attendee.getParameters().add(new Rsvp(a.getRsvp())); } attendee.getParameters().add(a.getStatus() != null ? a.getStatus().getPartStat() : PartStat.NEEDS_ACTION); this.parseAdditionalParameters(attendee.getParameters(), a.getAdditionalParams()); vEvent.getProperties().add(attendee); } return true; }
if (this.attendees != null && this.attendees.isEmpty() == false) { clone.attendees = clone.ensureAttendees(); for (final TeamEventAttendeeDO attendee : this.getAttendees()) { TeamEventAttendeeDO cloneAttendee = new TeamEventAttendeeDO(); cloneAttendee.setAddress(attendee.getAddress());