package com.psddev.cms.db;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.psddev.dari.db.Query;
import com.psddev.dari.db.Record;
import com.psddev.dari.db.State;
import com.psddev.dari.util.MailMessage;
import com.psddev.dari.util.MailProvider;
import com.psddev.dari.util.SmsProvider;
/**
* @deprecated Use {@link Record#beforeSave} or {@link Record#afterSave} instead.
*/
@Deprecated
@ToolUi.IconName("object-notification")
public abstract class Notification extends Record {
private static final Logger LOGGER = LoggerFactory.getLogger(Notification.class);
protected String createMessage(Object object, ToolUser sender, Date date, ToolUser receiver) {
return null;
}
protected MailMessage createEmail(Object object, ToolUser sender, Date date, ToolUser receiver) {
String message = createMessage(object, sender, date, receiver);
if (message == null) {
return null;
} else {
return new MailMessage().
subject("[CMS " + getState().getType().getLabel() + "] " + State.getInstance(object).getLabel()).
bodyPlain(message);
}
}
protected String createSms(Object object, ToolUser sender, Date date, ToolUser receiver) {
return createMessage(object, sender, date, receiver);
}
public void processNotification(Object object, ToolUser sender, Date date) {
for (ToolUser receiver : Query.
from(ToolUser.class).
where("notifications = ?", this).
iterable(0)) {
try {
for (NotificationMethod method : receiver.getNotifyVia()) {
switch (method) {
case EMAIL :
MailMessage email = createEmail(object, sender, date, receiver);
email.from("support@perfectsensedigital.com");
email.to(receiver.getEmail());
MailProvider.Static.getDefault().send(email);
break;
case SMS :
SmsProvider.Static.getDefault().send(
null,
receiver.getPhoneNumber(),
createSms(object, sender, date, receiver));
break;
default :
throw new UnsupportedOperationException(String.format(
"Unknown notification method! [%s]", method));
}
}
} catch (RuntimeException error) {
LOGGER.warn("Can't send notification!", error);
}
}
}
}