package voldemort.cluster; import java.io.Serializable; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class Zone implements Serializable, Comparable<Zone> { private static final long serialVersionUID = 1; public static final int DEFAULT_ZONE_ID = 0; public static final int UNSET_ZONE_ID = -1; private int zoneId; private List<Integer> proximityList; public Zone(int zoneId, List<Integer> proximityList) { this.zoneId = zoneId; this.proximityList = new ArrayList<Integer>(proximityList); } public Zone() { this.zoneId = DEFAULT_ZONE_ID; this.proximityList = new LinkedList<Integer>(); } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Zone Id " + this.zoneId + " - "); builder.append("Proximity List - [" + proximityList + "]"); return builder.toString(); } @Override public boolean equals(Object object) { if(this == object) return true; if(!(object instanceof Zone)) return false; Zone zone = (Zone) object; if(getId() != zone.getId()) { return false; } if(this.getProximityList().size() != zone.getProximityList().size()) { return false; } Iterator<Integer> proxListFirst = this.getProximityList().iterator(); Iterator<Integer> proxListSecond = zone.getProximityList().iterator(); while(proxListFirst.hasNext() && proxListSecond.hasNext()) { Integer first = proxListFirst.next(); Integer second = proxListSecond.next(); if(!first.equals(second)) { return false; } } return true; } @Override public int compareTo(Zone other) { return Integer.valueOf(this.zoneId).compareTo(other.getId()); } @Override public int hashCode() { return getId() ^ getProximityList().size(); } public int getId() { return this.zoneId; } public List<Integer> getProximityList() { return proximityList; } }