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 WorkflowRule extends TaskRouterResource { private final String expression; private final String friendlyName; private final List<WorkflowRuleTarget> targets; @JsonCreator private WorkflowRule( @JsonProperty("expression") String expression, @JsonProperty("filter_friendly_name") String filterFriendlyName, @JsonProperty("friendly_name") String friendlyName, @JsonProperty("targets") List<WorkflowRuleTarget> targets ) { this.expression = expression; this.friendlyName = friendlyName != null ? friendlyName : filterFriendlyName; this.targets = targets; } /** * Define a workflow rule. * @param b workflow rule builder * @throws IllegalArgumentException if expression or targets is empty */ private WorkflowRule(Builder b) { this.expression = b.expression; this.friendlyName = b.friendlyName; this.targets = b.targets; } /** * Get the expression for the workflow rule. * @return the expression */ public String getExpression() { return expression; } /** * Get the friendly name / label for the workflow rule. * @return the friendly name */ public String getFriendlyName() { return friendlyName; } /** * Get the list of workflow rule targets for this workflow rule. * @return list of workflow rule targets */ @JsonIgnore public List<WorkflowRuleTarget> getWorkflowRuleTargets() { return targets; } /** * Return a string representation of this workflow rule target. */ @Override public String toString() { return MoreObjects.toStringHelper(this) .add("expression", expression) .add("friendlyName", friendlyName) .add("targets", targets) .toString(); } /** * Converts a JSON workflow configuration to a workflow rule object. * * @param json JSON for workflow rule * @return a workflow rule target object * @throws IOException if unable to create object */ public static WorkflowRule fromJson(String json) throws IOException { ObjectMapper mapper = new ObjectMapper(); return mapper.readValue(json, WorkflowRule.class); } public static class Builder { private String expression; private String friendlyName; private List<WorkflowRuleTarget> targets; public Builder(String expression, List<WorkflowRuleTarget> targets) { this.expression = expression; this.targets = targets; } public Builder friendlyName(String friendlyName) { this.friendlyName = friendlyName; return this; } public WorkflowRule build() { return new WorkflowRule(this); } } }