/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.notification; import java.io.Serializable; import de.rcenvironment.core.communication.common.InstanceNodeSessionId; import de.rcenvironment.core.utils.incubator.Assertions; /** * A notification consists of a {@link NotificationHeader} and a body. Access to this fields is * available through the corresponding get()-method. The generic return value for getBody() is * {@link Object}. Subscriber has to be aware of the type of the notification in order to handle the * body correctly. * * @author Doreen Seider */ public class Notification implements Serializable { private static final long serialVersionUID = -1148551583045246749L; private static final String ASSERT_MUST_NOT_BE_NULL = " must not be null!"; private final NotificationHeader header; private final Serializable body; /** * Creates the {@link NotificationHeader} for this notification. * * @param identifier Identifier of the notification. * @param sequenceNumber Edition of the notification. It must be greater or equal than 0. * @param nodeId The platform where the notification was created. * @param body The payload of this notification. */ public <T extends Serializable> Notification(String identifier, long sequenceNumber, InstanceNodeSessionId nodeId, T body) { Assertions.isDefined(identifier, "The notification identifier" + ASSERT_MUST_NOT_BE_NULL); final int sequenceBarrier = -1; Assertions.isBiggerThan(sequenceNumber, sequenceBarrier, "The sequence number for the first notification is 0 - it needs to be increaded with each new one."); Assertions.isDefined(nodeId, "The platform identifier the notification was created on" + ASSERT_MUST_NOT_BE_NULL); header = new NotificationHeader(identifier, sequenceNumber, nodeId); this.body = body; } public NotificationHeader getHeader() { return header; } public Serializable getBody() { return body; } @Override public boolean equals(Object object) { if (object instanceof Notification) { return header.equals(((Notification) object).getHeader()) && body.equals(((Notification) object).getBody()); } else { return false; } } @Override public int hashCode() { return header.hashCode() + body.hashCode(); } @Override public String toString() { return header.toString() + "_" + body.toString(); } }