/* * 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.Date; import de.rcenvironment.core.communication.common.InstanceNodeSessionId; import de.rcenvironment.core.utils.common.ComparatorUtils; /** * A notification header is associated with a notification. It contains meta information such as the * the identifier, the edition, the creation date and platform where the notification was created. * * @author Andre Nurzenski * @author Doreen Seider * @author Robert Mischke */ public class NotificationHeader implements Comparable<NotificationHeader>, Serializable { private static final long serialVersionUID = -7059564485221275362L; private long number; private Date timestamp = null; private String notificationId = null; private InstanceNodeSessionId publishPlatform = null; /** * Creates a new {@link NotificationHeader} with the given information. * * @param notificationIdentifier The identifier of the associated notification. * @param publisherPlatform The platform where the associated notification was created. * @param edition The edition of the associated notification. It is increased with each new * notification and is required to compare two {@link NotificationHeader}. */ public NotificationHeader(String notificationIdentifier, long edition, InstanceNodeSessionId publisherPlatform) { timestamp = new Date(); notificationId = notificationIdentifier; number = edition; publishPlatform = publisherPlatform; } /** * Returns the creation date of the associated notification. * * @return the timestamp as a {@link Date}. */ public Date getTimestamp() { return timestamp; } /** * Returns the edition. It is increased with each new notification and is required to compare * two headers. * * @return the counter. */ public long getNumber() { return number; } /** * Returns the identifier of the associated notification. * * @return the identifier. */ public String getNotificationIdentifier() { return notificationId; } /** * Returns the platform where the associated notification was created. * * @return the platform. */ public InstanceNodeSessionId getPublishPlatform() { return publishPlatform; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(notificationId); builder.append("["); builder.append(number); builder.append("]"); builder.append("@"); builder.append(publishPlatform); builder.append(" - "); builder.append(timestamp); return new String(builder); } @Override public int compareTo(NotificationHeader header) { Date otherTimestamp = header.getTimestamp(); int result = ComparatorUtils.compareLong(timestamp.getTime(), otherTimestamp.getTime()); if (result != 0) { return result; } return ComparatorUtils.compareLong(number, header.getNumber()); } @Override public boolean equals(Object object) { return toString().equals(object.toString()); } @Override public int hashCode() { return toString().hashCode(); } }