/*
* Copyright 2015 herd contributors
*
* Licensed 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.finra.herd.dao.impl;
import java.util.HashMap;
import java.util.Map;
import com.amazonaws.services.ec2.model.AvailabilityZone;
/**
* In-memory availability zone.
*/
public class MockAvailabilityZone
{
/**
* Name of the zone.
*/
private String zoneName;
/**
* Name of the region of this AZ.
*/
private String regionName;
/**
* Map of subnet IDs to subnets.
*/
private Map<String, MockSubnet> subnets = new HashMap<>();
/**
* Map of instance types to spot prices.
*/
private Map<String, MockSpotPrice> spotPrices = new HashMap<>();
public String getZoneName()
{
return zoneName;
}
public void setZoneName(String zoneName)
{
this.zoneName = zoneName;
}
public String getRegionName()
{
return regionName;
}
public void setRegionName(String regionName)
{
this.regionName = regionName;
}
public Map<String, MockSpotPrice> getSpotPrices()
{
return spotPrices;
}
public void setSpotPrices(Map<String, MockSpotPrice> spotPrices)
{
this.spotPrices = spotPrices;
}
/**
* Puts the specified spot price into this AZ. The spot price's zone name is automatically assigned.
*
* @param spotPrice The spot price to put.
*/
public void putSpotPrice(MockSpotPrice spotPrice)
{
spotPrice.setAvailabilityZone(zoneName);
this.spotPrices.put(spotPrice.getInstanceType(), spotPrice);
}
public Map<String, MockSubnet> getSubnets()
{
return subnets;
}
public void setSubnets(Map<String, MockSubnet> subnets)
{
this.subnets = subnets;
}
/**
* Puts a subnet into this AZ. The zone name is automatically assigned.
*
* @param subnet The subnet to put.
*/
public void putSubnet(MockSubnet subnet)
{
subnet.setAvailabilityZone(zoneName);
this.subnets.put(subnet.getSubnetId(), subnet);
}
/**
* Converts this object into an AWS equivalent object.
*
* @return A new equivalent AWS object
*/
public AvailabilityZone toAwsObject()
{
AvailabilityZone availabilityZone = new AvailabilityZone();
availabilityZone.setRegionName(regionName);
availabilityZone.setZoneName(zoneName);
return availabilityZone;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((zoneName == null) ? 0 : zoneName.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MockAvailabilityZone other = (MockAvailabilityZone) obj;
if (zoneName == null)
{
if (other.zoneName != null)
return false;
}
else if (!zoneName.equals(other.zoneName))
return false;
return true;
}
}