blob: a155ed3c88a8f01113f1cce7170292aeb3220d86 [file] [log] [blame]
/*
* 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.jclouds.openstack.nova.v2_0.domain.regionscoped;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableMap;
import com.google.gson.annotations.SerializedName;
import java.beans.ConstructorProperties;
import java.util.Date;
import java.util.Map;
/**
* Availability Zone which show name, state and host information.
*
* Host information includes the host name and the services running on the hosts.
*/
public class AvailabilityZoneDetails {
public static final class HostService {
private final boolean available;
private final boolean active;
@SerializedName("updated_at")
private final Date updated;
@ConstructorProperties({"available", "active", "updated_at"})
protected HostService(boolean available, boolean active, Date updated) {
this.available = available;
this.active = active;
this.updated = updated;
}
public boolean isAvailable() { return available; }
public boolean isActive() { return active; }
public Date getUpdated() { return updated; }
protected MoreObjects.ToStringHelper string() {
return MoreObjects.toStringHelper(this)
.add("available", available)
.add("active", active)
.add("updated", updated);
}
@Override
public String toString() {
return string().toString();
}
}
@SerializedName("zoneName")
private final String name;
private final ZoneState state;
private final Map<String, Map<String, HostService>> hosts;
@ConstructorProperties({"zoneName", "zoneState", "hosts"})
protected AvailabilityZoneDetails(String name, ZoneState state, Map<String, Map<String, HostService>> hosts) {
this.name = name;
this.state = state;
this.hosts = hosts == null ? ImmutableMap.<String, Map<String, HostService>>of() : ImmutableMap.copyOf(hosts);
}
public String getName() {
return name;
}
public ZoneState getState() {
return state;
}
/**
* @return returns a map of host name and Host service objects
*/
public Map<String, Map<String, HostService>> getHosts() {
return this.hosts;
}
@Override
public int hashCode() {
return Objects.hashCode(name, state, hosts);
}
@Override
public boolean equals(Object obj) {
if (this != obj)
return false;
if (obj == null || getClass() != obj.getClass()) return false;
AvailabilityZoneDetails that = AvailabilityZoneDetails.class.cast(obj);
return Objects.equal(this.name, that.name) && Objects.equal(this.state, that.state) && Objects.equal(this.hosts,
that.hosts);
}
protected MoreObjects.ToStringHelper string() {
return MoreObjects.toStringHelper(this)
.add("name", name)
.add("state", state)
.add("Hosts", hosts);
}
@Override
public String toString() {
return string().toString();
}
}