/*
* 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.attributes;
import java.util.logging.Logger;
import org.geotools.validation.DefaultFeatureValidation;
import org.geotools.validation.ValidationResults;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.filter.Filter;
/**
* Tests to see if an attribute is equal to a provided value.
*
* <p>
* I can only see this test being useful if a Filter is also used. Online
* research shows that this test is used in the wild, so we are adding it into
* our system.
* </p>
*
* @author Jody Garnett, Refractions Research, Inc.
* @author $Author: dmzwiers $ (last modification)
* @source $URL$
* @version $Id$
*/
public class EqualityValidation extends DefaultFeatureValidation {
/** The logger for the validation module. */
private static final Logger LOGGER = org.geotools.util.logging.Logging.getLogger(
"org.geotools.validation");
private String attributeName;
/** Expected value that attribute are supposed to equal */
private Object expected;
/** Filter used to limit the number of Features we check */
private Filter filter = Filter.INCLUDE;
/**
* No argument constructor, required by the Java Bean Specification.
*/
public EqualityValidation() {
}
/**
* The priority level used to schedule this Validation.
*
* @return PRORITY_SIMPLE
*
* @see org.geotools.validation.Validation#getPriority()
*/
public int getPriority() {
return PRIORITY_SIMPLE;
}
/**
* Implementation of getTypeNames.
*
* @return Array of typeNames, or empty array for all, null for disabled
*
* @see org.geotools.validation.Validation#getTypeRefs()
*/
public String[] getTypeRefs() {
if (getTypeRef() == null) {
return null;
}
if (getTypeRef().equals("*")) {
return ALL;
}
return new String[] { getTypeRef(), };
}
/**
* Validation test for feature.
*
* <p>
* Description of test ...
* </p>
*
* @param feature The Feature to be validated
* @param type The FeatureType of the feature
* @param results The storage for error messages.
*
* @return <code>true</code> if the feature is a valid geometry.
*
* @see org.geotools.validation.FeatureValidation#validate
*/
public boolean validate(SimpleFeature feature, SimpleFeatureType type,
ValidationResults results) {
if (!filter.evaluate(feature)) {
return true;
}
Object actual = feature.getAttribute(attributeName);
if (expected.equals(actual)) {
return true;
}
results.error(feature, attributeName + " did not not equals "
+ expected);
return false;
}
/**
* Access attributeName property.
*
* @return Returns the attributeName.
*/
public String getAttributeName() {
return attributeName;
}
/**
* Set attributeName to attributeName.
*
* @param attributeName The attributeName to set.
*/
public void setAttributeName(String attributeName) {
this.attributeName = attributeName;
}
/**
* Access expected property.
*
* @return Returns the expected.
*/
public Object getExpected() {
return expected;
}
/**
* Set expected to expected.
*
* @param expected The expected to set.
*/
public void setExpected(Object expected) {
this.expected = expected;
}
/**
* Access filter property.
*
* @return Returns the filter.
*/
public Filter getFilter() {
return filter;
}
/**
* Set filter to filter.
*
* @param filter The filter to set.
*/
public void setFilter(Filter filter) {
this.filter = filter;
}
}