package eu.europeana.cloud.service.dps.storm;
import eu.europeana.cloud.common.model.dps.InformationTypes;
import eu.europeana.cloud.common.model.dps.States;
import eu.europeana.cloud.common.model.dps.TaskState;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Tuple for notifications.
*
* @author Pavel Kefurt <Pavel.Kefurt@gmail.com>
*/
public class NotificationTuple {
public static final String taskIdFieldName = "TASK_ID";
public static final String informationTypeFieldName = "INFORMATION_TYPE";
public static final String parametersFieldName = "PARAMETERS";
private final long taskId;
private final InformationTypes informationType;
private final Map<String, Object> parameters;
protected NotificationTuple(long taskId, InformationTypes informationType, Map<String, Object> parameters) {
this.taskId = taskId;
this.informationType = informationType;
this.parameters = parameters;
}
public static NotificationTuple prepareUpdateTask(long taskId, String info, TaskState state, Date startTime) {
Map<String, Object> parameters = new HashMap<>();
parameters.put(NotificationParameterKeys.TASK_STATE, state.toString());
parameters.put(NotificationParameterKeys.START_TIME, startTime);
parameters.put(NotificationParameterKeys.INFO, info);
return new NotificationTuple(taskId, InformationTypes.UPDATE_TASK, parameters);
}
public static NotificationTuple prepareEndTask(long taskId, String info, TaskState state, Date finishTime) {
Map<String, Object> parameters = new HashMap<>();
parameters.put(NotificationParameterKeys.TASK_STATE, state.toString());
parameters.put(NotificationParameterKeys.FINISH_TIME, finishTime);
parameters.put(NotificationParameterKeys.INFO, info);
return new NotificationTuple(taskId, InformationTypes.END_TASK, parameters);
}
public static NotificationTuple prepareNotification(long taskId, String resource,
States state, String text, String additionalInformations) {
Map<String, Object> parameters = new HashMap<>();
parameters.put(NotificationParameterKeys.RESOURCE, resource);
parameters.put(NotificationParameterKeys.STATE, state.toString());
parameters.put(NotificationParameterKeys.INFO_TEXT, text);
parameters.put(NotificationParameterKeys.ADDITIONAL_INFORMATIONS, additionalInformations);
return new NotificationTuple(taskId, InformationTypes.NOTIFICATION, parameters);
}
public static NotificationTuple prepareNotification(long taskId, String resource,
States state, String text, String additionalInformations, String resultResource) {
Map<String, Object> parameters = new HashMap<>();
parameters.put(NotificationParameterKeys.RESOURCE, resource);
parameters.put(NotificationParameterKeys.STATE, state.toString());
parameters.put(NotificationParameterKeys.INFO_TEXT, text);
parameters.put(NotificationParameterKeys.ADDITIONAL_INFORMATIONS, additionalInformations);
parameters.put(NotificationParameterKeys.RESULT_RESOURCE, resultResource);
return new NotificationTuple(taskId, InformationTypes.NOTIFICATION, parameters);
}
public long getTaskId() {
return taskId;
}
public InformationTypes getInformationType() {
return informationType;
}
public Map<String, Object> getParameters() {
return parameters;
}
public Object getParameter(String key) {
return parameters.get(key);
}
public void addParameter(String key, String value) {
parameters.put(key, value);
}
public static NotificationTuple fromStormTuple(Tuple tuple) {
return new NotificationTuple(tuple.getLongByField(taskIdFieldName),
(InformationTypes) tuple.getValueByField(informationTypeFieldName),
(Map<String, Object>) tuple.getValueByField(parametersFieldName));
}
public Values toStormTuple() {
return new Values(taskId, informationType, parameters);
}
public static Fields getFields() {
return new Fields(taskIdFieldName, informationTypeFieldName, parametersFieldName);
}
}