All Classes and Interfaces

Class
Description
 
 
 
Immutable data key.
Used by FutureCache to execute the ServiceContext.
 
 
Check cluster node Name and generate auto name if not configured
This listener is called when an user was enabled/disabled from the system and update his setting as active/inactive
 
 
 
 
 
 
Provides different methods which are used for comparing and making a list of differences between content.
The glue between the notification dispatcher and the digest: captures every processed notification for the digests of its recipients, apart from the notification itself.
Answers "is this user due now?" in his own local calendar, in Java and not in SQL, so that the rule is the same on every database.
Keeps NTF_DIGEST_USERS, the work list of the digest sender job, in sync with the choices of the users: the row holds only what the job needs to answer "which users are due now?".
 
A notification waiting for the digest of one recipient: one row per notification and per recipient, shared by his daily and his weekly digest, never duplicated per frequency.
Finds the wording of a digest label in the language of the recipient.
Builds one digest email from the waiting items of one occurrence: keeps the categories the user selected for this frequency (the second half of the double check), groups them in display order, asks each addon for its lines, caps every category and counts the rest, then lays everything out with the template.
The mail queue the platform sends from (EMAIL_QUEUE), reached through Spring Data so that a digest email is queued in the very transaction that claims its occurrence.
Puts a digest email in the platform mail queue, with the same row shape and the same checks as the legacy QueueMessage.put, but through the Spring EntityManager: called inside the transaction that claims the occurrence, the queue row and the watermark commit, or roll back, together.
Renders the digest email template.
One occurrence of one frequency for one user, as a single transaction: the claim of the occurrence (the guarded move of the watermark), the reading of the waiting items, the building of the email, its row in the mail queue and the deletion of the covered items commit together, or roll back together.
Writes and reads back the PARAMS column of a waiting item: a small JSON object of strings, ids only.
What the digest email needs to know about its recipient and about the platform, gathered from the existing notification helpers so that the digest emails come from the same sender and use the same links as the instant ones.
The work list of the digest sender job: who is a candidate, the claim of an occurrence, the waiting items of a user and their deletion.
One run of the digest sender job: the safety cleanup, then the selection of the users due now, then one task per due user serving his frequencies one after the other, on a small worker pool.
The one scheduled job of the digest, hourly by default.
 
Reads and writes the digest settings through SettingService, whose cache is in-memory and cluster-coherent: a change saved on one server applies immediately on every server.
The glue between the platform timezone of a user and the digest: when the platform saves a user's timezone (event social.timeZone.saved, source = the username, data = the zone id), the copy the digest sender job keeps in its work list is refreshed, so the next occurrence is computed in the new timezone.
 
The work list of the digest sender job: one row per user having at least one digest frequency enabled, nobody else.
 
 
 
 
 
 
 
 
Route class which contains path, action and argument list.
 
 
 
Prevent XSS/XEE attacks by encoding user HTML inputs.
 
 
 
 
 
 
Cached data list.
 
Simple lorem ipsum text generator.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
This REST Service deserves resource bundles in JSON format
Sends the queued emails, one execution at a time: two overlapping executions load the same queue rows and send each of them twice (seen when the Quartz scheduler starts in the last second of a minute and releases the missed occurrence right before the next one).
Kind of closure.
 
 
 
 
 
A class implementing this interface is executed will be started (execution of the method start()) during the startup of the platform but on one node only if running in cluster.
This service allow to running a specific service (implements StartableClusterAware interface) on one cluster node.