package org.geotools.api.validation;
import java.io.File;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.geotools.data.memory.MemoryDataStore;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.feature.NameImpl;
import org.geotools.validation.DefaultFeatureResults;
import org.geotools.validation.ValidationProcessor;
import org.geotools.validation.spatial.IsValidGeometryValidation;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.Name;
@SuppressWarnings("unused")
public class ValidationExamples {
private void validationExample() throws Exception{
SimpleFeatureCollection roadFeatures = null;
SimpleFeatureCollection riverFeatures = null;
// validationExample start
MemoryDataStore store;
store = new MemoryDataStore();
store.addFeatures( roadFeatures );
store.addFeatures( riverFeatures );
//
// SETUP
//
ValidationProcessor processor = new ValidationProcessor();
// normally you load definition from file
// Here we are doing it by hand
IsValidGeometryValidation geom = new IsValidGeometryValidation();
geom.setName( "IsValidGeometry");
geom.setDescription("IsValid geomtry check");
geom.setTypeRef("*"); // works on any feature type
processor.addValidation( geom );
//
// TESTING
//
// Create a ValidationResults callback object to receive
// any warnings or errors
//
// Normally you implement this as a callback to your application;
// here we will use a default implementation here that adds results to a list
DefaultFeatureResults results = new DefaultFeatureResults();
// test a featureCollection
processor.runFeatureTests( "dataStoreId", roadFeatures, results);
// and check the results
System.out.println("Found "+ results.error.size() + " failires" );
// validationExample end
}
private void validationExample2() throws Exception {
File pluginDirectory = null;
File testSuiteDirectory = null;
SimpleFeatureSource lakesFeatureSource = null;
SimpleFeatureSource streamsFeatureSource = null;
// validationExample2 start
// set up a validation processor using two directories of
// configuraiton files
ValidationProcessor processor = new ValidationProcessor();
processor.load( pluginDirectory, testSuiteDirectory );
// normally you load definition from file
// it will load all the files in the provided directories
processor.load( pluginDirectory, testSuiteDirectory );
DefaultFeatureResults results = new DefaultFeatureResults();
// To run integrity tests (that compare several featureSources we need
// to make a Map of FeatureSources.
// the *key* is called the "typeRef" and will be used by test suites
// to refer to look up a featureSource as needed
Map<String,SimpleFeatureSource> map = new HashMap<String,SimpleFeatureSource>();
// register in map so validation processor can find it
map.put( "LAKES:lakes", lakesFeatureSource );
map.put( "STREAMS:streams", streamsFeatureSource );
// optional shortlist of layers to check (these are usually the layers your
// user modified)
Set<Name> check = new HashSet<Name>();
check.add( new NameImpl("LAKES:lakes"));
processor.runIntegrityTests( check, map, null, results);
// and check the results
System.out.println("Found "+ results.error.size() + " failires" );
// validationExample2 end
}
}