Commit 85cf93b6 authored by Matthias Betz's avatar Matthias Betz
Browse files

reworked check engine now working on requirements

parent 35577785
Pipeline #2108 passed with stage
in 3 minutes and 6 seconds
......@@ -21,15 +21,18 @@ package de.hft.stuttgart.citydoctor2.checks.geometry;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType;
import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.GeometrySelfIntersection;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.checks.util.SelfIntersectionUtil;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
......@@ -98,10 +101,15 @@ public class SolidSelfIntCheck extends Check {
public List<CheckId> getDependencies() {
return dependencies;
}
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_GE_S_SELF_INTERSECTION);
}
@Override
public CheckType getType() {
return CheckType.GEOMETRY;
public RequirementType getType() {
return RequirementType.GEOMETRY;
}
@Override
......
......@@ -28,23 +28,25 @@ import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType;
import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
/**
* CP_NUMPOINTS checks the minimum number of point in a linear ring. At least
* C_GE_R_TOO_FEW_POINTS checks the minimum number of point in a linear ring. At least
* three vertices are minimum for a linear ring. <br/>
* <br/>
* <b>Dependency:</b> <br/>
* <dd>
* <dd>none</dd></dd>
* <dd>C_GE_R_NOT_CLOSED</dd></dd>
*
* @author Matthias Betz - 12bema1bif@hft-stuttgart.de
* @author Matthias Betz
*/
public class NumPointsCheck extends Check {
public class TooFewPointsCheck extends Check {
private static final List<CheckId> dependencies;
......@@ -95,15 +97,20 @@ public class NumPointsCheck extends Check {
public List<CheckId> getDependencies() {
return dependencies;
}
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_GE_R_TOO_FEW_POINTS);
}
@Override
public CheckType getType() {
return CheckType.GEOMETRY;
public RequirementType getType() {
return RequirementType.GEOMETRY;
}
@Override
public Check createNewInstance() {
return new NumPointsCheck();
return new TooFewPointsCheck();
}
@Override
......
......@@ -21,21 +21,24 @@ package de.hft.stuttgart.citydoctor2.checks.geometry;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType;
import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
/**
* This class checks minimum number of planes for a solid
* This class checks minimum number of polygons for a solid
*
* @author Matthias Betz 12bema1bif@hft-stuttgart.de
* @author Matthias Betz
*/
public class TooFewPolygonsCheck extends Check {
......@@ -59,7 +62,6 @@ public class TooFewPolygonsCheck extends Check {
* not.
*
* @param toBeCheckedGeometry The ViewableGeometry that has to be checked.
* @return Vector of CDErrors
*/
@Override
public void check(Geometry g) {
......@@ -81,10 +83,15 @@ public class TooFewPolygonsCheck extends Check {
public List<CheckId> getDependencies() {
return dependencies;
}
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_GE_S_TOO_FEW_POLYGONS);
}
@Override
public CheckType getType() {
return CheckType.GEOMETRY;
public RequirementType getType() {
return RequirementType.GEOMETRY;
}
@Override
......
......@@ -21,12 +21,15 @@ package de.hft.stuttgart.citydoctor2.checks.semantics;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType;
import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.checks.util.UnfragmentedCheck;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
......@@ -66,10 +69,15 @@ public class GroundSurfaceUnfragmented extends Check {
public List<CheckId> getDependencies() {
return dependencies;
}
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_SE_BS_GROUND_UNFRAGMENTED);
}
@Override
public CheckType getType() {
return CheckType.SEMANTIC;
public RequirementType getType() {
return RequirementType.SEMANTIC;
}
@Override
......@@ -79,7 +87,7 @@ public class GroundSurfaceUnfragmented extends Check {
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_GROUND_NOT_FRAGMENTED;
return CheckId.C_SE_BS_GROUND_NOT_FRAGMENTED;
}
}
......@@ -21,13 +21,16 @@ package de.hft.stuttgart.citydoctor2.checks.semantics;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType;
import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.NotCeilingError;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
......@@ -80,10 +83,15 @@ public class IsCeilingCheck extends Check {
public List<CheckId> getDependencies() {
return dependencies;
}
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_SE_BS_IS_CEILING);
}
@Override
public CheckType getType() {
return CheckType.SEMANTIC;
public RequirementType getType() {
return RequirementType.SEMANTIC;
}
@Override
......@@ -93,7 +101,7 @@ public class IsCeilingCheck extends Check {
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_NOT_CEILING;
return CheckId.C_SE_BS_IS_CEILING;
}
}
......@@ -21,13 +21,16 @@ package de.hft.stuttgart.citydoctor2.checks.semantics;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType;
import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.NotFloorError;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
......@@ -83,8 +86,13 @@ public class IsFloorCheck extends Check {
}
@Override
public CheckType getType() {
return CheckType.SEMANTIC;
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_SE_BS_IS_FLOOR);
}
@Override
public RequirementType getType() {
return RequirementType.SEMANTIC;
}
@Override
......@@ -94,7 +102,7 @@ public class IsFloorCheck extends Check {
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_NOT_FLOOR;
return CheckId.C_SE_BS_IS_FLOOR;
}
}
......@@ -21,13 +21,16 @@ package de.hft.stuttgart.citydoctor2.checks.semantics;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType;
import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.NotGroundError;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
......@@ -80,10 +83,15 @@ public class IsGroundCheck extends Check {
public List<CheckId> getDependencies() {
return dependencies;
}
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_SE_BS_IS_GROUND);
}
@Override
public CheckType getType() {
return CheckType.SEMANTIC;
public RequirementType getType() {
return RequirementType.SEMANTIC;
}
@Override
......@@ -93,6 +101,6 @@ public class IsGroundCheck extends Check {
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_NOT_GROUND;
return CheckId.C_SE_BS_IS_GROUND;
}
}
......@@ -22,15 +22,18 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType;
import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.DefaultParameter;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.Unit;
import de.hft.stuttgart.citydoctor2.check.error.NotWallError;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
......@@ -132,14 +135,19 @@ public class IsWallCheck extends Check {
return dependencies;
}
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_SE_BS_IS_WALL);
}
@Override
public List<DefaultParameter> getDefaultParameter() {
return defaultParameters;
}
@Override
public CheckType getType() {
return CheckType.SEMANTIC;
public RequirementType getType() {
return RequirementType.SEMANTIC;
}
@Override
......@@ -149,7 +157,7 @@ public class IsWallCheck extends Check {
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_IS_WALL;
return CheckId.C_SE_BS_IS_WALL;
}
}
......@@ -22,13 +22,16 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType;
import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.DefaultParameter;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.Unit;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.checks.util.UnfragmentedCheck;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
......@@ -91,10 +94,15 @@ public class RoofSurfaceUnfragmentedCheck extends Check {
public List<DefaultParameter> getDefaultParameter() {
return defaultParameters;
}
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_SE_BS_ROOF_UNFRAGMENTED);
}
@Override
public CheckType getType() {
return CheckType.SEMANTIC;
public RequirementType getType() {
return RequirementType.SEMANTIC;
}
@Override
......@@ -104,7 +112,7 @@ public class RoofSurfaceUnfragmentedCheck extends Check {
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_ROOF_NOT_FRAGMENTED;
return CheckId.C_SE_BS_ROOF_UNFRAGMENTED;
}
}
/*-
* Copyright 2020 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
* This file is part of CityDoctor2.
*
* CityDoctor2 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, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 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.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package de.hft.stuttgart.citydoctor2.checks.util;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class CollectionUtils {
private CollectionUtils() {
}
public static <T> Set<T> singletonSet(T v) {
HashSet<T> set = new HashSet<>(2);
set.add(v);
return set;
}
@SafeVarargs
public static <T> Set<T> asSet(T... values) {
HashSet<T> set = new HashSet<>((int) (values.length * 1.25));
set.addAll(Arrays.asList(values));
return set;
}
}
......@@ -32,10 +32,9 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import de.hft.stuttgart.citydoctor2.check.CheckConfiguration;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
import de.hft.stuttgart.citydoctor2.check.RequirementConfiguration;
import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
import de.hft.stuttgart.citydoctor2.checkresult.CheckReport;
import de.hft.stuttgart.citydoctor2.checkresult.Environment;
......@@ -115,10 +114,10 @@ public class XmlStreamReporter implements StreamReporter {
plan.setNumberOfRoundingPlaces(config.getNumberOfRoundingPlaces());
List<PlanCheck> checkConfigs = new ArrayList<>();
plan.setChecks(checkConfigs);
for (Entry<CheckId, CheckConfiguration> e : config.getChecks().entrySet()) {
for (Entry<String, RequirementConfiguration> e : config.getRequirements().entrySet()) {
PlanCheck checkConfig = new PlanCheck();
checkConfigs.add(checkConfig);
checkConfig.setName(e.getKey().toString());
checkConfig.setName(e.getKey());
if (e.getValue().isEnabled()) {
checkConfig.setActivated(true);
Map<String, String> checkParams = e.getValue().getParameters();
......
......@@ -32,7 +32,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import de.hft.stuttgart.citydoctor2.check.CheckConfiguration;
import de.hft.stuttgart.citydoctor2.check.RequirementConfiguration;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
......@@ -133,8 +133,8 @@ public class PdfStreamReporter implements StreamReporter {
if (config.getSchematronFilePath() != null && !config.getSchematronFilePath().isEmpty()) {
vp.addTextElement("Schematron file: " + config.getSchematronFilePath());
}
for (Entry<CheckId, CheckConfiguration> e : config.getChecks().entrySet()) {
String text = e.getKey().toString();
for (Entry<String, RequirementConfiguration> e : config.getRequirements().entrySet()) {
String text = e.getKey();
String color;
if (e.getValue().isEnabled()) {
text = text + " = enabled";
......
......@@ -51,8 +51,8 @@ public class CheckerTest {
@Test
public void testSchematron() throws CityGmlParseException, InvalidGmlFileException {
ValidationConfiguration config = ValidationConfiguration.loadStandardValidationConfig();
config.getChecks().get(CheckId.C_SEM_BS_ROOF_NOT_FRAGMENTED).setEnabled(false);
config.setSchematronFilePath("src/test/resources/schematronTest.xml");
config.getRequirements().get(Requirement.R_SE_BS_ROOF_UNFRAGMENTED.toString()).setEnabled(false);
config.setSchematronFilePathInGlobalParameters("src/test/resources/schematronTest.xml");
CityDoctorModel model = CityGmlParser.parseCityGmlFile(
"src/test/resources/SimpleSolid_SrefBS_SchematronTest.gml", config.getParserConfiguration());
Checker checker = new Checker(config, model);
......
......@@ -25,6 +25,7 @@ import java.io.FileNotFoundException;
import org.junit.Test;
import de.hft.stuttgart.citydoctor2.datastructure.FeatureType;
import de.hft.stuttgart.quality.model.jaxb.RequirementId;
public class ValidationConfigurationTest {
......@@ -33,33 +34,33 @@ public class ValidationConfigurationTest {
String file = "src/test/resources/testConfig.yml";
ValidationConfiguration config = ValidationConfiguration.loadValidationConfig(file);
assertEquals(8, config.getNumberOfRoundingPlaces());
assertTrue(config.getChecks().containsKey(CheckId.C_GE_R_TOO_FEW_POINTS));
assertTrue(config.getChecks().get(CheckId.C_GE_P_NON_PLANAR).isEnabled());
assertTrue(config.getRequirements().containsKey(RequirementId.R_GE_R_TOO_FEW_POINTS.toString()));
assertFalse(config.getRequirements().get(RequirementId.R_GE_P_NON_PLANAR.toString()).isEnabled());
assertNull(config.getFilter());
}
@Test
public void testLoadingConfigWithFilter() throws FileNotFoundException {
String file = "src/test/resources/testConfigWithFilter.yml";
ValidationConfiguration config = ValidationConfiguration.loadValidationConfig(file);
assertEquals(8, config.getNumberOfRoundingPlaces());
assertTrue(config.getChecks().containsKey(CheckId.C_GE_R_TOO_FEW_POINTS));
assertTrue(config.getChecks().get(CheckId.C_GE_P_NON_PLANAR).isEnabled());
assertTrue(config.getRequirements().containsKey(RequirementId.R_GE_R_TOO_FEW_POINTS.toString()));
assertFalse(config.getRequirements().get(RequirementId.R_GE_P_NON_PLANAR.toString()).isEnabled());
FilterConfiguration filterConfig = config.getFilter();
assertNotNull(filterConfig);
ExcludeFilterConfiguration excludeFilter = filterConfig.getExclude();
assertNotNull(excludeFilter);
assertTrue(excludeFilter.getIds().contains("UUID-8972-kghf-asgv"));
assertTrue(excludeFilter.getIds().contains("UUID.*"));
assertTrue(excludeFilter.getTypes().contains(FeatureType.BUILDING));
assertTrue(excludeFilter.getTypes().contains(FeatureType.VEGETATION));
IncludeFilterConfiguration includeFilter = filterConfig.getInclude();
assertNotNull(includeFilter);
assertTrue(includeFilter.getIds().contains(".*"));
assertTrue(includeFilter.getTypes().contains(FeatureType.BUILDING));
assertTrue(includeFilter.getTypes().contains(FeatureType.VEGETATION));
......
......@@ -20,13 +20,16 @@ package de.hft.stuttgart.citydoctor2.checks;
import static org.junit.Assert.assertEquals;
import java.util.Set;
import org.junit.Test;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType;
import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding;
import de.hft.stuttgart.citydoctor2.datastructure.Building;
......@@ -43,7 +46,7 @@ public class CheckContainerTest {
}
@Override
public CheckType getType() {
public RequirementType getType() {
return null;
}
......@@ -56,6 +59,11 @@ public class CheckContainerTest {
public CheckId getCheckId() {
return CheckId.C_GE_P_HOLE_OUTSIDE;
}
@Override
public Set<Requirement> appliesToRequirements() {
return null;
}
};
CheckContainer cc = new CheckContainer(c);
......
......@@ -18,7 +18,7 @@
*/
package de.hft.stuttgart.citydoctor2.checks.geometry;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.ArrayList;
......@@ -29,9 +29,7 @@ import java.util.Map;
import org.junit.Test;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.Checker;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
import de.hft.stuttgart.citydoctor2.datastructure.Building;
import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
......@@ -43,10 +41,10 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.quality.model.jaxb.RequirementId;
public class DegeneratedPolygonCheckTest {
@Test
public void testDegeneratedPolygon() {
Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1);
......@@ -65,38 +63,25 @@ public class DegeneratedPolygonCheckTest {
lr.getVertices().add(v4);
lr.getVertices().add(v1);
geom.updateEdgesAndVertices();
Building b = new Building();
b.addGeometry(geom);
ParserConfiguration config = new ParserConfiguration(8, false);
CityDoctorModel model = new CityDoctorModel(config, new File(""));
model.addBuilding(b);
// model
// Edge [from=Vertex [x=427583.301, y=6003502.571, z=9.711], to=Vertex [x=427583.304, y=6003502.574, z=9.713]],
// Edge [from=Vertex [x=427583.304, y=6003502.574, z=9.713], to=Vertex [x=427583.304, y=6003502.574, z=4.097]],
// Edge [from=Vertex [x=427583.304, y=6003502.574, z=4.097], to=Vertex [x=427583.301, y=6003502.571, z=4.097]],
// Edge [from=Vertex [x=427583.301, y=6003502.571, z=4.097], to=Vertex [x=427583.301, y=6003502.571, z=9.711]]]
// test
// Edge [from=Vertex [x=427583.301, y=6003502.571, z=9.711], to=Vertex [x=427583.304, y=6003502.574, z=9.713]],
// Edge [from=Vertex [x=427583.304, y=6003502.574, z=9.713], to=Vertex [x=427583.304, y=6003502.574, z=4.097]],
// Edge [from=Vertex [x=427583.304, y=6003502.574, z=4.097], to=Vertex [x=427583.301, y=6003502.571, z=4.097]],
// Edge [from=Vertex [x=427583.301, y=6003502.571, z=4.097], to=Vertex [x=427583.301, y=6003502.571, z=9.711]]]
// Segment3d [pointA=Vertex [x=427583.301, y=6003502.571, z=9.711], pointB=Vertex [x=427583.304, y=6003502.574, z=9.713]]
// Vertex [x=427583.301, y=6003502.571, z=9.711]
ValidationConfiguration valConfig = ValidationConfiguration.loadStandardValidationConfig();
valConfig.setMinVertexDistanceInGlobalParameters(0.004);
Map<String, String> parameters = new HashMap<>();
parameters.put("degeneratedPolygonTolerance", "0.0001");
valConfig.getChecks().get(CheckId.C_GE_P_NON_PLANAR).setParameters(parameters);
parameters.put("degeneratedPolygonTolerance", "0.004");
valConfig.getRequirements().get(RequirementId.R_GE_P_NON_PLANAR.toString()).getParameters().putAll(parameters);
Checker c = new Checker(valConfig, model);
c.runChecks();
List<CheckError> errors = new ArrayList<>();
b.collectContainedErrors(errors);
CheckError checkError = errors.get(0);
assertEquals(ErrorId.GE_P_DEGENERATED_POLYGON, checkError.getErrorId());
assertTrue(errors.isEmpty());
}
}
......@@ -107,7 +107,7 @@ public class FaceOutCheckTest {
public void testGoodGeometry() {
Geometry geom = createGoodGeometry();
FaceOutCheck foc = new FaceOutCheck();
AllPolygonsWrongOrientationCheck foc = new AllPolygonsWrongOrientationCheck();
foc.check(geom);
Assert.assertEquals(ResultStatus.OK, geom.getCheckResult(foc).getResultStatus());
......@@ -117,7 +117,7 @@ public class FaceOutCheckTest {
public void testBadGeometry() {
Geometry geom = createBadGeometry();
FaceOutCheck foc = new FaceOutCheck();
AllPolygonsWrongOrientationCheck foc = new AllPolygonsWrongOrientationCheck();
foc.check(geom);
Assert.assertEquals(ResultStatus.ERROR, geom.getCheckResult(foc).getResultStatus());
......
......@@ -53,7 +53,7 @@ public class NumPointsCheckTest {
lr.addVertex(v2);
lr.addVertex(v0);
NumPointsCheck check = new NumPointsCheck();
TooFewPointsCheck check = new TooFewPointsCheck();
ParserConfiguration config = new ParserConfiguration(8, false);
check.init(Collections.emptyMap(), config);
check.check(lr);
......@@ -79,7 +79,7 @@ public class NumPointsCheckTest {
lr.addVertex(v3);
lr.addVertex(v0);
NumPointsCheck check = new NumPointsCheck();
TooFewPointsCheck check = new TooFewPointsCheck();
ParserConfiguration config = new ParserConfiguration(8, false);
check.init(Collections.emptyMap(), config);
check.check(lr);
......
......@@ -34,6 +34,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException;
import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException;
import de.hft.stuttgart.quality.model.jaxb.RequirementId;
/**
*
......@@ -52,10 +53,10 @@ public class NonManifoldEdgeSystemTest {
@Test
public void testNonManifoldEdge2() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new HashMap<>();
Map<String, Map<String, String>> paramMap = new HashMap<>();
Map<String, String> parameter = new HashMap<>();
parameter.put("distanceTolerance", "0.1");
paramMap.put(CheckId.C_GE_P_NON_PLANAR, parameter);
paramMap.put(RequirementId.R_GE_P_NON_PLANAR.toString(), parameter);
CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-SO-0004-T0001.gml",
paramMap);
Geometry g = c.getBuildings().get(0).getGeometries().get(0);
......
......@@ -37,6 +37,7 @@ import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParser;
import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.quality.model.jaxb.RequirementId;
/**
*
......@@ -113,10 +114,10 @@ public class PlanarTest {
@Test
public void testPlanarPolygon4() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new HashMap<>();
Map<String, Map<String, String>> paramMap = new HashMap<>();
Map<String, String> parameter = new HashMap<>();
parameter.put("distanceTolerance", "0.01");
paramMap.put(CheckId.C_GE_P_NON_PLANAR, parameter);
paramMap.put(RequirementId.R_GE_P_NON_PLANAR.toString(), parameter);
CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml", paramMap);
Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.2", c);
CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR);
......@@ -126,11 +127,11 @@ public class PlanarTest {
@Test
public void testPlanarPolygon5() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new HashMap<>();
Map<String, Map<String, String>> paramMap = new HashMap<>();
Map<String, String> parameter = new HashMap<>();
parameter.put("type", "distance");
parameter.put("distanceTolerance", "0.5");
paramMap.put(CheckId.C_GE_P_NON_PLANAR, parameter);
paramMap.put(RequirementId.R_GE_P_NON_PLANAR.toString(), parameter);
CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml", paramMap);
Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.2", c);
CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR);
......@@ -139,10 +140,10 @@ public class PlanarTest {
@Test
public void testPlanarPolygon6() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new HashMap<>();
Map<String, Map<String, String>> paramMap = new HashMap<>();
Map<String, String> parameter = new HashMap<>();
parameter.put("type", "both");
paramMap.put(CheckId.C_GE_P_NON_PLANAR, parameter);
paramMap.put(RequirementId.R_GE_P_NON_PLANAR.toString(), parameter);
CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0002.gml", paramMap);
Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.1", c);
CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment