/**
* 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.ivory;
import java.util.Map;
import java.util.Set;
/**
* Ivory cluster.
*/
public class Cluster {
private final String name;
private final String colo;
private final Set<Interface> interfaces;
private final Set<Location> locations;
private final Map<String, String> properties;
/**
* Construct a cluster.
*
* @param name the cluster name
* @param colo the colo
* @param interfaces the interfaces
* @param locations the locations
* @param properties the properties
*/
public Cluster(String name, String colo, Set<Interface> interfaces, Set<Location> locations, Map<String, String> properties) {
this.name = name;
this.colo = colo;
this.interfaces = interfaces;
this.locations = locations;
this.properties = properties;
}
/**
* Get the cluster name.
*
* @return the cluster name
*/
public String getName() {
return name;
}
/**
* Get the colo.
*
* @return the colo
*/
public String getColo() {
return colo;
}
/**
* Get the interfaces.
*
* @return the interfaces
*/
public Set<Interface> getInterfaces() {
return interfaces;
}
/**
* Get the locations.
*
* @return the locations
*/
public Set<Location> getLocations() {
return locations;
}
/**
* Get the properties.
*
* @return the properties
*/
public Map<String, String> getProperties() {
return properties;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Cluster cluster = (Cluster) o;
return !(colo != null ? !colo.equals(cluster.colo) : cluster.colo != null) &&
!(interfaces != null ? !interfaces.equals(cluster.interfaces) : cluster.interfaces != null) &&
!(locations != null ? !locations.equals(cluster.locations) : cluster.locations != null) &&
!(name != null ? !name.equals(cluster.name) : cluster.name != null) &&
!(properties != null ? !properties.equals(cluster.properties) : cluster.properties != null);
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (colo != null ? colo.hashCode() : 0);
result = 31 * result + (interfaces != null ? interfaces.hashCode() : 0);
result = 31 * result + (locations != null ? locations.hashCode() : 0);
result = 31 * result + (properties != null ? properties.hashCode() : 0);
return result;
}
// ----- inner classes -----------------------------------------------------
/**
* Cluster interface.
*/
public static class Interface {
private final String type;
private final String endpoint;
private final String version;
/**
* Construct an interface.
*
* @param type the type
* @param endpoint the endpoint
* @param version the version
*/
public Interface(String type, String endpoint, String version) {
this.type = type;
this.endpoint = endpoint;
this.version = version;
}
/**
* Get the type.
*
* @return the type
*/
public String getType() {
return type;
}
/**
* Get the endpoint.
*
* @return the endpoint
*/
public String getEndpoint() {
return endpoint;
}
/**
* Get the version.
*
* @return the version
*/
public String getVersion() {
return version;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Interface that = (Interface) o;
return !(endpoint != null ? !endpoint.equals(that.endpoint) : that.endpoint != null) &&
!(type != null ? !type.equals(that.type) : that.type != null) &&
!(version != null ? !version.equals(that.version) : that.version != null);
}
@Override
public int hashCode() {
int result = type != null ? type.hashCode() : 0;
result = 31 * result + (endpoint != null ? endpoint.hashCode() : 0);
result = 31 * result + (version != null ? version.hashCode() : 0);
return result;
}
}
/**
* Cluster location
*/
public static class Location {
private final String name;
private final String path;
/**
* Construct a location.
*
* @param name the name
* @param path the path
*/
public Location(String name, String path) {
this.name = name;
this.path = path;
}
/**
* Get the name.
*
* @return the name
*/
public String getName() {
return name;
}
/**
* Get the path.
*
* @return the path
*/
public String getPath() {
return path;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Location location = (Location) o;
return !(name != null ? !name.equals(location.name) : location.name != null) &&
!(path != null ? !path.equals(location.path) : location.path != null);
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (path != null ? path.hashCode() : 0);
return result;
}
}
}