/**
* 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 javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlElements;
import org.apache.commons.collections.CollectionUtils;
/**
* Represents stack component dependency information.
*/
public class DependencyInfo {
/**
* The name of the component which is the dependency.
* Specified in the form serviceName/componentName.
*/
private String name;
/**
* The scope of the dependency. Either "cluster" or "host".
*/
private String scope;
/**
* Service name of the dependency.
*/
private String serviceName;
/**
* Component name of the dependency.
*/
private String componentName;
/**
* Auto-deployment information for the dependency.
* If auto-deployment is enabled for the dependency, the dependency is
* automatically deployed if it is not specified in the provided topology.
*/
@XmlElement(name="auto-deploy")
private AutoDeployInfo m_autoDeploy;
/**
* Conditions for Component dependency to other components.
*/
private List<DependencyConditionInfo> dependencyConditions = new ArrayList<>();
/**
* Setter for name property.
*
* @param name the name of the component which is the dependency
* in the form serviceName/componentName
*/
public void setName(String name) {
if (! name.contains("/")) {
throw new IllegalArgumentException("Invalid dependency name specified in stack. " +
"Expected form is: serviceName/componentName");
}
this.name = name;
int idx = name.indexOf('/');
serviceName = name.substring(0, idx);
componentName = name.substring(idx + 1);
}
/**
* Getter for name property.
*
* @return the name of the component which is the dependency
* in the form serviceName/componentName
*/
public String getName() {
return name;
}
/**
* Setter for scope property.
*
* @param scope the scope of the dependency. Either "cluster" or "host".
*/
public void setScope(String scope) {
this.scope = scope;
}
/**
* Getter for scope property.
*
* @return either "cluster" or "host".
*/
public String getScope() {
return scope;
}
/**
* Setter for auto-deploy property.
*
* @param autoDeploy auto-deploy information
*/
public void setAutoDeploy(AutoDeployInfo autoDeploy) {
m_autoDeploy = autoDeploy;
}
/**
* Getter for the auto-deploy property.
*
* @return auto-deploy information
*/
public AutoDeployInfo getAutoDeploy() {
return m_autoDeploy;
}
/**
* Get the component name of the dependency.
*
* @return dependency component name
*/
public String getComponentName() {
return componentName;
}
/**
* Get the service name associated with the dependency component.
*
* @return associated service name
*/
public String getServiceName() {
return serviceName;
}
/**
* Get the dependencyConditions list
*
* @return dependencyConditions
*/
@XmlElementWrapper(name="conditions")
@XmlElements(@XmlElement(name="condition"))
public List<DependencyConditionInfo> getDependencyConditions() {
return dependencyConditions;
}
/**
* Set dependencyConditions
*
* @param dependencyConditions
*/
public void setDependencyConditions(List<DependencyConditionInfo> dependencyConditions) {
this.dependencyConditions = dependencyConditions;
}
/**
* Confirms if dependency have any condition or not
* @return true if dependencies are based on a condition
*/
public boolean hasDependencyConditions(){
return !CollectionUtils.isEmpty(dependencyConditions);
}
@Override
public String toString() {
return "DependencyInfo[name=" + getName() +
", scope=" + getScope() +
", auto-deploy=" + m_autoDeploy.isEnabled() +
"]";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DependencyInfo that = (DependencyInfo) o;
if (componentName != null ? !componentName.equals(that.componentName) : that.componentName != null) return false;
if (m_autoDeploy != null ? !m_autoDeploy.equals(that.m_autoDeploy) : that.m_autoDeploy != null) return false;
if (name != null ? !name.equals(that.name) : that.name != null) return false;
if (scope != null ? !scope.equals(that.scope) : that.scope != null) return false;
if (serviceName != null ? !serviceName.equals(that.serviceName) : that.serviceName != null) return false;
return true;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (scope != null ? scope.hashCode() : 0);
result = 31 * result + (serviceName != null ? serviceName.hashCode() : 0);
result = 31 * result + (componentName != null ? componentName.hashCode() : 0);
result = 31 * result + (m_autoDeploy != null ? m_autoDeploy.hashCode() : 0);
return result;
}
}