/*
* 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.state;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
/**
* Class that holds information about a desired config and is suitable for output
* in a web service response.
*/
public class DesiredConfig {
private String tag;
private String serviceName;
private Long version;
private List<HostOverride> hostOverrides = new ArrayList<>();
/**
* Sets the tag
* @param tag the tag
*/
public void setTag(String tag) {
this.tag = tag;
}
/**
* Gets the tag
* @return the tag
*/
@JsonProperty("tag")
public String getTag() {
return tag;
}
/**
* Gets the service name (if any) for the desired config.
* @return the service name
*/
@JsonSerialize(include = Inclusion.NON_NULL)
@JsonProperty("service_name")
public String getServiceName() {
return serviceName;
}
/**
* Sets the service name (if any) for the desired config.
* @param name the service name
*/
public void setServiceName(String name) {
serviceName = name;
}
/**
* Sets the host overrides for the desired config. Cluster-based desired configs only.
* @param overrides the host names
*/
public void setHostOverrides(List<HostOverride> overrides) {
hostOverrides = overrides;
}
/**
* Gets the host overrides for the desired config. Cluster-based desired configs only.
* @return the host names that override the desired config
*/
@JsonSerialize(include = Inclusion.NON_EMPTY)
@JsonProperty("host_overrides")
public List<HostOverride> getHostOverrides() {
return hostOverrides;
}
@JsonProperty("version")
public Long getVersion() {
return version;
}
public void setVersion(Long version) {
this.version = version;
}
/**
* Used to represent an override on a host.
*/
//TODO include changes for config versions
public final static class HostOverride {
private final String hostName;
private final String versionOverrideTag;
/**
* @param name the host name
* @param tag the config tag
*/
public HostOverride(String name, String tag) {
hostName = name;
versionOverrideTag = tag;
}
/**
* @return the override host name
*/
@JsonProperty("host_name")
public String getName() {
return hostName;
}
/**
* @return the override tag tag
*/
@JsonProperty("tag")
public String getVersionTag() {
return versionOverrideTag;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
HostOverride that = (HostOverride) o;
return new EqualsBuilder()
.append(hostName, that.hostName)
.append(versionOverrideTag, that.versionOverrideTag)
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder(17, 37)
.append(hostName)
.append(versionOverrideTag)
.toHashCode();
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{");
sb.append("tag=").append(tag);
if (null != serviceName)
sb.append(", service=").append(serviceName);
if (null != hostOverrides && hostOverrides.size() > 0) {
sb.append(", hosts=[");
int i = 0;
for (DesiredConfig.HostOverride h : hostOverrides)
{
if (i++ != 0)
sb.append(",");
sb.append(h.getName()).append(':').append(h.getVersionTag());
}
sb.append(']');
}
sb.append("}");
return sb.toString();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DesiredConfig that = (DesiredConfig) o;
return new EqualsBuilder()
.append(tag, that.tag)
.append(serviceName, that.serviceName)
.append(version, that.version)
.append(hostOverrides, that.hostOverrides)
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder(17, 37)
.append(tag)
.append(serviceName)
.append(version)
.append(hostOverrides)
.toHashCode();
}
}