package io.lumify.sql.model.notification;
import io.lumify.core.model.notification.ExpirationAge;
import io.lumify.core.model.notification.ExpirationAgeUnit;
import io.lumify.core.model.notification.UserNotification;
import io.lumify.core.model.notification.UserNotificationRepository;
import org.json.JSONObject;
import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name = "user_notification")
public class SqlUserNotification implements UserNotification {
private String id;
private String userId;
private String title;
private String message;
private Date sentDate;
private int expirationAgeAmount;
private String expirationAgeUnit;
private boolean markedRead;
private String actionEvent;
private String actionPayload;
public void setId(String id) {
this.id = id;
}
@Override
@Id
@Column(name = "id", unique = true)
public String getId() {
return id;
}
@Override
public void setUserId(String userId) {
this.userId = userId;
}
@Override
@Column(name = "user_id")
public String getUserId() {
return userId;
}
@Override
public void setTitle(String title) {
this.title = title;
}
@Override
@Column(name = "title", length = 1024)
public String getTitle() {
return title;
}
@Override
public void setMessage(String message) {
this.message = message;
}
@Override
@Column(name = "message", length = 4000)
public String getMessage() {
return message;
}
@Override
public void setSentDate(Date sentDate) {
if (sentDate == null) {
sentDate = new Date();
}
this.sentDate = sentDate;
}
@Override
@Column(name = "sent_date")
public Date getSentDate() {
return sentDate;
}
public void setExpirationAgeAmount(int expirationAgeAmount) {
this.expirationAgeAmount = expirationAgeAmount;
}
@Column(name = "expiration_age_amount")
public int getExpirationAgeAmount() {
return expirationAgeAmount;
}
public void setExpirationAgeUnit(String expirationAgeUnit) {
this.expirationAgeUnit = expirationAgeUnit;
}
@Column(name = "expiration_age_unit")
public String getExpirationAgeUnit() {
return expirationAgeUnit;
}
@Override
public void setExpirationAge(ExpirationAge expirationAge) {
setExpirationAgeAmount(expirationAge.getAmount());
setExpirationAgeUnit(expirationAge.getExpirationAgeUnit().toString());
}
@Override
@Transient
public ExpirationAge getExpirationAge() {
return new ExpirationAge(expirationAgeAmount, ExpirationAgeUnit.valueOf(expirationAgeUnit));
}
@Override
public void setMarkedRead(Boolean markedRead) {
this.markedRead = markedRead;
}
@Override
@Column(name = "marked_read")
public Boolean isMarkedRead() {
return markedRead;
}
@Column(name = "action_payload", length = 4000)
private String getActionPayloadString() {
return actionPayload;
}
public void setActionPayloadString(String actionPayload) {
this.actionPayload = actionPayload;
}
@Override
public void setActionEvent(String actionEvent) {
this.actionEvent = actionEvent;
}
@Override
@Column(name = "action_event")
public String getActionEvent() {
return this.actionEvent;
}
@Override
public void setActionPayload(JSONObject jsonData) {
this.setActionPayloadString(jsonData.toString());
}
@Transient
@Override
public JSONObject getActionPayload() {
String payload = getActionPayloadString();
if (payload != null) {
return new JSONObject(payload);
}
return null;
}
@Transient
@Override
public JSONObject toJSONObject() {
return UserNotificationRepository.toJSONObject(this);
}
@Transient
@Override
public boolean isActive() {
return UserNotificationRepository.isActive(this);
}
}