package nl.ipo.cds.validation; import java.util.LinkedHashMap; import java.util.Map.Entry; import nl.ipo.cds.validation.gml.codelists.CodeListFactory; import org.deegree.geometry.Geometry; import org.deegree.geometry.primitive.Point; public class DefaultValidatorContext<K extends Enum<K> & ValidationMessage<K, C>, C extends ValidatorContext<K, C>> implements ValidatorContext<K, C> { public final CodeListFactory codeListFactory; public final ValidationReporter<K, C> reporter; private GeometryValidationResult currentGeometryValidationResult = null; private final LinkedHashMap<Geometry,GeometryValidationResult> geometryToValidationResult = new LinkedHashMap<Geometry,GeometryValidationResult> (100, 0.75f, true) { private static final long serialVersionUID = 8716160952616001432L; protected boolean removeEldestEntry(Entry<Geometry, GeometryValidationResult> eldest) { return size() == 100; } }; private Point lastLocation = null; public DefaultValidatorContext (final CodeListFactory codeListFactory, final ValidationReporter<K, C> reporter) { this.codeListFactory = codeListFactory; this.reporter = reporter; } /* (non-Javadoc) * @see nl.ipo.cds.validation.ValidatorContextInterface#setLastLocation(org.deegree.geometry.primitive.Point) */ @Override public void setLastLocation (final Point location) { this.lastLocation = location; } /* (non-Javadoc) * @see nl.ipo.cds.validation.ValidatorContextInterface#getLastLocation() */ @Override public Point getLastLocation () { return lastLocation; } /* (non-Javadoc) * @see nl.ipo.cds.validation.ValidatorContextInterface#validateGeometry(org.deegree.geometry.Geometry) */ @Override public GeometryValidationResult validateGeometry (final Geometry geometry) { if (currentGeometryValidationResult == null || currentGeometryValidationResult.geometry != geometry) { currentGeometryValidationResult = doValidateGeometry (geometry); } return currentGeometryValidationResult; } private GeometryValidationResult doValidateGeometry (final Geometry geometry) { GeometryValidationResult result = geometryToValidationResult.get(geometry); if (result == null) { result = new GeometryValidationResult (geometry); geometryToValidationResult.put(geometry, result); } return result; } @Override public ValidationReporter<K, C> getReporter () { return reporter; } @Override public CodeListFactory getCodeListFactory () { return codeListFactory; } }