Commit a0ff9ed7 authored by Matthias Betz's avatar Matthias Betz
Browse files

Added check plugin system

parent 0a7d6299
Pipeline #1380 passed with stage
in 2 minutes and 13 seconds
......@@ -27,7 +27,6 @@ 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.Checkable;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
......@@ -41,7 +40,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
public class TooFewPolygonsCheck extends Check {
private static final List<CheckId> dependencies;
private static final List<Class<? extends Checkable>> applicableToClasses;
static {
ArrayList<CheckId> deps = new ArrayList<>();
......@@ -54,16 +52,8 @@ public class TooFewPolygonsCheck extends Check {
deps.add(CheckId.C_GE_P_NON_PLANAR);
dependencies = Collections.unmodifiableList(deps);
ArrayList<Class<? extends Checkable>> classes = new ArrayList<>();
classes.add(Geometry.class);
applicableToClasses = Collections.unmodifiableList(classes);
}
public TooFewPolygonsCheck() {
super(CheckId.C_GE_S_TOO_FEW_POLYGONS);
}
/**
* This method does the main check whether the solid have at least 4 faces or
* not.
......@@ -93,11 +83,6 @@ public class TooFewPolygonsCheck extends Check {
return dependencies;
}
@Override
public List<Class<? extends Checkable>> getApplicableToClasses() {
return applicableToClasses;
}
@Override
public CheckType getType() {
return CheckType.GEOMETRY;
......@@ -107,4 +92,9 @@ public class TooFewPolygonsCheck extends Check {
public Check createNewInstance() {
return new TooFewPolygonsCheck();
}
@Override
public CheckId getCheckId() {
return CheckId.C_GE_S_TOO_FEW_POLYGONS;
}
}
......@@ -26,7 +26,6 @@ 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.Checkable;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.checks.util.UnfragmentedCheck;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
......@@ -41,20 +40,11 @@ import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
public class GroundSurfaceUnfragmented extends Check {
private static final List<CheckId> dependencies;
private static final List<Class<? extends Checkable>> applicableToClasses;
static {
ArrayList<CheckId> deps = new ArrayList<>();
deps.add(CheckId.C_GE_R_TOO_FEW_POINTS);
dependencies = Collections.unmodifiableList(deps);
ArrayList<Class<? extends Checkable>> classes = new ArrayList<>();
classes.add(BoundarySurface.class);
applicableToClasses = Collections.unmodifiableList(classes);
}
public GroundSurfaceUnfragmented() {
super(CheckId.C_SEM_BS_GROUND_NOT_FRAGMENTED);
}
@Override
......@@ -77,11 +67,6 @@ public class GroundSurfaceUnfragmented extends Check {
return dependencies;
}
@Override
public List<Class<? extends Checkable>> getApplicableToClasses() {
return applicableToClasses;
}
@Override
public CheckType getType() {
return CheckType.SEMANTIC;
......@@ -92,4 +77,9 @@ public class GroundSurfaceUnfragmented extends Check {
return new GroundSurfaceUnfragmented();
}
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_GROUND_NOT_FRAGMENTED;
}
}
......@@ -26,7 +26,6 @@ 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.Checkable;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.NotCeilingError;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
......@@ -44,7 +43,6 @@ import de.hft.stuttgart.citydoctor2.math.Vector3d;
*/
public class IsCeilingCheck extends Check {
private static final List<Class<? extends Checkable>> applicableToClasses;
private static final List<CheckId> dependencies;
static {
......@@ -55,14 +53,6 @@ public class IsCeilingCheck extends Check {
deps.add(CheckId.C_GE_R_SELF_INTERSECTION);
deps.add(CheckId.C_GE_P_NON_PLANAR);
dependencies = Collections.unmodifiableList(deps);
ArrayList<Class<? extends Checkable>> classes = new ArrayList<>();
classes.add(BoundarySurface.class);
applicableToClasses = Collections.unmodifiableList(classes);
}
public IsCeilingCheck() {
super(CheckId.C_SEM_BS_NOT_CEILING);
}
@Override
......@@ -86,11 +76,6 @@ public class IsCeilingCheck extends Check {
bs.addCheckResult(cr);
}
@Override
public List<Class<? extends Checkable>> getApplicableToClasses() {
return applicableToClasses;
}
@Override
public List<CheckId> getDependencies() {
return dependencies;
......@@ -106,4 +91,9 @@ public class IsCeilingCheck extends Check {
return new IsCeilingCheck();
}
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_NOT_CEILING;
}
}
......@@ -26,7 +26,6 @@ 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.Checkable;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.NotFloorError;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
......@@ -45,7 +44,6 @@ import de.hft.stuttgart.citydoctor2.math.Vector3d;
*/
public class IsFloorCheck extends Check {
private static final List<Class<? extends Checkable>> applicableToClasses;
private static final List<CheckId> dependencies;
static {
......@@ -56,14 +54,6 @@ public class IsFloorCheck extends Check {
deps.add(CheckId.C_GE_R_SELF_INTERSECTION);
deps.add(CheckId.C_GE_P_NON_PLANAR);
dependencies = Collections.unmodifiableList(deps);
ArrayList<Class<? extends Checkable>> classes = new ArrayList<>();
classes.add(BoundarySurface.class);
applicableToClasses = Collections.unmodifiableList(classes);
}
public IsFloorCheck() {
super(CheckId.C_SEM_BS_NOT_FLOOR);
}
@Override
......@@ -92,11 +82,6 @@ public class IsFloorCheck extends Check {
return dependencies;
}
@Override
public List<Class<? extends Checkable>> getApplicableToClasses() {
return applicableToClasses;
}
@Override
public CheckType getType() {
return CheckType.SEMANTIC;
......@@ -107,4 +92,9 @@ public class IsFloorCheck extends Check {
return new IsFloorCheck();
}
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_NOT_FLOOR;
}
}
......@@ -26,7 +26,6 @@ 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.Checkable;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.NotGroundError;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
......@@ -44,7 +43,6 @@ import de.hft.stuttgart.citydoctor2.math.Vector3d;
*/
public class IsGroundCheck extends Check {
private static final List<Class<? extends Checkable>> applicableToClasses;
private static final List<CheckId> dependencies;
static {
......@@ -55,14 +53,6 @@ public class IsGroundCheck extends Check {
deps.add(CheckId.C_GE_R_SELF_INTERSECTION);
deps.add(CheckId.C_GE_P_NON_PLANAR);
dependencies = Collections.unmodifiableList(deps);
ArrayList<Class<? extends Checkable>> classes = new ArrayList<>();
classes.add(BoundarySurface.class);
applicableToClasses = Collections.unmodifiableList(classes);
}
public IsGroundCheck() {
super(CheckId.C_SEM_BS_NOT_GROUND);
}
@Override
......@@ -86,11 +76,6 @@ public class IsGroundCheck extends Check {
bs.addCheckResult(cr);
}
@Override
public List<Class<? extends Checkable>> getApplicableToClasses() {
return applicableToClasses;
}
@Override
public List<CheckId> getDependencies() {
return dependencies;
......@@ -105,4 +90,9 @@ public class IsGroundCheck extends Check {
public Check createNewInstance() {
return new IsGroundCheck();
}
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_NOT_GROUND;
}
}
......@@ -27,7 +27,6 @@ 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.Checkable;
import de.hft.stuttgart.citydoctor2.check.DefaultParameter;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.Unit;
......@@ -52,7 +51,6 @@ public class IsWallCheck extends Check {
private static final String LOWER_ANGLE_NAME = "lowerAngle";
private static final String UPPER_ANGLE_NAME = "upperAngle";
private static final List<Class<? extends Checkable>> applicableToClasses;
private static final List<CheckId> dependencies;
private static final List<DefaultParameter> defaultParameters;
......@@ -65,10 +63,6 @@ public class IsWallCheck extends Check {
deps.add(CheckId.C_GE_P_NON_PLANAR);
dependencies = Collections.unmodifiableList(deps);
ArrayList<Class<? extends Checkable>> classes = new ArrayList<>();
classes.add(BoundarySurface.class);
applicableToClasses = Collections.unmodifiableList(classes);
ArrayList<DefaultParameter> defParameters = new ArrayList<>(3);
defParameters.add(new DefaultParameter(LOWER_ANGLE_NAME, "45", Unit.DEGREE));
defParameters.add(new DefaultParameter(UPPER_ANGLE_NAME, "135", Unit.DEGREE));
......@@ -84,10 +78,6 @@ public class IsWallCheck extends Check {
private double lowerAngleCos = Math.cos(45 * Math.PI / 180);
private double upperAngleCos = Math.cos(135 * Math.PI / 180);
public IsWallCheck() {
super(CheckId.C_SEM_BS_IS_WALL);
}
@Override
public void init(Map<String, String> params, ParserConfiguration config) {
String lowerAngleString = params.get(LOWER_ANGLE_NAME);
......@@ -137,11 +127,6 @@ public class IsWallCheck extends Check {
bs.addCheckResult(cr);
}
@Override
public List<Class<? extends Checkable>> getApplicableToClasses() {
return applicableToClasses;
}
@Override
public List<CheckId> getDependencies() {
return dependencies;
......@@ -162,4 +147,9 @@ public class IsWallCheck extends Check {
return new IsWallCheck();
}
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_IS_WALL;
}
}
......@@ -27,7 +27,6 @@ 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.Checkable;
import de.hft.stuttgart.citydoctor2.check.DefaultParameter;
import de.hft.stuttgart.citydoctor2.check.Unit;
import de.hft.stuttgart.citydoctor2.checks.util.UnfragmentedCheck;
......@@ -44,7 +43,6 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
public class RoofSurfaceUnfragmentedCheck extends Check {
private static final List<CheckId> dependencies;
private static final List<Class<? extends Checkable>> applicableToClasses;
private static final List<DefaultParameter> defaultParameters;
private static final String MAX_ANGLE_DEVIATION = "maxAngleDeviation";
......@@ -63,14 +61,6 @@ public class RoofSurfaceUnfragmentedCheck extends Check {
deps.add(CheckId.C_GE_R_SELF_INTERSECTION);
deps.add(CheckId.C_GE_P_NON_PLANAR);
dependencies = Collections.unmodifiableList(deps);
ArrayList<Class<? extends Checkable>> classes = new ArrayList<>();
classes.add(BoundarySurface.class);
applicableToClasses = Collections.unmodifiableList(classes);
}
public RoofSurfaceUnfragmentedCheck() {
super(CheckId.C_SEM_BS_ROOF_NOT_FRAGMENTED);
}
@Override
......@@ -97,11 +87,6 @@ public class RoofSurfaceUnfragmentedCheck extends Check {
return dependencies;
}
@Override
public List<Class<? extends Checkable>> getApplicableToClasses() {
return applicableToClasses;
}
@Override
public List<DefaultParameter> getDefaultParameter() {
return defaultParameters;
......@@ -117,4 +102,9 @@ public class RoofSurfaceUnfragmentedCheck extends Check {
return new RoofSurfaceUnfragmentedCheck();
}
@Override
public CheckId getCheckId() {
return CheckId.C_SEM_BS_ROOF_NOT_FRAGMENTED;
}
}
......@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.reporting.pdf;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
......@@ -113,7 +112,7 @@ public class PdfStreamReporter implements StreamReporter {
public PdfStreamReporter(OutputStream pdfOutputFile, String fileName, ValidationConfiguration config,
String logoPath) {
this.config = config;
errorStatistics = new EnumMap<>(ErrorId.class);
errorStatistics = new HashMap<>();
outFile = pdfOutputFile;
report = new PdfReport(logoPath);
report.writeSourceFileName(fileName);
......
......@@ -20,15 +20,12 @@ package de.hft.stuttgart.citydoctor2.checks;
import static org.junit.Assert.assertEquals;
import java.util.List;
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.Checkable;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding;
......@@ -38,13 +35,8 @@ public class CheckContainerTest {
@Test
public void testExceptionCheck() {
Check c = new Check(CheckId.C_GE_P_HOLE_OUTSIDE) {
Check c = new Check() {
@Override
public List<Class<? extends Checkable>> getApplicableToClasses() {
return null;
}
@Override
public void check(AbstractBuilding ab) {
throw new RuntimeException();
......@@ -59,6 +51,11 @@ public class CheckContainerTest {
public Check createNewInstance() {
return null;
}
@Override
public CheckId getCheckId() {
return CheckId.C_GE_P_HOLE_OUTSIDE;
}
};
CheckContainer cc = new CheckContainer(c);
......
......@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.systemtest;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;
......@@ -53,7 +52,7 @@ public class NonManifoldEdgeSystemTest {
@Test
public void testNonManifoldEdge2() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new EnumMap<>(CheckId.class);
Map<CheckId, 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);
......
......@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.systemtest;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;
......@@ -35,9 +34,9 @@ import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParser;
import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
/**
*
......@@ -114,7 +113,7 @@ public class PlanarTest {
@Test
public void testPlanarPolygon4() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new EnumMap<>(CheckId.class);
Map<CheckId, 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);
......@@ -127,7 +126,7 @@ public class PlanarTest {
@Test
public void testPlanarPolygon5() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new EnumMap<>(CheckId.class);
Map<CheckId, Map<String, String>> paramMap = new HashMap<>();
Map<String, String> parameter = new HashMap<>();
parameter.put("type", "distance");
parameter.put("distanceTolerance", "0.5");
......@@ -140,7 +139,7 @@ public class PlanarTest {
@Test
public void testPlanarPolygon6() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new EnumMap<>(CheckId.class);
Map<CheckId, 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);
......
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