package com.twilio.taskrouter;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.MoreObjects;
import java.io.IOException;
import java.util.List;
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Workflow extends TaskRouterResource {
@JsonProperty("task_routing")
private final TaskRouting taskRouting;
/**
* Define a workflow.
*
* @param workflowRules list of workflow rules (in order they will be processed)
* @param defaultTarget default filter
*/
public Workflow(List<WorkflowRule> workflowRules, WorkflowRuleTarget defaultTarget) {
taskRouting = new TaskRouting(workflowRules, defaultTarget);
}
/**
* Constructor for creating based on json.
*
* @param taskRouting Task Routing Configuration
*/
@JsonCreator
private Workflow(@JsonProperty("task_routing") TaskRouting taskRouting) {
this.taskRouting = taskRouting;
}
@JsonIgnore
public List<WorkflowRule> getWorkflowRules() {
return taskRouting.getWorkflowRules();
}
@JsonIgnore
public WorkflowRuleTarget getDefaultTarget() {
return taskRouting.getDefaultTarget();
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("taskRouting", taskRouting)
.toString();
}
/**
* Converts a JSON workflow configuration to a workflow object.
*
* @param json JSON for workflow
* @return a workflow rule target object
* @throws IOException if unable to create object
*/
public static Workflow fromJson(String json) throws IOException {
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(json, Workflow.class);
}
}