/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.component.salesforce.api.dto.approval; import java.io.Serializable; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; /** * Holds approvals resource data. * * @see <a href="https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_process_approvals.htm"> * https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_process_approvals.htm</a> */ public final class Approvals implements Serializable { /** * Information about approval tied to specific Salesforce object. */ public static final class Info implements Serializable { private static final long serialVersionUID = 1L; private final String description; private final String id; private final String name; private final String object; private final int sortOrder; @JsonCreator Info(@JsonProperty("id") final String id, @JsonProperty("description") final String description, @JsonProperty("name") final String name, @JsonProperty("object") final String object, @JsonProperty("sortOrder") final int sortOrder) { this.description = description; this.id = id; this.name = name; this.object = object; this.sortOrder = sortOrder; } public String getDescription() { return description; } public String getId() { return id; } public String getName() { return name; } public String getObject() { return object; } public int getSortOrder() { return sortOrder; } @Override public String toString() { final StringBuilder buildy = new StringBuilder(); buildy.append("Id: ").append(id); buildy.append(", Name: ").append(name); buildy.append(", Object: ").append(object); buildy.append(", Description: ").append(description); buildy.append(", SortOrder: ").append(sortOrder); return buildy.toString(); } } private static final long serialVersionUID = 1L; private final Map<String, List<Info>> approvals; @JsonCreator Approvals(@JsonProperty("approvals") final Map<String, List<Info>> approvals) { this.approvals = Optional.ofNullable(approvals).orElse(Collections.emptyMap()); } /** * Returns approvals for specific Salesforce object type. * * @param object * type * @return approvals of specified type */ public List<Info> approvalsFor(final String object) { return approvals.getOrDefault(object, Collections.emptyList()); }; /** * Returns approvals by Salesforce object type. You might have approvals for "Account" and "Case" Salesforce * objects, then the resulting map would hold a list of {@link Info} objects keyed by the object type, i.e.: * * <pre> * Approvals approvals = ...; * List<Info> accountApprovals = approvals.getApprovals("Account"); * List<Info> caseApprovals = approvals.getApprovals("Case"); * </pre> * * @return approval info by object type */ public Map<String, List<Info>> getApprovals() { return approvals; } @Override public String toString() { return approvals.toString(); } }