/* (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.describelayer;
import static org.geoserver.ows.util.ResponseUtils.appendQueryString;
import static org.geoserver.ows.util.ResponseUtils.buildURL;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.geoserver.ows.URLMangler.URLType;
import org.geoserver.platform.ServiceException;
import org.geoserver.wms.DescribeLayerRequest;
import org.geoserver.wms.MapLayerInfo;
import org.geotools.data.ows.LayerDescription;
import org.geotools.util.logging.Logging;
/**
* DescribeLayerModel the model object used to handle a DescribeLayer response
*
* @author carlo cancellieri - Geosolutions
*/
public class DescribeLayerModel {
private static final Logger LOGGER = Logging.getLogger(DescribeLayerModel.class);
private final List<LayerDescription> layerDescriptions = new ArrayList<LayerDescription>();
private final String version;
public DescribeLayerModel(final DescribeLayerRequest request) throws ServiceException {
this.version = request.getVersion();
final String baseURL = request.getBaseUrl();
final List<MapLayerInfo> layersInfo = request.getLayers();
for (MapLayerInfo layer : layersInfo) {
String owsUrl = null;
String owsType = null;
URL owsURL = null;
if (MapLayerInfo.TYPE_VECTOR == layer.getType()) {
owsUrl = buildURL(baseURL, "wfs", null, URLType.SERVICE);
owsUrl = appendQueryString(owsUrl, "");
try {
owsURL = new URL(owsUrl);
} catch (MalformedURLException e) {
LOGGER.warning(e.getLocalizedMessage());
}
owsType = "WFS";
} else if (MapLayerInfo.TYPE_RASTER == layer.getType()) {
owsUrl = buildURL(baseURL, "wcs", null, URLType.SERVICE);
owsUrl = appendQueryString(owsUrl, "");
try {
owsURL = new URL(owsUrl);
} catch (MalformedURLException e) {
LOGGER.warning(e.getLocalizedMessage());
}
owsType = "WCS";
} else {
// non vector nor raster layer, LayerDescription will not contain these
// attributes
if (LOGGER.isLoggable(Level.WARNING))
LOGGER.warning("Non vector nor raster layer, LayerDescription will not contain these attributes");
}
final LayerDescription layerDesc = new LayerDescription();
layerDesc.setName(layer.getName());
layerDesc.setOwsType(owsType);
layerDesc.setOwsURL(owsURL);
// populate
layerDescriptions.add(layerDesc);
}
}
public List<LayerDescription> getLayerDescriptions() {
return layerDescriptions;
}
public String getVersion() {
return version;
}
}