Interface TrsStore

    • Method Detail

      • createSynchronizer

        Executor createSynchronizer()
        Creates an executor that guarantees runnable instances handling data related to this store are never executed concurrently but one at a time across the whole web application. If the web application is deployed in a cluster, the executor must ensure only one cluster node can execute at a time the runnable instances.

        Subclasses may choose to use LockExecutors to obtain an executor.

        Returns:
        an executor that guarantees runnable instances are executed one at a time.
        See Also:
        TrsStoreSynchronizer, LockExecutors
      • restore

        void restore()
              throws TrsStoreException
        Restores the store's state to the starting stage.
        Throws:
        CompletionException - if the underlying task cannot complete due to synchronization problems (e.g. a lock cannot be acquired).
        TrsStoreException - if the storage cannot be reestablished to its original state by any other reason.
      • getControl

        TrsServiceControl getControl()
        Retrieves the current state of a TRS service control. This method should always return an instance even if an internal implementation-specific exception occurs, in such case, a default instance should be returned to restart over the TRS feed.
        Returns:
        the TRS service control.
      • addBaseMembers

        long addBaseMembers​(long lastMemberId,
                            Function<Consumer<ResourceSeed>,​?> membersProvider)
                     throws TrsStoreException
        Adds members to the base. To support a consistent pagination, this method is expected to keep an order between this member and existing members, such order must be reflected by the returned id: first appended members must have lesser members ids than those appended last.

        The function argument provides access to ResourceSeeds to be added in this store as base members. Implementation must call the apply() method of this function and use as argument a Consumer to get notified of members. Implementation is advised to use a BufferedConsumer for optimal performance.

        Parameters:
        lastMemberId - last stored member id.
        membersProvider - a function that provides access to ResourceSeeds to add as base members.
        Returns:
        last stored member id (relative to its position).
        Throws:
        TrsStoreException - if any other TRS store error occurs.
        See Also:
        BufferedConsumer
      • removeBaseMembers

        int removeBaseMembers​(Function<Consumer<ResourceSeed>,​?> membersProvider)
                       throws TrsStoreException
        Removes members from the base.

        The function argument provides access to ResourceSeeds to be removed as base members from this store. Implementation must call the apply() method of this function and use as argument a Consumer to get notified of members. Implementation is advised to use a BufferedConsumer for optimal performance.

        Parameters:
        membersProvider - a function that provides access to URIs to add as base members.
        Returns:
        number of members removed.
        Throws:
        TrsStoreException - if any other TRS store error occurs.
        See Also:
        BufferedConsumer
      • collectBaseMembers

        Optional<Long> collectBaseMembers​(Optional<Long> startingMemberId,
                                          Optional<Integer> size,
                                          Optional<Integer> resourceType,
                                          Optional<String> resourceProject,
                                          Consumer<ResourceSeed> baseMembersConsumer)
                                   throws TrsStoreException
        Collects base members, either all of them or just a page. Consumers may raise CancellationException to indicate the collecting process must stop, but implementations must no propagate this exception, this is a convenient way to stop a searching process.
        Parameters:
        startingMemberId - optional, the initial member (id) on the page. If not present, starts from first page (member).
        size - optional, number of members to populate including startingMemberId if present (used for pagination).
        resourceType - optional, only members of this type will be collected.
        resourceProject - optional, only members of this project area will be collected.
        baseMembersConsumer - base members consumer.
        Returns:
        if present, the id of the next member in the next page, otherwise it means no more pages exist (or pagination was not used).
        Throws:
        CompletionException - if consumer raise it to stop the collecting process due an error occurred.
        TrsStoreException - if any other TRS store error occurs.
        Since:
        3.3.0
      • pushChangeEventSeeds

        void pushChangeEventSeeds​(Function<Consumer<ChangeEventSeed>,​?> eventsProvider)
                           throws TrsStoreException
        Stores the latest events in the trs:ChangeLog.

        The function argument provides access to change events to be added in this store. Implementation must call the apply() method of this function and use as argument a Consumer to get notified of events. Implementation is advised to use a BufferedConsumer for optimal performance.

        Parameters:
        eventsProvider - a function that provides access to change events to become part of the trs:ChangeLog.
        Throws:
        TrsStoreException - if any other TRS store error occurs.
        See Also:
        BufferedConsumer
      • pollChangeEventSeeds

        Optional<Integer> pollChangeEventSeeds​(int startingOrder,
                                               int count,
                                               Consumer<ChangeEventSeed> changeEventsConsumer)
                                        throws TrsStoreException
        Collects (backwards) a given number of events from the trs:ChangeLog. This method is not forced to resolve all requested events, it must just provide as many as it has from requested and from startingOrder. Implementations must also consider that a count of zero may be requested. In this case, no events must be added to target, but the existence of a further event must be resolved in order to determine whether or not a next page exists. This latter must be reflected in the return value. Consumers may raise CancellationException to indicate the collecting process must stop, but implementations must no propagate this exception, this is a convenient way to stop a searching process.
        Parameters:
        startingOrder - starting event order inclusive.
        count - number of events to poll.
        changeEventsConsumer - changes events consumer.
        Returns:
        event order of previous event (not included in the extraction) if present; empty Optional if no more events exists.
        Throws:
        CompletionException - if consumer raise it to stop the collecting process due an error occurred.
        TrsStoreException - if any other TRS store error occurs.
      • collectChangeEventSeeds

        void collectChangeEventSeeds​(Optional<ChangeEventSeed> since,
                                     Optional<ResourceEvent.Type> eventType,
                                     Consumer<ChangeEventSeed> changeEventsConsumer)
                              throws TrsStoreException
        Collects (forwards) all existing events in trs:ChangeLog since (optionally) a particular event. Consumers may raise CancellationException to indicate the collecting process must stop, but implementations must no propagate this exception, this is a convenient way to stop a searching process.
        Parameters:
        since - starting event (exclusive) to be consumed. If present, typically the last trs:Base cutoff event.
        eventType - the type of event to collect; all types of events if Optional.empty().
        changeEventsConsumer - changes events consumer.
        Throws:
        CompletionException - if consumer raise it to stop the collecting process due an error occurred.
        TrsStoreException - if any other TRS store error occurs.
      • getFirstChangeEventSince

        Optional<ChangeEventSeed> getFirstChangeEventSince​(Date date)
                                                    throws TrsStoreException
        Determines the oldest change event on or after a given a date. Implementations should compare only the date part, not the time.
        Parameters:
        date - point of reference to find the event
        Returns:
        an empty Optional if no event exists; the contained reference otherwise.
        Throws:
        TrsStoreException - if any other TRS store error occurs.
        Since:
        3.8.0
      • removeChangeEventSeedsBefore

        int removeChangeEventSeedsBefore​(int order)
                                  throws TrsStoreException
        Removes events in trs:ChangeLog prior or equal to a given order.
        Parameters:
        order - event order of reference (inclusive) to remove events.
        Returns:
        number of deleted events.
        Throws:
        TrsStoreException - if any other TRS store error occurs.
      • isResourceExposed

        boolean isResourceExposed​(ResourceSeed seed)
                           throws TrsStoreException
        Determines whether a resource is exposed or not. An exposed resource is one that is part of the TRS feed, this means there has not been a DELETION event for it and it is either part of the trs:base or there is a CREATION event in the trs:changeLog.
        Parameters:
        seed - the resource seed.
        Returns:
        true if resource is exposed, false otherwise.
        Throws:
        TrsStoreException - if a TRS store error occurs.
      • synchronizeResourceEvents

        int synchronizeResourceEvents​(int lastEventOrder)
                               throws TrsStoreException
        Synchronizes all the stored events (since the last synchronization) so all of them get their right order and become visible to the TRS feed.
        Parameters:
        lastEventOrder - the last stored order.
        Returns:
        the new last event order to be saved in the TrsServiceControl class.
        Throws:
        TrsStoreException - if the synchronization fails.
        Since:
        3.6.0
      • deleteResources

        void deleteResources​(Function<Consumer<ResourceSeed>,​?> seedsProvider)
                      throws TrsStoreException
        Stores deletion events for the given resource seeds.

        Implementations MUST store events without checking ResourceEventStore.isStoringEventsOf(Optional).

        The function argument provides access to resource seeds for which deletion events need to be added in this store. Implementation must call the apply() method of this function and use, as argument, a Consumer to get notified of seeds.

        Parameters:
        seedsProvider - a function that provides access to resource seeds to become part of the trs:ChangeLog.
        Throws:
        TrsStoreException - if a TRS store error occurs.
        Since:
        3.7.0