/*
* 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.Map;
import java.util.SortedSet;
import de.rcenvironment.core.notification.api.RemotableNotificationService;
/**
* This interface describes methods provided by the notification service. These methods allow to publish new notifications, subscribe for
* certain notifications and fetch these notifications.
*
* @author Andre Nurzenski
* @author Doreen Seider
*/
// TODO rename to match new 7.0.0 naming conventions
public interface NotificationService extends RemotableNotificationService {
/** Constant representing that no notification was missed. */
int NO_MISSED = -1;
/**
* Sets the buffer size for the given notification represented by its notification identifier.
*
* @param notificationId The identifier of the {@link Notification}s to set the buffer size for.
* @param bufferSize The buffer size to set.
*/
void setBufferSize(String notificationId, 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 notificationId The identifier of the {@link Notification}s the publisher creates.
*/
void removePublisher(String notificationId);
/**
* Sends a new {@link Notification}. If it is the first notification sent under the given identifier a new publisher will be registered
* internally.
*
* @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);
/**
* Returns the {@link NotificationHeader} of all stored {@link Notification}s represented by the given notification identifier.
*
* @param notificationId The notification identifier which represents the {@link Notification} to get the {@link NotificationHeader}
* for.
* @return the {@link NotificationHeader}.
*/
Map<String, SortedSet<NotificationHeader>> getNotificationHeaders(String notificationId);
/**
* Returns the {@link Notification} belonging to the given {@link NotificationHeader}.
*
* @param header The {@link NotificationHeader} of the {@link Notification} to get.
* @return the {@link Notification}.
*/
Notification getNotification(NotificationHeader header);
}