package com.mongodb.client.model.geojson;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static com.mongodb.assertions.Assertions.doesNotContainNull;
import static com.mongodb.assertions.Assertions.isTrueArgument;
import static com.mongodb.assertions.Assertions.notNull;
public final class PolygonCoordinates {
private final List<Position> exterior;
private final List<List<Position>> holes;
@SafeVarargs
public PolygonCoordinates(final List<Position> exterior, final List<Position>... holes) {
notNull("exteriorRing", exterior);
doesNotContainNull("exterior", exterior);
isTrueArgument("ring must contain at least four positions", exterior.size() >= 4);
isTrueArgument("first and last position must be the same", exterior.get(0).equals(exterior.get(exterior.size() - 1)));
this.exterior = Collections.unmodifiableList(exterior);
List<List<Position>> holesList = new ArrayList<List<Position>>(holes.length);
for (List<Position> hole : holes) {
notNull("interiorRing", hole);
doesNotContainNull("hole", hole);
isTrueArgument("ring must contain at least four positions", hole.size() >= 4);
isTrueArgument("first and last position must be the same", hole.get(0).equals(hole.get(hole.size() - 1)));
holesList.add(Collections.unmodifiableList(hole));
}
this.holes = Collections.unmodifiableList(holesList);
}
public List<Position> getExterior() {
return exterior;
}
public List<List<Position>> getHoles() {
return holes;
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
PolygonCoordinates that = (PolygonCoordinates) o;
if (!exterior.equals(that.exterior)) {
return false;
}
if (!holes.equals(that.holes)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = exterior.hashCode();
result = 31 * result + holes.hashCode();
return result;
}
@Override
public String toString() {
return "PolygonCoordinates{"
+ "exterior=" + exterior
+ (holes.isEmpty() ? "" : ", holes=" + holes)
+ '}';
}
}