/* (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.wms_1_1_1;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.InputStream;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CatalogBuilder;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.data.test.MockData;
import org.geoserver.data.test.SystemTestData;
import org.geoserver.wms.WMSTestSupport;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.styling.NamedLayer;
import org.geotools.styling.SLDParser;
import org.geotools.styling.Style;
import org.geotools.styling.StyledLayerDescriptor;
import org.junit.Test;
public class GetStylesIntegrationTest extends WMSTestSupport {
@Override
protected void onSetUp(SystemTestData testData) throws Exception {
super.onSetUp(testData);
Catalog catalog = getCatalog();
String lakes = MockData.LAKES.getLocalPart();
String forests = MockData.FORESTS.getLocalPart();
String bridges = MockData.BRIDGES.getLocalPart();
LayerGroupInfo lg = catalog.getFactory().createLayerGroup();
lg.setName("lakesGroup");
lg.getLayers().add(catalog.getLayerByName(lakes));
lg.getStyles().add(catalog.getStyleByName(lakes));
lg.getLayers().add(catalog.getLayerByName(forests));
lg.getStyles().add(catalog.getStyleByName(forests));
lg.getLayers().add(catalog.getLayerByName(bridges));
lg.getStyles().add(catalog.getStyleByName(bridges));
CatalogBuilder builder = new CatalogBuilder(catalog);
builder.calculateLayerGroupBounds(lg);
catalog.add(lg);
// makes the lakes layer a multi-style one
LayerInfo lakesLayer = catalog.getLayerByName(getLayerId(MockData.LAKES));
lakesLayer.getStyles().add(catalog.getStyleByName(MockData.FORESTS.getLocalPart()));
catalog.save(lakesLayer);
}
@Test
public void testSimple() throws Exception {
InputStream stream = get("wms?service=WMS&version=1.1.1&&request=GetStyles&layers="
+ getLayerId(MockData.BASIC_POLYGONS) + "&sldver=1.0.0");
SLDParser parser = new SLDParser(CommonFactoryFinder.getStyleFactory(null));
parser.setInput(stream);
StyledLayerDescriptor sld = parser.parseSLD();
assertEquals(1, sld.getStyledLayers().length);
NamedLayer layer = (NamedLayer) sld.getStyledLayers()[0];
assertEquals(getLayerId(MockData.BASIC_POLYGONS), layer.getName());
assertEquals(1, layer.styles().size());
Style style = layer.styles().get(0);
assertTrue(style.isDefault());
assertEquals("BasicPolygons", style.getName());
}
@Test
public void testGroup() throws Exception {
InputStream stream = get("wms?service=WMS&version=1.1.1&request=GetStyles&layers=lakesGroup&sldver=1.0.0");
SLDParser parser = new SLDParser(CommonFactoryFinder.getStyleFactory(null));
parser.setInput(stream);
StyledLayerDescriptor sld = parser.parseSLD();
assertEquals(1, sld.getStyledLayers().length);
NamedLayer layer = (NamedLayer) sld.getStyledLayers()[0];
assertEquals("lakesGroup", layer.getName());
// groups have no style
assertEquals(0, layer.styles().size());
}
@Test
public void testMultiStyle() throws Exception {
InputStream stream = get("wms?service=WMS&version=1.1.1&request=GetStyles&layers="
+ getLayerId(MockData.LAKES) + "&sldver=1.0.0");
SLDParser parser = new SLDParser(CommonFactoryFinder.getStyleFactory(null));
parser.setInput(stream);
StyledLayerDescriptor sld = parser.parseSLD();
assertEquals(1, sld.getStyledLayers().length);
NamedLayer layer = (NamedLayer) sld.getStyledLayers()[0];
assertEquals(getLayerId(MockData.LAKES), layer.getName());
assertEquals(2, layer.styles().size());
Style style = layer.styles().get(0);
assertTrue(style.isDefault());
assertEquals("Lakes", style.getName());
style = layer.styles().get(1);
assertFalse(style.isDefault());
assertEquals("Forests", style.getName());
}
}