package nl.ipo.cds.etl.theme.exposedelements;
import static nl.ipo.cds.etl.theme.exposedelements.Message.ATTRIBUTES_EXCLUSIVE;
import static nl.ipo.cds.etl.theme.exposedelements.Message.ATTRIBUTE_CODE_CODESPACE_INVALID;
import static nl.ipo.cds.etl.theme.exposedelements.Message.ATTRIBUTE_CODE_INVALID;
import static nl.ipo.cds.etl.theme.exposedelements.Message.ATTRIBUTE_EMPTY;
import static nl.ipo.cds.etl.theme.exposedelements.Message.ATTRIBUTE_GROUP_INCONSISTENT;
import static nl.ipo.cds.etl.theme.exposedelements.Message.ATTRIBUTE_NULL;
import static nl.ipo.cds.etl.theme.exposedelements.Message.ATTRIBUTE_VALUE_INVALID;
import static nl.ipo.cds.etl.theme.exposedelements.Message.ATTRIBUTE_VALUE_NEGATIVE;
import static nl.ipo.cds.etl.theme.exposedelements.Message.ATTRIBUTE_VALUE_TOO_HIGH;
import static nl.ipo.cds.etl.theme.exposedelements.Message.GEOMETRY_EMPTY_MULTIGEOMETRY;
import static nl.ipo.cds.etl.theme.exposedelements.Message.GEOMETRY_ONLY_SURFACE_OR_MULTISURFACE;
import static nl.ipo.cds.etl.theme.exposedelements.Message.GEOMETRY_SRS_NULL;
import static nl.ipo.cds.etl.theme.exposedelements.Message.QUALITATIVE_OR_QUANTITATIVE_LIKELIKHOOD_EXCLUSIVE;
import static nl.ipo.cds.etl.theme.exposedelements.Message.QUALITATIVE_OR_QUANTITATIVE_LIKELIKHOOD_REQUIRED;
import java.util.Collections;
import nl.ipo.cds.etl.test.GeometryConstants;
import nl.ipo.cds.etl.test.ValidationRunner;
import nl.ipo.cds.etl.theme.exposedelements.Context;
import nl.ipo.cds.etl.theme.exposedelements.Message;
import nl.ipo.cds.etl.theme.exposedelements.ExposedElements;
import nl.ipo.cds.etl.theme.exposedelements.ExposedElementsValidator;
import org.deegree.commons.tom.ows.CodeType;
import org.junit.Before;
import org.junit.Test;
public class ExposedElementsValidatorTest {
private ExposedElementsValidator validator;
private ValidationRunner<ExposedElements, Message, Context> runner;
private GeometryConstants geom;
@Before
public void createValidator() throws Exception {
validator = new ExposedElementsValidator(Collections.emptyMap());
runner = new ValidationRunner<>(validator, ExposedElements.class);
geom = new GeometryConstants("EPSG:28992");
}
private ValidationRunner<ExposedElements, Message, Context>.Runner run(final String validationName) {
return runner.validation(validationName);
}
@Test
public void testInspireIdDatasetCodeValidation () throws Throwable {
assertNotNullCodeValidation("inspireIdDatasetCode", "http://www.inspire-provincies.nl/codeList/DatasetTypeCode/HazardArea");
}
@Test
public void testInspireIdLocalIdValidation () throws Throwable {
assertNotNullNotEmptyStringValidation("inspireIdLocalId");
}
@Test
public void testHazardAreaIdValidation () throws Throwable {
assertNotNullNotEmptyStringValidation("hazardAreaId");
}
@Test
public void testDeterminationMethodValidation () throws Throwable {
run ("determinationMethod")
.with (null)
.assertOnlyKey (ATTRIBUTE_VALUE_INVALID);
run ("determinationMethod")
.with ("")
.assertOnlyKey (ATTRIBUTE_VALUE_INVALID);
run ("determinationMethod")
.with ("bogus")
.assertOnlyKey (ATTRIBUTE_VALUE_INVALID);
run ("determinationMethod")
.with ("modelling")
.assertNoMessages();
run ("determinationMethod")
.with ("indirectDetermination")
.assertNoMessages();
}
@Test
public void getTypeOfHazardHazardCategoryValidation () throws Throwable {
assertNotNullCodeValidation("typeOfHazardHazardCategory", "http://inspire.ec.europa.eu/codeList/RiskOrHazardCategoryValue");
}
@Test
public void testGeometryValidation () throws Exception {
assertNotNullSurfaceGeometryValidation("geometry");
}
@Test
public void testLikelihoodOfOccurrenceValidation () throws Exception {
ExposedElements feature = new ExposedElements();
run ("likelihoodOfOccurrence")
.withFeature(feature)
.assertOnlyKey (QUALITATIVE_OR_QUANTITATIVE_LIKELIKHOOD_REQUIRED);
feature = new ExposedElements();
feature.setLikelihoodOfOccurrenceQualitativeLikelihood("a");
feature.setLikelihoodOfOccurrenceQuantitativeLikelihoodProbabilityOfOccurrence(1.0);
run ("likelihoodOfOccurrence")
.withFeature(feature)
.assertOnlyKey (QUALITATIVE_OR_QUANTITATIVE_LIKELIKHOOD_EXCLUSIVE);
feature = new ExposedElements();
feature.setLikelihoodOfOccurrenceQualitativeLikelihood("a");
feature.setLikelihoodOfOccurrenceQuantitativeLikelihoodReturnPeriod(1.0);
run ("likelihoodOfOccurrence")
.withFeature(feature)
.assertOnlyKey (QUALITATIVE_OR_QUANTITATIVE_LIKELIKHOOD_EXCLUSIVE);
feature = new ExposedElements();
feature.setLikelihoodOfOccurrenceQualitativeLikelihood("a");
run ("likelihoodOfOccurrence")
.withFeature(feature)
.assertNoMessages();
feature = new ExposedElements();
feature.setLikelihoodOfOccurrenceQuantitativeLikelihoodProbabilityOfOccurrence(1.0);
run ("likelihoodOfOccurrence")
.withFeature(feature)
.assertNoMessages();
feature = new ExposedElements();
feature.setLikelihoodOfOccurrenceQuantitativeLikelihoodReturnPeriod(1.0);
run ("likelihoodOfOccurrence")
.withFeature(feature)
.assertNoMessages();
}
@Test
public void testLikelihoodOfOccurrenceAssessmentMethodValidation () throws Exception {
ExposedElements feature = new ExposedElements();
feature.setLikelihoodOfOccurrenceAssessmentMethodLink("b");
run ("likelihoodOfOccurrenceAssessmentMethod")
.withFeature(feature)
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
feature = new ExposedElements();
feature.setLikelihoodOfOccurrenceAssessmentMethodName("a");
feature.setLikelihoodOfOccurrenceAssessmentMethodLink("b");
run ("likelihoodOfOccurrenceAssessmentMethod")
.withFeature(feature)
.assertNoMessages();
feature = new ExposedElements();
run ("likelihoodOfOccurrenceAssessmentMethod")
.withFeature(feature)
.assertNoMessages();
feature = new ExposedElements();
feature.setLikelihoodOfOccurrenceAssessmentMethodName("a");
run ("likelihoodOfOccurrenceAssessmentMethod")
.withFeature(feature)
.assertNoMessages();
}
@Test
public void testLikelihoodOfOccurrenceQualitativeLikelihoodValidation () throws Exception {
assertNullOrEmptyStringValidation("likelihoodOfOccurrenceQualitativeLikelihood");
}
@Test
public void testLikelihoodOfOccurrenceAssessmentMethodNameValidation () throws Exception {
assertNullOrEmptyStringValidation("likelihoodOfOccurrenceAssessmentMethodName");
}
@Test
public void testLikelihoodOfOccurrenceAssessmentMethodLinkValidation () throws Exception {
assertNullOrEmptyStringValidation("likelihoodOfOccurrenceAssessmentMethodLink");
}
@Test
public void testLikelihoodOfOccurrenceQuantitativeLikelihoodValidation () throws Exception {
ExposedElements feature = new ExposedElements();
feature.setLikelihoodOfOccurrenceQuantitativeLikelihoodProbabilityOfOccurrence(1.0);
feature.setLikelihoodOfOccurrenceQuantitativeLikelihoodReturnPeriod(1.0);
run ("likelihoodOfOccurrenceQuantitativeLikelihood")
.withFeature(feature)
.assertOnlyKey (ATTRIBUTES_EXCLUSIVE);
feature = new ExposedElements();
feature.setLikelihoodOfOccurrenceQuantitativeLikelihoodProbabilityOfOccurrence(1.0);
run ("likelihoodOfOccurrenceQuantitativeLikelihood")
.withFeature(feature)
.assertNoMessages();
feature = new ExposedElements();
feature.setLikelihoodOfOccurrenceQuantitativeLikelihoodReturnPeriod(1.0);
run ("likelihoodOfOccurrenceQuantitativeLikelihood")
.withFeature(feature)
.assertNoMessages();
feature = new ExposedElements();
run ("likelihoodOfOccurrenceQuantitativeLikelihood")
.withFeature(feature)
.assertNoMessages();
}
@Test
public void testLikelihoodOfOccurrenceQuantitativeLikelihoodProbabilityOfOccurenceValidation () throws Exception {
run ("likelihoodOfOccurrenceQuantitativeLikelihoodProbabilityOfOccurrence")
.with (null)
.assertNoMessages();
run ("likelihoodOfOccurrenceQuantitativeLikelihoodProbabilityOfOccurrence")
.with (-0.1)
.assertOnlyKey(ATTRIBUTE_VALUE_NEGATIVE);
run ("likelihoodOfOccurrenceQuantitativeLikelihoodProbabilityOfOccurrence")
.with (1.01)
.assertOnlyKey(ATTRIBUTE_VALUE_TOO_HIGH);
run ("likelihoodOfOccurrenceQuantitativeLikelihoodProbabilityOfOccurrence")
.with (0.0)
.assertNoMessages();
run ("likelihoodOfOccurrenceQuantitativeLikelihoodProbabilityOfOccurrence")
.with (1.0)
.assertNoMessages();
}
@Test
public void testLikelihoodOfOccurrenceQuantitativeLikelihoodReturnPeriodValidation () throws Exception {
run ("likelihoodOfOccurrenceQuantitativeLikelihoodReturnPeriod")
.with (null)
.assertNoMessages();
run ("likelihoodOfOccurrenceQuantitativeLikelihoodReturnPeriod")
.with (-0.1)
.assertOnlyKey(ATTRIBUTE_VALUE_NEGATIVE);
run ("likelihoodOfOccurrenceQuantitativeLikelihoodReturnPeriod")
.with (0.0)
.assertNoMessages();
run ("likelihoodOfOccurrenceQuantitativeLikelihoodReturnPeriod")
.with (1.0)
.assertNoMessages();
run ("likelihoodOfOccurrenceQuantitativeLikelihoodReturnPeriod")
.with (1000.0)
.assertNoMessages();
}
private void assertNullOrEmptyStringValidation (String attrName) {
run (attrName)
.with (null)
.assertNoMessages ();
run (attrName)
.with ("")
.assertOnlyKey (ATTRIBUTE_EMPTY);
run (attrName)
.with ("nl1000")
.assertNoMessages();
}
private void assertNotNullNotEmptyStringValidation (String attrName) {
run (attrName)
.with (null)
.assertOnlyKey (ATTRIBUTE_NULL);
run (attrName)
.with ("")
.assertOnlyKey (ATTRIBUTE_EMPTY);
run (attrName)
.with ("nl1000")
.assertNoMessages();
}
private void assertNotNullCodeValidation(String attrName, String codeList) {
run (attrName)
.with (null)
.assertOnlyKey (ATTRIBUTE_NULL);
run (attrName)
.with (new CodeType(""))
.assertOnlyKey (ATTRIBUTE_EMPTY);
run (attrName)
.with (new CodeType("bogus"))
.assertOnlyKey (ATTRIBUTE_CODE_CODESPACE_INVALID);
run (attrName)
.withCodeList (codeList, "value")
.with (new CodeType("bogus", codeList))
.assertOnlyKey (ATTRIBUTE_CODE_INVALID);
run (attrName)
.withCodeList (codeList, "value")
.with (new CodeType( "value", codeList))
.assertNoMessages();
}
private void assertNotNullSurfaceGeometryValidation (String attrName) throws Exception {
run (attrName)
.with (null)
.assertOnlyKey (ATTRIBUTE_NULL);
run (attrName)
.with (geom.point (1,2))
.assertOnlyKey (GEOMETRY_ONLY_SURFACE_OR_MULTISURFACE);
run (attrName)
.with (geom.lineString (null))
.assertOnlyKey (GEOMETRY_ONLY_SURFACE_OR_MULTISURFACE);
run (attrName)
.with (geom.multiPoint ())
.assertOnlyKey (GEOMETRY_ONLY_SURFACE_OR_MULTISURFACE);
run (attrName)
.with (geom.emptyMultiPolygon())
.assertOnlyKey (GEOMETRY_EMPTY_MULTIGEOMETRY);
run (attrName)
.with (geom.polygon(null))
.assertOnlyKey (GEOMETRY_SRS_NULL);
run (attrName)
.with (geom.polygon())
.assertNoMessages ();
run (attrName)
.with (geom.multiPolygon())
.assertNoMessages ();
}
}