/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.notification; import java.io.Serializable; import java.util.List; import java.util.Map; import de.rcenvironment.core.communication.common.InstanceNodeSessionId; import de.rcenvironment.core.communication.common.ResolvableNodeId; import de.rcenvironment.core.utils.common.rpc.RemoteOperationException; /** * Supportive service for accessing the {@link NotificationService} without handling remote stuff. * * @author Doreen Seider * @author Robert Mischke */ // TODO rename to match new 7.0.0 naming conventions public interface DistributedNotificationService { /** * Sets the buffer size for the given notification represented by its notification identifier. * * @param notificationIdentifier The identifier of the {@link Notification}s to set the buffer size for. * @param bufferSize The buffer size to set. */ void setBufferSize(String notificationIdentifier, int bufferSize); /** * Removes a specified publisher identified by the notification identifier of the {@link Notification}s it published, i.e. all stored * information concerning this identifier like {@link Notification}s, {@link NotificationSubscriber} and so on are deleted. All * subscribers for this {@link Notification} will be notified that the publisher will no longer publish new ones. * * @param notificationIdentifier The identifier of the {@link Notification}s the publisher creates. */ void removePublisher(String notificationIdentifier); /** * Sends a new {@link Notification}. * * @param notificationId The identifier of the notification to send. * @param notificationBody The body of the notification to send. * @param <T> any {@link Object} that extends {@link Serializable}. */ <T extends Serializable> void send(String notificationId, T notificationBody); /** * Registers the specified {@link NotificationSubscriber} to receive {@link Notification}s represented by the given identifier. * * @param notificationId The identifier of the {@link Notification}s to receive. * @param subscriber The {@link NotificationSubscriber} for this {@link Notification}. * @param publisherPlatform The {@link InstanceNodeSessionId} of the corresponding publisher. <code>null</code> if local. * @return the number of the last notification, which was sent and missed by the new {@link NotificationSubscriber} sorted by the * matching notification identifier. * * @throws RemoteOperationException if the remote subscription fails */ Map<String, Long> subscribe(String notificationId, NotificationSubscriber subscriber, ResolvableNodeId publisherPlatform) throws RemoteOperationException; /** * Unregisters the specified {@link NotificationSubscriber} so it will no longer receive {@link Notification}s represented by the given * identifier. * * @param notificationId The identifier of the notification associated with the corresponding publisher. * @param subscriber The {@link NotificationSubscriber} to remove. * @param publishPlatform The {@link InstanceNodeSessionId} of the corresponding publisher. <code>null</code> if local. * * @throws RemoteOperationException if the remote subscription cancellation fails */ void unsubscribe(String notificationId, NotificationSubscriber subscriber, ResolvableNodeId publishPlatform) throws RemoteOperationException; /** * Returns all stored {@link Notification}s represented by the given notification identifier. * * @param notificationId The notification identifier which represents the {@link Notification} to get. * @param publishPlatform The {@link InstanceNodeSessionId} of the corresponding publisher. <code>null</code> if local. * @return the {@link Notification}s sorted by the matching notification identifier. * @throws RemoteOperationException TODO */ Map<String, List<Notification>> getNotifications(String notificationId, ResolvableNodeId publishPlatform) throws RemoteOperationException; /** * Registers the specified {@link NotificationSubscriber} to receive {@link Notification}s represented by the given identifier. * * @param notificationId The identifier of the {@link Notification}s to receive. * @param subscriber The {@link NotificationSubscriber} for this {@link Notification}. <code>null</code> if local. * @return the number of the last notification, which was sent and missed by the new {@link NotificationSubscriber} sorted by the * matching notification identifier. */ Map<InstanceNodeSessionId, Map<String, Long>> subscribeToAllReachableNodes(String notificationId, NotificationSubscriber subscriber); }