/*
* 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.controller;
import java.util.List;
import org.apache.ambari.server.StaticallyInject;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.entities.ClusterEntity;
import org.apache.ambari.server.orm.entities.ServiceConfigEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.state.StackId;
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 com.google.inject.Inject;
@StaticallyInject
public class ServiceConfigVersionResponse {
/**
* Name used for default config group.
*/
public static final String DEFAULT_CONFIG_GROUP_NAME = "Default";
/**
* Name used for config groups that were deleted in the service config version response.
*/
public static final String DELETED_CONFIG_GROUP_NAME = "Deleted";
@JsonProperty("cluster_name")
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
private final String clusterName;
@JsonProperty("service_name")
private final String serviceName;
@JsonProperty("service_config_version")
private final Long version;
@JsonProperty("createtime")
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
private final Long createTime;
@JsonProperty("group_id")
private final Long groupId;
@JsonProperty("group_name")
private final String groupName;
@JsonProperty("user")
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
private final String userName;
@JsonProperty("service_config_version_note")
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
private final String note;
@JsonProperty("stack_id")
private String stackId;
@JsonProperty("is_current")
private Boolean isCurrent = Boolean.FALSE;
@JsonProperty("is_cluster_compatible")
private final Boolean isCompatibleWithCurrentStack;
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
private List<ConfigurationResponse> configurations;
@JsonProperty("hosts")
private final List<String> hosts;
@Inject
private static HostDAO hostDAO;
/**
* Constructor.
*
* @param serviceConfigEntity
* @param configGroupName
*/
public ServiceConfigVersionResponse(ServiceConfigEntity serviceConfigEntity,
String configGroupName) {
super();
ClusterEntity clusterEntity = serviceConfigEntity.getClusterEntity();
clusterName = clusterEntity.getClusterName();
serviceName = serviceConfigEntity.getServiceName();
version = serviceConfigEntity.getVersion();
userName = serviceConfigEntity.getUser();
createTime = serviceConfigEntity.getCreateTimestamp();
note = serviceConfigEntity.getNote();
groupId = (null != serviceConfigEntity.getGroupId() ? serviceConfigEntity.getGroupId(): -1L);
groupName = configGroupName;
hosts = hostDAO.getHostNamesByHostIds(serviceConfigEntity.getHostIds());
StackEntity serviceConfigStackEntity = serviceConfigEntity.getStack();
StackEntity clusterStackEntity = clusterEntity.getClusterStateEntity().getCurrentStack();
isCompatibleWithCurrentStack = clusterStackEntity.equals(serviceConfigStackEntity);
stackId = new StackId(serviceConfigStackEntity).getStackId();
}
public String getServiceName() {
return serviceName;
}
public Long getVersion() {
return version;
}
public Long getCreateTime() {
return createTime;
}
public String getUserName() {
return userName;
}
public String getClusterName() {
return clusterName;
}
public List<ConfigurationResponse> getConfigurations() {
return configurations;
}
public void setConfigurations(List<ConfigurationResponse> configurations) {
this.configurations = configurations;
}
public String getNote() {
return note;
}
public List<String> getHosts() {
return hosts;
}
public String getGroupName() {
return groupName;
}
public Long getGroupId() {
return groupId;
}
/**
* Gets the Stack ID that this configuration is scoped for.
*
* @return
*/
public String getStackId() {
return stackId;
}
public Boolean getIsCurrent() {
return isCurrent;
}
public void setIsCurrent(Boolean isCurrent) {
this.isCurrent = isCurrent;
}
/**
* Gets whether this service configuration is compatible with the cluster's
* current stack version.
*
* @return {@code true} if compatible, {@code false} otherwise.
*/
public Boolean isCompatibleWithCurrentStack() {
return isCompatibleWithCurrentStack;
}
@Override
public final boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ServiceConfigVersionResponse)) return false;
ServiceConfigVersionResponse that = (ServiceConfigVersionResponse) o;
return new EqualsBuilder()
.append(clusterName, that.clusterName)
.append(serviceName, that.serviceName)
.append(version, that.version)
.append(createTime, that.createTime)
.append(groupId, that.groupId)
.append(groupName, that.groupName)
.append(userName, that.userName)
.append(note, that.note)
.append(stackId, that.stackId)
.append(isCurrent, that.isCurrent)
.append(isCompatibleWithCurrentStack, that.isCompatibleWithCurrentStack)
.append(configurations, that.configurations)
.append(hosts, that.hosts)
.isEquals();
}
@Override
public final int hashCode() {
return new HashCodeBuilder(17, 37)
.append(clusterName)
.append(serviceName)
.append(version)
.append(createTime)
.append(groupId)
.append(groupName)
.append(userName)
.append(note)
.append(stackId)
.append(isCurrent)
.append(isCompatibleWithCurrentStack)
.append(configurations)
.append(hosts)
.toHashCode();
}
}