package org.societies.integration.test.bit.userfeedback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.societies.api.internal.schema.useragent.feedback.UserFeedbackPrivacyNegotiationEvent;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Date;
public class NotificationQueueItem implements Serializable, Comparable<NotificationQueueItem> {
protected static final Logger log = LoggerFactory.getLogger(NotificationQueueItem.class);
public static final String TYPE_PRIVACY_POLICY_NEGOTIATION = "PPN";
public static final String TYPE_TIMED_ABORT = "TIMED_ABORT";
public static final String TYPE_ACK_NACK = "ACK_NACK";
public static final String TYPE_SELECT_ONE = "SELECT_ONE";
public static final String TYPE_SELECT_MANY = "SELECT_MANY";
public static final String TYPE_NOTIFICATION = "NOTIFICATION";
public static final String TYPE_UNKNOWN = "UNKNOWN";
public static NotificationQueueItem forPrivacyPolicyNotification(String itemId, UserFeedbackPrivacyNegotiationEvent payload) {
return new NotificationQueueItem(itemId, payload);
}
public static NotificationQueueItem forTimedAbort(String itemId, String title, Date timeout) {
return new NotificationQueueItem(itemId, title, timeout);
}
public static NotificationQueueItem forAckNack(String itemId, String title, String[] options) {
return new NotificationQueueItem(itemId, TYPE_ACK_NACK, title, options);
}
public static NotificationQueueItem forSelectOne(String itemId, String title, String[] options) {
return new NotificationQueueItem(itemId, TYPE_SELECT_ONE, title, options);
}
public static NotificationQueueItem forSelectMany(String itemId, String title, String[] options) {
return new NotificationQueueItem(itemId, TYPE_SELECT_MANY, title, options);
}
public static NotificationQueueItem forNotification(String itemId, String title) {
return new NotificationQueueItem(itemId, TYPE_NOTIFICATION, title, null);
}
private final Date arrivalDate;
private final UserFeedbackPrivacyNegotiationEvent ufPPN;
private final String title;
private final String itemId;
private final String type;
private final String[] options;
private final Date timeoutTime;
private String result;
private String[] results;
private boolean complete;
private NotificationQueueItem(String itemId, UserFeedbackPrivacyNegotiationEvent payload) {
this.arrivalDate = new Date();
this.itemId = itemId;
this.ufPPN = payload;
this.options = new String[0];
this.type = TYPE_PRIVACY_POLICY_NEGOTIATION;
this.title = payload.getNegotiationDetails().getRequestor().getRequestorId();
this.timeoutTime = null;
this.complete = false;
}
private NotificationQueueItem(String itemId, String title, Date timeout) {
this.arrivalDate = new Date();
this.itemId = itemId;
this.ufPPN = null;
this.options = new String[0];
this.type = TYPE_TIMED_ABORT;
this.title = title;
this.timeoutTime = timeout;
this.complete = false;
}
private NotificationQueueItem(String itemId, String type, String title, String[] options) {
this.arrivalDate = new Date();
this.itemId = itemId;
this.ufPPN = null;
this.options = options;
this.type = type;
this.title = title;
this.timeoutTime = null;
this.complete = false;
}
public Date getArrivalDate() {
return arrivalDate;
}
public Object getPrivacyPolicyNegotiation() {
return ufPPN;
}
public String getItemId() {
return itemId;
}
public String getTitle() {
return title;
}
public String getInfoLink() {
if (ufPPN != null) {
return "privacy_policy_negotiation.xhtml?id=" + itemId;
}
return "";
}
public String getType() {
return type;
}
public String[] getOptions() {
return options;
}
public Date getTimeoutTime() {
return timeoutTime;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String[] getResults() {
return results;
}
public void setResults(String[] results) {
this.results = results;
}
public String getFriendlyTimeLeft() {
if (timeoutTime == null)
return "forever";
long seconds = (timeoutTime.getTime() - new Date().getTime()) / 1000L;
if (seconds < 0L)
seconds = 0;
// hours:minutes
if (seconds > 3600) {
long minutes = ((seconds % 3600L) - (seconds % 60L)) / 60L;
long hours = (seconds - (seconds % 3600L)) / 3600L;
return hours + "hrs, " + minutes + "mins";
}
// minutes:seconds
if (seconds > 60) {
long minutes = (seconds - (seconds % 60L)) / 60L;
return minutes + "mins, " + (seconds % 60L) + "sec";
}
// seconds only
return seconds + "sec";
}
public void setComplete(boolean complete) {
this.complete = complete;
}
public boolean isComplete() {
return complete;
}
@Override
public int compareTo(NotificationQueueItem that) {
return this.arrivalDate.compareTo(that.arrivalDate);
}
}