/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2004-2008, 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.validation;
import java.util.HashMap;
import org.geotools.data.DataTestCase;
import org.geotools.data.DataUtilities;
import org.geotools.data.FeatureReader;
import org.geotools.data.memory.MemoryDataStore;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.feature.IllegalAttributeException;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.validation.spatial.LineNoSelfIntersectValidation;
import org.geotools.validation.spatial.LineNoSelfOverlappingValidation;
import org.geotools.validation.spatial.LinesNotIntersectValidation;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
/**
* ValidationPlugInTester purpose.
* <p>
* Description of ValidationPlugInTester ...
* <p>
* Capabilities:
* <ul>
* </li></li>
* </ul>
* Example Use:
* <pre><code>
* ValidationPlugInTester x = new ValidationPlugInTester(...);
* </code></pre>
*
* @author bowens, Refractions Research, Inc.
* @author $Author: sploreg $ (last modification)
*
* @source $URL$
* @version $Id$
*/
public class ValidationPlugInTester extends DataTestCase {
MemoryDataStore store;
ValidationProcessor processor;
/**
* ValidationPlugInTester constructor.
* <p>
* Description
* </p>
* @param arg0
*/
public ValidationPlugInTester(String arg0) {
super(arg0);
}
/**
* Construct data store for use.
*
* @see junit.framework.TestCase#setUp()
*
* @throws Exception
*/
protected void setUp() throws Exception {
super.setUp();
store = new MemoryDataStore();
store.addFeatures( roadFeatures );
store.addFeatures( riverFeatures );
processor = new ValidationProcessor();
}
/**
* Override tearDown.
*
* @see junit.framework.TestCase#tearDown()
*
* @throws Exception
*/
protected void tearDown() throws Exception {
store = null;
super.tearDown();
}
public void testLineNoSelfIntersectFV_CorrectData()
{
// the visitor
RoadNetworkValidationResults roadValidationResults = new RoadNetworkValidationResults();
LineNoSelfIntersectValidation valid
= new LineNoSelfIntersectValidation();
valid.setName("RoadSelfIntersect");
valid.setDescription("Tests to see if a road intersects itself, which is bad!");
valid.setTypeRef( "road:road" );
try {
processor.addValidation(valid);
} catch (Exception e) {
assertTrue(false);
}
try {
processor.runFeatureTests("road", DataUtilities.collection(this.roadFeatures), roadValidationResults);
} catch (Exception e1) {
assertTrue(false);
}
System.out.println("NoLineSelfIntersect - correct");
String[] messages = roadValidationResults.getFailedMessages();
for (int i=0; i<messages.length; i++){
System.out.println(messages[i]);
}
assertTrue(roadValidationResults.getFailedMessages().length == 0);
}
public void testLineNoSelfIntersectFV_IncorrectData()
{
// the visitor
RoadNetworkValidationResults roadValidationResults = new RoadNetworkValidationResults();
/*LineNoSelfIntersectValidation selfIntersectValidatorRoads
= new LineNoSelfIntersectValidation("RoadSelfIntersect",
"Tests to see if a road intersects itself, which is bad!",
new String[] {"road"});*/
try {
//processor.addValidation(selfIntersectValidatorRoads);
} catch (Exception e) {
assertTrue(false);
}
// produce a broken road (newRoad)
try {
this.newRoad = SimpleFeatureBuilder.build(this.roadType, new Object[] {
new Integer(2), line(new int[] { 3, 6, 3, 8, 5, 8, 5, 7, 2, 7}), "r4"
}, "road.rd4");
} catch (IllegalAttributeException e) {}
try {
FeatureReader<SimpleFeatureType, SimpleFeature> reader = DataUtilities.reader(new SimpleFeature[] {this.newRoad});
String typeName = reader.getFeatureType().getTypeName();
SimpleFeatureCollection collection = DataUtilities.collection(new SimpleFeature[] {this.newRoad});
processor.runFeatureTests("road", collection, roadValidationResults);
}
catch (Exception e1) {
assertTrue(false);
}
System.out.println("NoLineSelfIntersect - incorrect");
String[] messages = roadValidationResults.getFailedMessages();
for (int i=0; i<messages.length; i++){
System.out.println(messages[i]);
}
assertTrue(roadValidationResults.getFailedMessages().length > 0);
}
public void testLineNoSelfOverlapFV_CorrectData()
{
// the visitor
RoadNetworkValidationResults roadValidationResults = new RoadNetworkValidationResults();
LineNoSelfOverlappingValidation selfOverlappingValidatorRoads
= new LineNoSelfOverlappingValidation();
selfOverlappingValidatorRoads.setName("RoadSelfIntersect");
selfOverlappingValidatorRoads.setDescription("Tests to see if a road intersects itself, which is bad!");
selfOverlappingValidatorRoads.setTypeRef("road");
try {
processor.addValidation(selfOverlappingValidatorRoads);
} catch (Exception e) {
assertTrue(false);
}
try {
processor.runFeatureTests( "id", DataUtilities.collection(this.roadFeatures), roadValidationResults);
} catch (Exception e1) {
assertTrue(false);
}
System.out.println("NoLineSelfOverlap - correct");
String[] messages = roadValidationResults.getFailedMessages();
for (int i=0; i<messages.length; i++)
System.out.println(messages[i]);
assertTrue(roadValidationResults.getFailedMessages().length == 0);
}
public void testLineNoSelfOverlapFV_IncorrectData()
{
// the visitor
RoadNetworkValidationResults roadValidationResults = new RoadNetworkValidationResults();
LineNoSelfOverlappingValidation selfOverlappingValidatorRoads
= new LineNoSelfOverlappingValidation();
selfOverlappingValidatorRoads.setName("RoadSelfIntersect");
selfOverlappingValidatorRoads.setDescription("Tests to see if a road intersects itself, which is bad!");
selfOverlappingValidatorRoads.setTypeRef("road");
try {
processor.addValidation(selfOverlappingValidatorRoads);
} catch (Exception e) {
assertTrue(false);
}
// produce a broken road (newRoad)
try {
this.newRoad = SimpleFeatureBuilder.build(this.roadType, (new Object[] {
new Integer(2), line(new int[] { 7, 7, 8, 7, 9, 7, 9, 6, 8, 6, 8, 7, 7, 7}), "r4"
}), "road.rd4");
} catch (IllegalAttributeException e) {}
try {
processor.runFeatureTests( "datastoreId", DataUtilities.collection(new SimpleFeature[] {this.newRoad}), roadValidationResults);
}
catch (Exception e1) {
assertTrue(false);
}
System.out.println("NoLineSelfOverlap - incorrect");
String[] messages = roadValidationResults.getFailedMessages();
for (int i=0; i<messages.length; i++){
System.out.println(messages[i]);
}
assertTrue(roadValidationResults.getFailedMessages().length > 0);
}
public void testLineIsSingleSegmentFV_CorrectData()
{
// the visitor
RoadNetworkValidationResults roadValidationResults = new RoadNetworkValidationResults();
/*LineMustBeASinglePartValidation singleSegmentLineValidatorRoads
= new LineMustBeASinglePartValidation("RoadSelfIntersect",
"Tests to see if a road intersects itself, which is bad!",
new String[] {"road"});
try {
processor.addValidation(singleSegmentLineValidatorRoads);
} catch (Exception e) {
assertTrue(false);
}*/
try {
processor.runFeatureTests("dataStoreId", DataUtilities.collection(new SimpleFeature[] {this.newRoad}), roadValidationResults);
} catch (Exception e1) {
assertTrue(false);
}
System.out.println("LineIsSingleSegment - correct");
String[] messages = roadValidationResults.getFailedMessages();
for (int i=0; i<messages.length; i++)
System.out.println(messages[i]);
assertTrue(roadValidationResults.getFailedMessages().length == 0);
}
public void testLineIsSingleSegmentFV_IncorrectData()
{
// the visitor
RoadNetworkValidationResults roadValidationResults = new RoadNetworkValidationResults();
/*
LineMustBeASinglePartValidation singleSegmentLineValidatorRoads
= new LineMustBeASinglePartValidation("RoadSelfIntersect",
"Tests to see if a road intersects itself, which is bad!",
new String[] {"road"});
try {
processor.addValidation(singleSegmentLineValidatorRoads);
} catch (Exception e) {
assertTrue(false);
}*/
try {
processor.runFeatureTests("dataStoreId", DataUtilities.collection(this.roadFeatures), roadValidationResults);
}
catch (Exception e1) {
assertTrue(false);
}
System.out.println("LineIsSingleSegment - incorrect");
String[] messages = roadValidationResults.getFailedMessages();
for (int i=0; i<messages.length; i++){
System.out.println(messages[i]);
}
assertTrue(roadValidationResults.getFailedMessages().length > 0);
}
public void testLinesIntersectIV_CorrectData()
{
// the visitor
RoadNetworkValidationResults roadValidationResults = new RoadNetworkValidationResults();
LinesNotIntersectValidation noIntersectingLinesValidatorAll
= new LinesNotIntersectValidation();
noIntersectingLinesValidatorAll.setName("linesIntersect");
noIntersectingLinesValidatorAll.setDescription("Tests to see if any line geometries cross!");
noIntersectingLinesValidatorAll.setLineTypeRef("road");
noIntersectingLinesValidatorAll.setLineTypeRef("river");
try {
processor.addValidation(noIntersectingLinesValidatorAll);
} catch (Exception e) {
assertTrue(false);
}
// Feature[] roads = new Feature[2];
// roads[0] = roadFeatures[0];
// roads[1] = newRoad;
// roadFeatures = null;
// roadFeatures = new Feature[2];
// roadFeatures = roads;
//
// Feature[] rivers = new Feature[1];
// rivers[0] = riverFeatures[1];
// rivers[0] = newRiver;
// riverFeatures = null;
// riverFeatures = new Feature[2];
// riverFeatures = roads;
//
// store = new MemoryDataStore();
// store.addFeatures( roadFeatures );
// store.addFeatures( riverFeatures );
HashMap layers = new HashMap();
try {
layers.put("dataStoreId:road", DataUtilities.source(new SimpleFeature[] {newRoad}));
layers.put("dataStoreId:river", DataUtilities.source(riverFeatures));
}
catch (Exception e) {
assertTrue(false);
}
try {
processor.runIntegrityTests( null, layers, null, roadValidationResults);
} catch (Exception e1) {
assertTrue(false);
}
System.out.println("NoLinesIntersect - correct");
String[] messages = roadValidationResults.getFailedMessages();
for (int i=0; i<messages.length; i++)
System.out.println(messages[i]);
assertTrue(roadValidationResults.getFailedMessages().length == 0);
}
public void testLinesIntersectIV_IncorrectData()
{
// the visitor
RoadNetworkValidationResults roadValidationResults = new RoadNetworkValidationResults();
LinesNotIntersectValidation noIntersectingLinesValidatorAll
= new LinesNotIntersectValidation();
noIntersectingLinesValidatorAll.setName("linesIntersect");
noIntersectingLinesValidatorAll.setDescription("Tests to see if any line geometries cross!");
noIntersectingLinesValidatorAll.setLineTypeRef("road");
noIntersectingLinesValidatorAll.setLineTypeRef("river");
try {
processor.addValidation(noIntersectingLinesValidatorAll);
} catch (Exception e) {
assertTrue(false);
}
HashMap layers = new HashMap();
try {
layers.put("dataStoreId:road", store.getFeatureSource("road"));
layers.put("dataStoreId:river", store.getFeatureSource("river"));
}
catch (Exception e) {
assertTrue(false);
}
try {
processor.runIntegrityTests( null, layers, null, roadValidationResults);
}
catch (Exception e1) {
assertTrue(false);
}
System.out.println("NoLinesIntersect - incorrect");
String[] messages = roadValidationResults.getFailedMessages();
for (int i=0; i<messages.length; i++)
System.out.println(messages[i]);
assertTrue(roadValidationResults.getFailedMessages().length > 0);
}
}