private InternalFeatureDataSource getDataSource(ReportingCacheContainer container) throws GeomajasException { List<InternalFeature> features = new ArrayList<InternalFeature>(); for (Feature feature : container.getFeatures()) { features.add(dtoConverterService.toInternal(feature)); } return new InternalFeatureDataSource(features); }
@Override public void execute(UserMaximumExtentRequest request, UserMaximumExtentResponse response) throws Exception { String[] layers; ArrayList<String> tempLayers = new ArrayList<String>(); String[] includeLayers = request.getLayerIds(); boolean excludeRasterLayers = request.isExcludeRasterLayers(); if (includeLayers != null && includeLayers.length > 0) { for (String layerId : includeLayers) { if (!securityContext.isLayerVisible(layerId)) { throw new GeomajasSecurityException(ExceptionCode.LAYER_NOT_VISIBLE, layerId); } Layer<?> l = configurationService.getLayer(layerId); if (null == l) { throw new GeomajasException(ExceptionCode.LAYER_NOT_FOUND, layerId); } if (!excludeRasterLayers || l.getLayerInfo().getLayerType() != LayerType.RASTER) { tempLayers.add(l.getId()); } } } layers = tempLayers.toArray(new String[tempLayers.size()]); Layer<?> layer; Crs targetCrs = geoService.getCrs2(request.getCrs()); if (layers.length == 0) { // return empty bbox response.setBounds(new Bbox()); } else { Envelope extent = new Envelope(); for (String layerId : layers) { layer = configurationService.getLayer(layerId); if (layer != null) { Envelope bounds; if (layer.getLayerInfo().getLayerType() == LayerType.RASTER) { bounds = securityContext.getVisibleArea(layerId).getEnvelopeInternal(); CrsTransform transform = geoService.getCrsTransform(layer.getCrs(), targetCrs); bounds = geoService.transform(bounds, transform); } else { bounds = layerService.getBounds(layerId, targetCrs, null); } extent.expandToInclude(bounds); } else { log.warn("layer not found ?! " + layerId); } } response.setBounds(converterService.toDto(extent)); } }