Class NotificationUtils

java.lang.Object
org.exoplatform.agenda.util.NotificationUtils

public class NotificationUtils extends Object
  • Field Details

    • EVENT_AGENDA

      public static final org.exoplatform.commons.api.notification.model.ArgumentLiteral<org.exoplatform.agenda.model.Event> EVENT_AGENDA
    • EVENT_ATTENDEE

      public static final org.exoplatform.commons.api.notification.model.ArgumentLiteral<List> EVENT_ATTENDEE
    • EVENT_MODIFIER

      public static final org.exoplatform.commons.api.notification.model.ArgumentLiteral<Long> EVENT_MODIFIER
    • EVENT_MODIFICATION_TYPE

      public static final org.exoplatform.commons.api.notification.model.ArgumentLiteral<String> EVENT_MODIFICATION_TYPE
    • EVENT_AGENDA_REMINDER

      public static final org.exoplatform.commons.api.notification.model.ArgumentLiteral<org.exoplatform.agenda.model.EventReminder> EVENT_AGENDA_REMINDER
    • EVENT_PARTICIPANT_ID

      public static final org.exoplatform.commons.api.notification.model.ArgumentLiteral<Long> EVENT_PARTICIPANT_ID
    • EVENT_RESPONSE

      public static final org.exoplatform.commons.api.notification.model.ArgumentLiteral<org.exoplatform.agenda.constant.EventAttendeeResponse> EVENT_RESPONSE
    • EVENT_OCCURRENCE_ID

      public static final org.exoplatform.commons.api.notification.model.ArgumentLiteral<ZonedDateTime> EVENT_OCCURRENCE_ID
    • AGENDA_EVENT_ADDED_NOTIFICATION_PLUGIN

      public static final String AGENDA_EVENT_ADDED_NOTIFICATION_PLUGIN
      See Also:
    • AGENDA_EVENT_MODIFIED_NOTIFICATION_PLUGIN

      public static final String AGENDA_EVENT_MODIFIED_NOTIFICATION_PLUGIN
      See Also:
    • AGENDA_EVENT_CANCELLED_NOTIFICATION_PLUGIN

      public static final String AGENDA_EVENT_CANCELLED_NOTIFICATION_PLUGIN
      See Also:
    • AGENDA_REMINDER_NOTIFICATION_PLUGIN

      public static final String AGENDA_REMINDER_NOTIFICATION_PLUGIN
      See Also:
    • AGENDA_REPLY_NOTIFICATION_PLUGIN

      public static final String AGENDA_REPLY_NOTIFICATION_PLUGIN
      See Also:
    • AGENDA_DATE_POLL_NOTIFICATION_PLUGIN

      public static final String AGENDA_DATE_POLL_NOTIFICATION_PLUGIN
      See Also:
    • AGENDA_VOTE_NOTIFICATION_PLUGIN

      public static final String AGENDA_VOTE_NOTIFICATION_PLUGIN
      See Also:
    • EVENT_ADDED_KEY

      public static final org.exoplatform.commons.api.notification.model.PluginKey EVENT_ADDED_KEY
    • EVENT_MODIFIED_KEY

      public static final org.exoplatform.commons.api.notification.model.PluginKey EVENT_MODIFIED_KEY
    • EVENT_CANCELLED_KEY

      public static final org.exoplatform.commons.api.notification.model.PluginKey EVENT_CANCELLED_KEY
    • EVENT_REMINDER_KEY

      public static final org.exoplatform.commons.api.notification.model.PluginKey EVENT_REMINDER_KEY
    • EVENT_REPLY_KEY

      public static final org.exoplatform.commons.api.notification.model.PluginKey EVENT_REPLY_KEY
    • EVENT_DATE_POLL_KEY

      public static final org.exoplatform.commons.api.notification.model.PluginKey EVENT_DATE_POLL_KEY
    • EVENT_DATE_VOTE_KEY

      public static final org.exoplatform.commons.api.notification.model.PluginKey EVENT_DATE_VOTE_KEY
    • STORED_PARAMETER_EVENT_TITLE

      public static final String STORED_PARAMETER_EVENT_TITLE
      See Also:
    • STORED_PARAMETER_EVENT_DESCRIPTION

      public static final String STORED_PARAMETER_EVENT_DESCRIPTION
      See Also:
    • STORED_PARAMETER_EVENT_LOCATION

      public static final String STORED_PARAMETER_EVENT_LOCATION
      See Also:
    • STORED_PARAMETER_EVENT_OWNER_ID

      public static final String STORED_PARAMETER_EVENT_OWNER_ID
      See Also:
    • STORED_PARAMETER_EVENT_ID

      public static final String STORED_PARAMETER_EVENT_ID
      See Also:
    • STORED_PARAMETER_EVENT_MODIFIER

      public static final String STORED_PARAMETER_EVENT_MODIFIER
      See Also:
    • STORED_PARAMETER_EVENT_CREATOR

      public static final String STORED_PARAMETER_EVENT_CREATOR
      See Also:
    • STORED_PARAMETER_EVENT_URL

      public static final String STORED_PARAMETER_EVENT_URL
      See Also:
    • STORED_PARAMETER_WEB_EVENT_URL

      public static final String STORED_PARAMETER_WEB_EVENT_URL
      See Also:
    • STORED_PARAMETER_EVENT_OCCURRENCE_ID

      public static final String STORED_PARAMETER_EVENT_OCCURRENCE_ID
      See Also:
    • STORED_EVENT_MODIFICATION_TYPE

      public static final String STORED_EVENT_MODIFICATION_TYPE
      See Also:
    • STORED_PARAMETER_MODIFIER_IDENTITY_ID

      public static final String STORED_PARAMETER_MODIFIER_IDENTITY_ID
      See Also:
    • STORED_PARAMETER_EVENT_START_DATE

      public static final String STORED_PARAMETER_EVENT_START_DATE
      See Also:
    • STORED_PARAMETER_EVENT_END_DATE

      public static final String STORED_PARAMETER_EVENT_END_DATE
      See Also:
    • STORED_PARAMETER_EVENT_TIMEZONE_NAME

      public static final String STORED_PARAMETER_EVENT_TIMEZONE_NAME
      See Also:
    • STORED_PARAMETER_EVENT_ATTENDEES

      public static final String STORED_PARAMETER_EVENT_ATTENDEES
      See Also:
    • STORED_PARAMETER_EVENT_CONFERENCE

      public static final String STORED_PARAMETER_EVENT_CONFERENCE
      See Also:
    • STORED_PARAMETER_EVENT_RECURRENT_DETAILS

      public static final String STORED_PARAMETER_EVENT_RECURRENT_DETAILS
      See Also:
    • STORED_PARAMETER_EVENT_PARTICIPANT_NAME

      public static final String STORED_PARAMETER_EVENT_PARTICIPANT_NAME
      See Also:
    • STORED_PARAMETER_EVENT_PARTICIPANT_AVATAR_URL

      public static final String STORED_PARAMETER_EVENT_PARTICIPANT_AVATAR_URL
      See Also:
    • STORED_PARAMETER_EVENT_RESPONSE

      public static final String STORED_PARAMETER_EVENT_RESPONSE
      See Also:
    • STORED_PARAMETER_EVENT_STATUS

      public static final String STORED_PARAMETER_EVENT_STATUS
      See Also:
    • STORED_PARAMETER_EVENT_IS_CREATOR

      public static final String STORED_PARAMETER_EVENT_IS_CREATOR
      See Also:
    • TEMPLATE_VARIABLE_EVENT_ID

      public static final String TEMPLATE_VARIABLE_EVENT_ID
      See Also:
    • TEMPLATE_VARIABLE_EVENT_TITLE

      public static final String TEMPLATE_VARIABLE_EVENT_TITLE
      See Also:
    • TEMPLATE_VARIABLE_EVENT_LOCATION

      public static final String TEMPLATE_VARIABLE_EVENT_LOCATION
      See Also:
    • TEMPLATE_VARIABLE_EVENT_DESCRIPTION

      public static final String TEMPLATE_VARIABLE_EVENT_DESCRIPTION
      See Also:
    • TEMPLATE_VARIABLE_EVENT_RECURRENT_DETAILS

      public static final String TEMPLATE_VARIABLE_EVENT_RECURRENT_DETAILS
      See Also:
    • CALDAV_PROVIDER_NAME

      public static final String CALDAV_PROVIDER_NAME
      Name the CalDAV connector registers itself under in a user's connected accounts. Duplicated from the add-on's own constant on purpose: CalDAV depends on agenda, so the dependency cannot be taken the other way round.
      See Also:
  • Method Details

    • getEventId

      public static final long getEventId(org.exoplatform.commons.api.notification.NotificationContext ctx)
    • getEventReminderId

      public static final long getEventReminderId(org.exoplatform.commons.api.notification.NotificationContext ctx)
    • setNotificationRecipients

      public static final void setNotificationRecipients(org.exoplatform.social.core.manager.IdentityManager identityManager, org.exoplatform.commons.api.notification.model.NotificationInfo notification, org.exoplatform.social.core.space.spi.SpaceService spaceService, List<org.exoplatform.agenda.model.EventAttendee> eventAttendees, org.exoplatform.agenda.model.Event event, String typeModification, long modifierId)
    • setEventReminderNotificationRecipients

      public static final void setEventReminderNotificationRecipients(org.exoplatform.social.core.manager.IdentityManager identityManager, org.exoplatform.commons.api.notification.model.NotificationInfo notification, Long... receiverIds)
    • storeEventParameters

      public static final void storeEventParameters(org.exoplatform.social.core.manager.IdentityManager identityManager, org.exoplatform.commons.api.notification.model.NotificationInfo notification, org.exoplatform.agenda.model.Event event, org.exoplatform.agenda.model.Calendar calendar, String typeModification)
    • storeEventParameters

      public static final void storeEventParameters(org.exoplatform.commons.api.notification.model.NotificationInfo notification, org.exoplatform.agenda.model.Event event, org.exoplatform.agenda.model.Calendar calendar)
    • storeEventParameters

      public static final void storeEventParameters(org.exoplatform.social.core.manager.IdentityManager identityManager, org.exoplatform.commons.api.notification.model.NotificationInfo notification, org.exoplatform.agenda.model.Event event, ZonedDateTime occurrenceId, long participantId, org.exoplatform.agenda.constant.EventAttendeeResponse response, org.exoplatform.agenda.model.Calendar calendar, org.exoplatform.agenda.service.AgendaEventAttendeeService eventAttendeeService, org.exoplatform.social.core.space.spi.SpaceService spaceService)
    • getDefaultSite

      public static String getDefaultSite()
    • buildTemplateParameters

      public static final org.exoplatform.commons.api.notification.service.template.TemplateContext buildTemplateParameters(String username, org.exoplatform.social.core.space.spi.SpaceService spaceService, org.exoplatform.agenda.service.AgendaEventAttendeeService agendaEventAttendeeService, org.exoplatform.commons.api.notification.channel.template.TemplateProvider templateProvider, org.exoplatform.commons.api.notification.model.NotificationInfo notification, ZoneId timeZone)
    • buildTemplateReminderParameters

      public static final org.exoplatform.commons.api.notification.service.template.TemplateContext buildTemplateReminderParameters(org.exoplatform.social.core.space.spi.SpaceService spaceService, org.exoplatform.commons.api.notification.channel.template.TemplateProvider templateProvider, org.exoplatform.commons.api.notification.model.NotificationInfo notification, ZoneId timeZone)
    • buildTemplateReplyParameters

      public static final org.exoplatform.commons.api.notification.service.template.TemplateContext buildTemplateReplyParameters(org.exoplatform.commons.api.notification.channel.template.TemplateProvider templateProvider, org.exoplatform.commons.api.notification.model.NotificationInfo notification, ZoneId timeZone, boolean isCreator)
    • buildTemplateDatePollParameters

      public static final org.exoplatform.commons.api.notification.service.template.TemplateContext buildTemplateDatePollParameters(org.exoplatform.social.core.space.spi.SpaceService spaceService, org.exoplatform.commons.api.notification.channel.template.TemplateProvider templateProvider, org.exoplatform.commons.api.notification.model.NotificationInfo notification)
    • buildMessageSubjectAndBody

      public static final org.exoplatform.commons.api.notification.model.MessageInfo buildMessageSubjectAndBody(org.exoplatform.commons.api.notification.service.template.TemplateContext templateContext, org.exoplatform.commons.api.notification.model.NotificationInfo notification, String pushNotificationURL)
    • getEventURL

      public static String getEventURL(long eventId)
      The absolute link that opens one event in eXo.

      This is the single definition of the shape of that link, and it is the one every notification mail's deep link has always used. EXO-89751 made it an overload of its own so that the iCalendar documents eXo writes — the file attached to the invitation mail, and the copy pushed into a user's own calendar over CalDAV — can render the very same string as the mail body they arrive with, from the event alone, without a caller having to pass one in. That is the property the whole ticket turns on: a value derived from the event is the same on a browser push, on a sweep and on a repair, so the link is written once and never stripped by the next repair.

      Parameters:
      eventId - technical identifier of the event
      Returns:
      the absolute link, ending in agenda?eventId=<id>
    • getEventURL

      public static String getEventURL(org.exoplatform.agenda.model.Event event, ZonedDateTime occurrenceId)
    • getWebEventURL

      public static String getWebEventURL(org.exoplatform.agenda.model.Event event, ZonedDateTime occurrenceId)
    • getEventURL

      public static String getEventURL(org.exoplatform.agenda.model.Event event)
    • getResponseURL

      public static String getResponseURL(org.exoplatform.agenda.service.AgendaEventAttendeeService agendaEventAttendeeService, long eventId, String username, org.exoplatform.agenda.constant.EventAttendeeResponse response)
    • getRecurrenceDetails

      public static String getRecurrenceDetails(org.exoplatform.agenda.model.Event event)
    • getWebConferenceLink

      public static String getWebConferenceLink(org.exoplatform.agenda.model.Event event)
    • shouldAttachIcsFile

      public static boolean shouldAttachIcsFile(long recipientIdentityId, org.exoplatform.agenda.model.AgendaUserSettings recipientSettings)
      Whether the event.ics file must be attached to the notification built for this recipient.

      A recipient who keeps a CalDAV account connected with meeting copies on ends up holding the same meeting twice: once as the copy eXo pushes into their "eXo Meetings" calendar, once if they open the file attached to their mail. The two documents carry different UIDs, so no client can tell they are the same meeting and neither replaces the other. The file is the redundant one — it is the poorer document (no ATTENDEE, no PARTSTAT, no recurrence, no alarms) and the copy arrives whether it is opened or not — so it is the one that goes.

      This is a prediction, not an observation, and deliberately so. The invitation is dispatched synchronously inside event creation (AgendaEventServiceImpl.createEvent to AgendaEventAttendeeServiceImpl.sendInvitations) while an attendee's copy is written only by the five-minute CalDAV sweep. At the moment this runs the copy does not exist yet — measured on the rig, notification at 21:36:19Z and copy at 21:40:16Z — so "does a copy exist" is unanswerable here and asking it would be a race. The question answered instead is "will this user hold a copy", read from the user's own settings. It is wrong for a user whose CalDAV server has been unreachable for a long time; that user loses the attachment, but they are already receiving none of their meetings, and they can still see the event in eXo and answer from the links in the mail, which this does not touch.

      A guest is never suppressed, under any condition: a guest has no copy by definition, and the attachment is their only way to get the meeting at all. Two independent things guarantee it here — a guest is a AgendaGuestUserIdentityProvider identity, so it never resolves to an organization identity and reaches this method with an id of 0; and having no connected account, its default settings fail the connector test as well.

      Parameters:
      recipientIdentityId - organization identity id of the recipient, 0 when the recipient is not an internal user (a guest)
      recipientSettings - agenda settings of that recipient, possibly null
      Returns:
      true when the file must be attached, which is every case but the connected-with-copies one