/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wms.eo.web;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.geoserver.catalog.CoverageInfo;
import org.geoserver.catalog.DimensionInfo;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.ResourceInfo;
import org.geoserver.web.GeoServerApplication;
import org.geoserver.web.data.layergroup.LayerListPanel;
import org.geoserver.wms.eo.EoLayerType;
import org.geoserver.wms.eo.web.EoLayerGroupEntryPanel.LayerGroupEntryProvider;
public class EoLayerListPanel extends LayerListPanel {
private static final long serialVersionUID = -7650810117220868467L;
public EoLayerListPanel(String contentId, final EoLayerType layerType,
final LayerGroupEntryProvider entryProvider) {
super(contentId, new LayerListProvider() {
@Override
protected List<LayerInfo> getItems() {
List<LayerInfo> layers = GeoServerApplication.get().getCatalog().getLayers();
// collect the layers we already have, no dupes in the EO group
Set<String> existingLayerIds = new HashSet<String>();
for (EoLayerGroupEntry entry : entryProvider.getItems()) {
existingLayerIds.add(entry.layerId);
}
List<LayerInfo> results = new ArrayList<LayerInfo>();
for (LayerInfo layer : layers) {
if (layerType == EoLayerType.COVERAGE_OUTLINE) {
// outlines are only vector
if (!(layer.getResource() instanceof FeatureTypeInfo)) {
continue;
}
} else {
// we can only add raster layers for the other types
if (!(layer.getResource() instanceof CoverageInfo)) {
continue;
}
}
// avoid dupes
if (existingLayerIds.contains(layer.getId())) {
continue;
}
// we can only add layers having a time dimension
if (layer.getResource().getMetadata()
.get(ResourceInfo.TIME, DimensionInfo.class) == null) {
continue;
}
results.add(layer);
}
return results;
}
});
}
}