/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* Copyright (C) 2007-2008-2009 GeoSolutions S.A.S.
* http://www.geo-solutions.it
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.sldservice.utils.classifier;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.ResourcePool;
import org.geoserver.catalog.impl.CoverageInfoImpl;
import org.geoserver.catalog.impl.FeatureTypeInfoImpl;
import org.geoserver.catalog.impl.LayerInfoImpl;
import org.geoserver.catalog.impl.StyleInfoImpl;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.geotools.styling.FeatureTypeStyle;
import org.geotools.styling.NamedLayer;
import org.geotools.styling.Rule;
import org.geotools.styling.SLDParser;
import org.geotools.styling.Style;
import org.geotools.styling.StyleBuilder;
import org.geotools.styling.StyledLayer;
import org.geotools.styling.StyledLayerDescriptor;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.restlet.Context;
import org.restlet.data.ClientInfo;
import org.restlet.data.Reference;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.resource.Representation;
import com.vividsolutions.jts.geom.Polygon;
public abstract class SLDServiceBaseTest extends TestCase {
protected Request request;
protected Response response;
protected Map<String, Object> attributes = new HashMap<String, Object>();
protected Object responseEntity;
protected Catalog catalog;
protected Context context;
protected ResourcePool resourcePool;
protected FeatureTypeInfoImpl testFeatureTypeInfo;
protected SimpleFeatureTypeBuilder featureTypeBuilder = new SimpleFeatureTypeBuilder();
protected StyleBuilder styleBuilder = new StyleBuilder();
protected SLDParser sldParser = new SLDParser(CommonFactoryFinder.getStyleFactory());
protected static final String FEATURETYPE_LAYER = "featuretype_layer";
protected static final String COVERAGE_LAYER = "coverage_layer";
@Override
public void setUp() throws Exception {
responseEntity = null;
context = Mockito.mock(Context.class);
request = Mockito.mock(Request.class);
ClientInfo clientInfo = new ClientInfo();
Mockito.when(request.getClientInfo()).thenReturn(clientInfo);
Mockito.when(request.getAttributes()).thenReturn(attributes);
response = Mockito.mock(Response.class);
catalog = Mockito.mock(Catalog.class);
resourcePool = Mockito.mock(ResourcePool.class);
Mockito.when(catalog.getResourcePool()).thenReturn(resourcePool);
Mockito.doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
if(args.length > 0) {
responseEntity = args[0];
}
return "";
}
}).when(response).setEntity((Representation)Mockito.any());
LayerInfoImpl testFeatureLayerInfo = new LayerInfoImpl();
testFeatureTypeInfo = new FeatureTypeInfoImpl(catalog);
featureTypeBuilder.setName(FEATURETYPE_LAYER);
featureTypeBuilder.add("id", Integer.class);
featureTypeBuilder.add("name", String.class);
featureTypeBuilder.add("foo", Integer.class);
featureTypeBuilder.add("geometry", Polygon.class);
Mockito.when(resourcePool.getFeatureType(testFeatureTypeInfo)).thenReturn(featureTypeBuilder.buildFeatureType());
testFeatureLayerInfo.setResource(testFeatureTypeInfo);
Mockito.when(catalog.getLayerByName(FEATURETYPE_LAYER)).thenReturn(testFeatureLayerInfo);
LayerInfoImpl testCoverageLayerInfo = new LayerInfoImpl();
CoverageInfoImpl testCoverageInfo = new CoverageInfoImpl(catalog);
StyleInfoImpl coverageStyleInfo = new StyleInfoImpl(catalog);
testCoverageLayerInfo.setDefaultStyle(coverageStyleInfo);
testCoverageLayerInfo.setResource(testCoverageInfo);
Style coverageStyle = styleBuilder.createStyle(styleBuilder.createRasterSymbolizer());
Mockito.when(resourcePool.getStyle(coverageStyleInfo)).thenReturn(coverageStyle);
Mockito.when(catalog.getLayerByName(COVERAGE_LAYER)).thenReturn(testCoverageLayerInfo);
}
private Class<?> getGeometryType() {
// TODO Auto-generated method stub
return null;
}
protected void initRequestUrl(Request request, String type) {
Reference reference = new Reference("http://www.geoserver.org/geoserver/rest/sldservice/"+getServiceUrl()+"."+type);
String query = "";
for(String key : attributes.keySet()) {
query += "&"+key+"=" + attributes.get(key).toString();
}
if(query.length() > 0) {
reference.setQuery(query.substring(1));
}
Mockito.when(request.getResourceRef()).thenReturn(reference);
}
protected Rule[] checkSLD(String resultXml) {
sldParser.setInput(new StringReader(resultXml));
StyledLayerDescriptor descriptor = sldParser.parseSLD();
assertNotNull(descriptor);
assertNotNull(descriptor.getStyledLayers());
assertEquals(1, descriptor.getStyledLayers().length);
StyledLayer layer = descriptor.getStyledLayers()[0];
assertTrue(layer instanceof NamedLayer);
NamedLayer namedLayer =(NamedLayer)layer;
assertNotNull(namedLayer.getStyles());
assertEquals(1, namedLayer.getStyles().length);
Style style = namedLayer.getStyles()[0];
assertNotNull(style.getFeatureTypeStyles());
assertEquals(1, style.getFeatureTypeStyles().length);
FeatureTypeStyle featureTypeStyle = style.getFeatureTypeStyles()[0];
assertNotNull(featureTypeStyle.getRules());
return featureTypeStyle.getRules();
}
protected abstract String getServiceUrl();
}