package io.lumify.web.routes.notification; import com.google.inject.Inject; import io.lumify.core.model.notification.SystemNotification; import io.lumify.core.model.notification.SystemNotificationRepository; import io.lumify.core.model.notification.SystemNotificationSeverity; import io.lumify.core.model.user.UserRepository; import io.lumify.core.model.workQueue.WorkQueueRepository; import io.lumify.core.model.workspace.WorkspaceRepository; import io.lumify.miniweb.HandlerChain; import io.lumify.web.BaseRequestHandler; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public class SystemNotificationSave extends BaseRequestHandler { private final SystemNotificationRepository systemNotificationRepository; private final WorkQueueRepository workQueueRepository; private static final String ID_PARAMETER_NAME = "notificationId"; private static final String SEVERITY_PARAMETER_NAME = "severity"; private static final String TITLE_PARAMETER_NAME = "title"; private static final String MESSAGE_PARAMETER_NAME = "message"; private static final String START_DATE_PARAMETER_NAME = "startDate"; private static final String EXTERNAL_URL_PARAMETER_NAME = "externalUrl"; private static final String END_DATE_PARAMETER_NAME = "endDate"; private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm 'UTC'"; @Inject public SystemNotificationSave( final SystemNotificationRepository systemNotificationRepository, final WorkQueueRepository workQueueRepository, final UserRepository userRepository, final WorkspaceRepository workspaceRepository, final io.lumify.core.config.Configuration configuration ) { super(userRepository, workspaceRepository, configuration); this.systemNotificationRepository = systemNotificationRepository; this.workQueueRepository = workQueueRepository; } @Override public void handle(HttpServletRequest request, HttpServletResponse response, HandlerChain chain) throws Exception { String notificationId = getOptionalParameter(request, ID_PARAMETER_NAME); String severityParameter = getRequiredParameter(request, SEVERITY_PARAMETER_NAME); SystemNotificationSeverity severity = SystemNotificationSeverity.valueOf(severityParameter); String title = getRequiredParameter(request, TITLE_PARAMETER_NAME); String message = getRequiredParameter(request, MESSAGE_PARAMETER_NAME); String startDateParameter = getRequiredParameter(request, START_DATE_PARAMETER_NAME); SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); Date startDate = sdf.parse(startDateParameter); String endDateParameter = getOptionalParameter(request, END_DATE_PARAMETER_NAME); Date endDate = endDateParameter != null ? sdf.parse(endDateParameter) : null; String externalUrl = getOptionalParameter(request, EXTERNAL_URL_PARAMETER_NAME); SystemNotification notification; if (notificationId == null) { notification = systemNotificationRepository.createNotification(severity, title, message, externalUrl, startDate, endDate); } else { notification = systemNotificationRepository.getNotification(notificationId, getUser(request)); notification.setSeverity(severity); notification.setTitle(title); notification.setMessage(message); notification.setStartDate(startDate); notification.setEndDate(endDate); if (externalUrl != null) { notification.setExternalUrl(externalUrl); } notification = systemNotificationRepository.updateNotification(notification); } if (notification.isActive()) { workQueueRepository.pushSystemNotification(notification); } else { workQueueRepository.pushSystemNotificationUpdate(notification); } respondWithSuccessJson(response); } }