/* Copyright (c) 2010 TOPP - www.openplans.org. All rights reserved. * This code is licensed under the GPL 2.0 license, availible at the root * application directory. */ package org.geoserver.wms.kvp; import java.util.ArrayList; import java.util.List; import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerInfo; import org.geoserver.ows.FlatKvpParser; import org.geoserver.ows.KvpParser; import org.geoserver.platform.ServiceException; import org.geoserver.wms.MapLayerInfo; import org.geoserver.wms.WMS; /** * KVP parser to parse a comma separated list of layer names into a list of {@link MapLayerInfo} * * @author Gabriel Roldan */ public class MapLayerInfoKvpParser extends KvpParser { private FlatKvpParser rawNamesParser; private final WMS wms; public MapLayerInfoKvpParser(final String key, final WMS wms) { super(key, MapLayerInfo.class); this.wms = wms; rawNamesParser = new FlatKvpParser(key, String.class); } @SuppressWarnings("unchecked") @Override public List<MapLayerInfo> parse(final String paramValue) throws Exception { final List<String> layerNames = (List<String>) rawNamesParser.parse(paramValue); List<MapLayerInfo> layers = new ArrayList<MapLayerInfo>(layerNames.size()); MapLayerInfo layer = null; for (String layerName : layerNames) { LayerInfo layerInfo = wms.getLayerByName(layerName); if (layerInfo == null) { LayerGroupInfo groupInfo = wms.getLayerGroupByName(layerName); if (groupInfo == null) { throw new ServiceException(layerName + ": no such layer on this server", "LayerNotDefined", getClass().getSimpleName()); } else { for (LayerInfo li : groupInfo.getLayers()) { layer = new MapLayerInfo(li); layers.add(layer); } } } else { layer = new MapLayerInfo(layerInfo); layers.add(layer); } } return layers; } }