/* * This is part of Geomajas, a GIS framework, http://www.geomajas.org/. * * Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium. * * The program is available in open source according to the GNU Affero * General Public License. All contributions in this program are covered * by the Geomajas Contributors License Agreement. For full licensing * details, see LICENSE.txt in the project root. */ package org.geomajas.gwt2.client.map.feature; import java.util.ArrayList; import java.util.List; import org.geomajas.geometry.Bbox; import org.geomajas.geometry.service.BboxService; import org.geomajas.geometry.service.GeometryService; import org.geomajas.gwt2.client.map.layer.FeaturesSupported; /** * Collection of features that belong to a single layer. Could be the result of a search operation, a selection or * whatever... * * @author Jan De Moerloose * */ public class FeatureCollection { private FeaturesSupported layer; private List<Feature> features = new ArrayList<Feature>(); private Bbox bounds; /** * Create an empty collection of features. * * @param layer layer */ public FeatureCollection(FeaturesSupported layer) { this(layer, new ArrayList<Feature>(), null); } /** * Create a collection of features. * * @param layer layer * @param features features * @param bounds the bounds (optional, can be calculated by iteration as well) */ public FeatureCollection(FeaturesSupported layer, List<Feature> features, Bbox bounds) { this.layer = layer; this.features = features; this.bounds = bounds; } public FeaturesSupported getLayer() { return layer; } public List<Feature> getFeatures() { return features; } public boolean isEmpty() { return features.isEmpty(); } public void setBounds(Bbox bounds) { this.bounds = bounds; } public Bbox getBounds() { if (bounds == null && !features.isEmpty()) { for (Feature feature : features) { org.geomajas.geometry.Geometry geom = feature.getGeometry(); if (geom != null) { Bbox b = GeometryService.getBounds(geom); if (bounds == null) { bounds = b; } else { bounds = BboxService.union(bounds, b); } } } } return bounds; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((features == null) ? 0 : features.hashCode()); result = prime * result + ((layer == null) ? 0 : layer.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; } FeatureCollection other = (FeatureCollection) obj; if (features == null) { if (other.features != null) { return false; } } else if (!features.equals(other.features)) { return false; } if (layer == null) { if (other.layer != null) { return false; } } else if (!layer.equals(other.layer)) { return false; } return true; } }