/** * 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.ambari.server.api.services.stackadvisor.recommendations; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorResponse; import org.apache.ambari.server.state.ValueAttributesInfo; import org.codehaus.jackson.annotate.JsonProperty; import org.codehaus.jackson.map.annotate.JsonSerialize; /** * Recommendation response POJO. */ public class RecommendationResponse extends StackAdvisorResponse { @JsonProperty private Set<String> hosts; @JsonProperty private Set<String> services; @JsonProperty private Recommendation recommendations; public Set<String> getHosts() { return hosts; } public void setHosts(Set<String> hosts) { this.hosts = hosts; } public Set<String> getServices() { return services; } public void setServices(Set<String> services) { this.services = services; } public Recommendation getRecommendations() { return recommendations; } public void setRecommendations(Recommendation recommendations) { this.recommendations = recommendations; } public static class Recommendation { @JsonProperty private Blueprint blueprint; @JsonProperty("blueprint_cluster_binding") private BlueprintClusterBinding blueprintClusterBinding; @JsonProperty("config-groups") @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) private Set<ConfigGroup> configGroups; public Blueprint getBlueprint() { return blueprint; } public void setBlueprint(Blueprint blueprint) { this.blueprint = blueprint; } public BlueprintClusterBinding getBlueprintClusterBinding() { return blueprintClusterBinding; } public void setBlueprintClusterBinding(BlueprintClusterBinding blueprintClusterBinding) { this.blueprintClusterBinding = blueprintClusterBinding; } public Set<ConfigGroup> getConfigGroups() { return configGroups; } public void setConfigGroups(Set<ConfigGroup> configGroups) { this.configGroups = configGroups; } } public static class Blueprint { @JsonProperty private Map<String, BlueprintConfigurations> configurations; @JsonProperty("host_groups") private Set<HostGroup> hostGroups; public Map<String, BlueprintConfigurations> getConfigurations() { return configurations; } public void setConfigurations(Map<String, BlueprintConfigurations> configurations) { this.configurations = configurations; } public Set<HostGroup> getHostGroups() { return hostGroups; } public void setHostGroups(Set<HostGroup> hostGroups) { this.hostGroups = hostGroups; } } public static class BlueprintConfigurations { @JsonProperty private final Map<String, String> properties = new HashMap<>(); @JsonProperty("property_attributes") @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) private Map<String, ValueAttributesInfo> propertyAttributes = null; public BlueprintConfigurations() { } public Map<String, String> getProperties() { return properties; } /** * Returns a map of properties for this configuration. * <p/> * It is expected that a non-null value is always returned. * * @param properties a map of properties, always non-null */ public void setProperties(Map<String, String> properties) { this.properties.clear(); if(properties != null) { this.properties.putAll(properties); } } public Map<String, ValueAttributesInfo> getPropertyAttributes() { return propertyAttributes; } public void setPropertyAttributes(Map<String, ValueAttributesInfo> propertyAttributes) { this.propertyAttributes = propertyAttributes; } } public static class HostGroup { @JsonProperty private String name; @JsonProperty private Set<Map<String, String>> components; public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Map<String, String>> getComponents() { return components; } public void setComponents(Set<Map<String, String>> components) { this.components = components; } } public static class BlueprintClusterBinding { @JsonProperty("host_groups") private Set<BindingHostGroup> hostGroups; public Set<BindingHostGroup> getHostGroups() { return hostGroups; } public void setHostGroups(Set<BindingHostGroup> hostGroups) { this.hostGroups = hostGroups; } } public static class BindingHostGroup { @JsonProperty private String name; @JsonProperty private Set<Map<String, String>> hosts; public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Map<String, String>> getHosts() { return hosts; } public void setHosts(Set<Map<String, String>> hosts) { this.hosts = hosts; } } public static class ConfigGroup { @JsonProperty private List<String> hosts; @JsonProperty @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) private Map<String, BlueprintConfigurations> configurations = new HashMap<>(); @JsonProperty("dependent_configurations") @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) private Map<String, BlueprintConfigurations> dependentConfigurations = new HashMap<>(); public ConfigGroup() { } public List<String> getHosts() { return hosts; } public void setHosts(List<String> hosts) { this.hosts = hosts; } public Map<String, BlueprintConfigurations> getConfigurations() { return configurations; } public void setConfigurations(Map<String, BlueprintConfigurations> configurations) { this.configurations = configurations; } public Map<String, BlueprintConfigurations> getDependentConfigurations() { return dependentConfigurations; } public void setDependentConfigurations(Map<String, BlueprintConfigurations> dependentConfigurations) { this.dependentConfigurations = dependentConfigurations; } } }