package org.mongodb.morphia.geo; import org.mongodb.morphia.annotations.Embedded; import org.mongodb.morphia.annotations.Entity; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * This class represents a collection of mixed GeoJson objects as per the <a href="http://geojson.org/geojson-spec * .html#geometrycollection">GeoJSON * specification</a>. Therefore this entity will never have its own ID or store the its Class name. * <p/> * The factory for creating a MultiPoint is the {@code GeoJson.multiPoint} method. * * @see org.mongodb.morphia.geo.GeoJson */ @Embedded @Entity(noClassnameStored = true) public class GeometryCollection { private final String type = "GeometryCollection"; private final List<Geometry> geometries; @SuppressWarnings("UnusedDeclaration") // needed by morphia private GeometryCollection() { geometries = new ArrayList<Geometry>(); } GeometryCollection(final List<Geometry> geometries) { this.geometries = geometries; } GeometryCollection(final Geometry... geometries) { this.geometries = Arrays.asList(geometries); } @Override public int hashCode() { int result = type.hashCode(); result = 31 * result + geometries.hashCode(); return result; } @Override public boolean equals(final Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } GeometryCollection that = (GeometryCollection) o; if (!geometries.equals(that.geometries)) { return false; } if (!type.equals(that.type)) { return false; } return true; } @Override public String toString() { return "GeometryCollection{" + "type='" + type + '\'' + ", geometries=" + geometries + '}'; } }