Package org.geotools.swing.tool

Source Code of org.geotools.swing.tool.FeatureLayerHelperTest

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2011, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*/

package org.geotools.swing.tool;


import java.util.Map;
import java.util.Map.Entry;

import com.vividsolutions.jts.geom.Geometry;

import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.geometry.DirectPosition2D;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.map.Layer;
import org.geotools.map.MapContent;
import org.geotools.swing.testutils.MockLayer;
import org.geotools.swing.testutils.TestDataUtils;
import org.opengis.feature.simple.SimpleFeature;

import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;

/**
* Unit tests for FeatureLayerHelper.
*
* @author Michael Bedward
* @since 8.0
*
* @source $URL$
* @version $URL$
*/
public class FeatureLayerHelperTest {
    private FeatureLayerHelper helper;

    @Before
    public void setup() throws Exception {
        helper = new FeatureLayerHelper();
    }

    @Test
    public void isLayerSupported() throws Exception {
        Layer layer = TestDataUtils.getPolygonLayer();
        assertTrue(helper.isSupportedLayer(layer));
        assertFalse(helper.isSupportedLayer(new MockLayer()));
    }

    @Test
    public void getInfoPolygonFeatures() throws Exception {
        doGetInfoTest(TestDataUtils.getPolygonLayer(), 10);
    }
   
    @Test
    public void doGetInfoLineFeatures() throws Exception {
        doGetInfoTest(TestDataUtils.getLineLayer(), 10);
    }
   
    @Test
    public void doGetInfoPointFeatures() throws Exception {
        doGetInfoTest(TestDataUtils.getPointLayer(), 10);
    }
   
    @Test
    public void getInfoOutsideLayerBoundsReturnsEmptyResult() throws Exception {
        Layer layer = TestDataUtils.getPointLayer();
        MapContent mapContent = new MapContent();
        mapContent.addLayer(layer);

        helper.setMapContent(mapContent);
        helper.setLayer(layer);
       
        ReferencedEnvelope bounds = layer.getBounds();
        DirectPosition2D pos = new DirectPosition2D(
                bounds.getCoordinateReferenceSystem(),
                bounds.getMinX() - 1,
                bounds.getMinY() - 1);
       
        InfoToolResult info = helper.getInfo(pos);
        assertNotNull(info);
        assertEquals(0, info.getNumFeatures());
    }
   
    private void doGetInfoTest(Layer layer, int maxFeatures) throws Exception {
        MapContent mapContent = new MapContent();
        mapContent.addLayer(layer);

        helper.setMapContent(mapContent);
        helper.setLayer(layer);

        SimpleFeatureIterator iter =
                ((SimpleFeatureSource)layer.getFeatureSource()).getFeatures().features();
        try {
            int n = 0;
            while (iter.hasNext() && n < maxFeatures) {
                SimpleFeature feature = iter.next();
                assertGetInfo(feature);
                n++ ;
            }

        } finally {
            iter.close();
            mapContent.dispose();
        }
    }

    private void assertGetInfo(SimpleFeature feature) throws Exception {
        DirectPosition2D pos = TestDataUtils.getPosInFeature(feature);
        InfoToolResult info = helper.getInfo(pos);
        assertFalse(info.getNumFeatures() < 1);

        // Allow that there might be more than one feature in
        // the result
        int index = -1;
        String fid = feature.getIdentifier().getID();
        for (int i = 0; i < info.getNumFeatures(); i++) {
            if (info.getFeatureId(i).equals(fid)) {
                index = i;
                break;
            }
        }
       
        assertFalse("Feature not in result object", index < 0);

        Map<String, Object> data = info.getFeatureData(index);
        assertEquals(feature.getAttributeCount(), data.size());

        for (Entry<String, Object> e : data.entrySet()) {
            Object value = feature.getAttribute(e.getKey());
            assertNotNull(value);

            if (value instanceof Geometry) {
                assertEquals("Attribute " + e.getKey(),
                        e.getValue(), value.getClass().getSimpleName());
            } else {
                assertEquals("Attribute " + e.getKey(),
                        e.getValue(), value);
            }
        }
    }

}
TOP

Related Classes of org.geotools.swing.tool.FeatureLayerHelperTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.