Commit 1da24add authored by Matthias Betz's avatar Matthias Betz
Browse files

Merge branch 'CheckEngineRework' into 'master'

Check engine rework

See merge request betzms/citydoctor2!4
parents 09470a4d cd494d75
Pipeline #2115 passed with stage
in 2 minutes and 53 seconds
...@@ -21,22 +21,25 @@ package de.hft.stuttgart.citydoctor2.checks.geometry; ...@@ -21,22 +21,25 @@ package de.hft.stuttgart.citydoctor2.checks.geometry;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; 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.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError; import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
/** /**
* CP_CLOSE checks the closeness a linear ring. A linear ring must end where it * C_GE_R_NOT_CLOSED checks the closeness a linear ring. A linear ring must end where it
* started. * started.
* *
* @author Matthias Betz - 12bema1bif@hft-stuttgart.de * @author Matthias Betz
* *
*/ */
public class RingNotClosedCheck extends Check { public class RingNotClosedCheck extends Check {
...@@ -69,8 +72,13 @@ public class RingNotClosedCheck extends Check { ...@@ -69,8 +72,13 @@ public class RingNotClosedCheck extends Check {
} }
@Override @Override
public CheckType getType() { public RequirementType getType() {
return CheckType.GEOMETRY; return RequirementType.GEOMETRY;
}
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_GE_R_NOT_CLOSED);
} }
@Override @Override
......
...@@ -22,15 +22,19 @@ import java.util.ArrayList; ...@@ -22,15 +22,19 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; 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.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError; import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError;
import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError; import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError;
import de.hft.stuttgart.citydoctor2.checks.Checks;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.Edge; import de.hft.stuttgart.citydoctor2.datastructure.Edge;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
...@@ -39,14 +43,19 @@ import de.hft.stuttgart.citydoctor2.math.DistanceResult; ...@@ -39,14 +43,19 @@ import de.hft.stuttgart.citydoctor2.math.DistanceResult;
import de.hft.stuttgart.citydoctor2.math.Segment3d; import de.hft.stuttgart.citydoctor2.math.Segment3d;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
/**
* Checks whether a ring self intersects. Also checks if a point is too close to
* an edge of the ring.
*
* @author Matthias Betz
*
*/
public class RingSelfIntCheck extends Check { public class RingSelfIntCheck extends Check {
private static final String EPSILON_NAME = "minVertexDistance"; private static final String EPSILON_NAME = "minVertexDistance";
private static final List<CheckId> dependencies; private static final List<CheckId> dependencies;
static { static {
ArrayList<CheckId> deps = new ArrayList<>(); ArrayList<CheckId> deps = new ArrayList<>();
deps.add(CheckId.C_GE_R_TOO_FEW_POINTS); deps.add(CheckId.C_GE_R_TOO_FEW_POINTS);
...@@ -55,14 +64,12 @@ public class RingSelfIntCheck extends Check { ...@@ -55,14 +64,12 @@ public class RingSelfIntCheck extends Check {
dependencies = Collections.unmodifiableList(deps); dependencies = Collections.unmodifiableList(deps);
} }
private double epsilon = 0.0001; private double epsilon = Checks.MIN_VERTEX_DISTANCE_DEFAULT;
@Override @Override
public void init(Map<String, String> parameters, ParserConfiguration config) { public void init(Map<String, String> parameters, ParserConfiguration config) {
String epsilonString = parameters.get(EPSILON_NAME); String epsilonString = parameters.get(EPSILON_NAME);
if (epsilonString == null) { if (epsilonString != null) {
epsilon = 0.0001;
} else {
epsilon = Double.parseDouble(epsilonString); epsilon = Double.parseDouble(epsilonString);
} }
} }
...@@ -74,16 +81,16 @@ public class RingSelfIntCheck extends Check { ...@@ -74,16 +81,16 @@ public class RingSelfIntCheck extends Check {
private void checkRingJava(LinearRing lr) { private void checkRingJava(LinearRing lr) {
List<Edge> edges = getEdgesForRing(lr); List<Edge> edges = getEdgesForRing(lr);
for (Edge e : edges) { for (Edge e : edges) {
if (checkForPointsTouchingEdge(lr, e)) { if (checkForPointsTouchingEdge(lr, e)) {
return; return;
} }
} }
for (int i = 0; i < edges.size() - 1; i++) { for (int i = 0; i < edges.size() - 1; i++) {
Edge e1 = edges.get(i); Edge e1 = edges.get(i);
for (int j = i + 1; j < edges.size(); j++) { for (int j = i + 1; j < edges.size(); j++) {
Edge e2 = edges.get(j); Edge e2 = edges.get(j);
if (e1.getConnectionPoint(e2) != null) { if (e1.getConnectionPoint(e2) != null) {
...@@ -101,7 +108,7 @@ public class RingSelfIntCheck extends Check { ...@@ -101,7 +108,7 @@ public class RingSelfIntCheck extends Check {
} }
} }
} }
// no errors detected // no errors detected
CheckResult cr = new CheckResult(this, ResultStatus.OK, null); CheckResult cr = new CheckResult(this, ResultStatus.OK, null);
lr.addCheckResult(cr); lr.addCheckResult(cr);
...@@ -141,8 +148,13 @@ public class RingSelfIntCheck extends Check { ...@@ -141,8 +148,13 @@ public class RingSelfIntCheck extends Check {
} }
@Override @Override
public CheckType getType() { public Set<Requirement> appliesToRequirements() {
return CheckType.GEOMETRY; return CollectionUtils.singletonSet(Requirement.R_GE_R_SELF_INTERSECTION);
}
@Override
public RequirementType getType() {
return RequirementType.GEOMETRY;
} }
@Override @Override
......
...@@ -21,14 +21,17 @@ package de.hft.stuttgart.citydoctor2.checks.geometry; ...@@ -21,14 +21,17 @@ package de.hft.stuttgart.citydoctor2.checks.geometry;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; 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.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.SolidNotClosedError; import de.hft.stuttgart.citydoctor2.check.error.SolidNotClosedError;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.Edge; import de.hft.stuttgart.citydoctor2.datastructure.Edge;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType; import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
...@@ -37,8 +40,9 @@ import de.hft.stuttgart.citydoctor2.datastructure.GeometryType; ...@@ -37,8 +40,9 @@ import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
* This class detects half edges without neighbor, i.e. holes in solid * This class detects half edges without neighbor, i.e. holes in solid
* geometries * geometries
* *
* @author dwagner, alam * @author dwagner
* @author Matthias Betz - 12bema1bif@hft-stuttgart.de * @author alam
* @author Matthias Betz
*/ */
public class SolidNotClosedCheck extends Check { public class SolidNotClosedCheck extends Check {
...@@ -87,10 +91,15 @@ public class SolidNotClosedCheck extends Check { ...@@ -87,10 +91,15 @@ public class SolidNotClosedCheck extends Check {
public List<CheckId> getDependencies() { public List<CheckId> getDependencies() {
return dependencies; return dependencies;
} }
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_GE_S_NOT_CLOSED);
}
@Override @Override
public CheckType getType() { public RequirementType getType() {
return CheckType.GEOMETRY; return RequirementType.GEOMETRY;
} }
@Override @Override
......
...@@ -21,15 +21,18 @@ package de.hft.stuttgart.citydoctor2.checks.geometry; ...@@ -21,15 +21,18 @@ package de.hft.stuttgart.citydoctor2.checks.geometry;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; 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.GeometrySelfIntersection;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.ResultStatus; import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError; 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.checks.util.SelfIntersectionUtil;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType; import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
...@@ -98,10 +101,15 @@ public class SolidSelfIntCheck extends Check { ...@@ -98,10 +101,15 @@ public class SolidSelfIntCheck extends Check {
public List<CheckId> getDependencies() { public List<CheckId> getDependencies() {
return dependencies; return dependencies;
} }
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_GE_S_SELF_INTERSECTION);
}
@Override @Override
public CheckType getType() { public RequirementType getType() {
return CheckType.GEOMETRY; return RequirementType.GEOMETRY;
} }
@Override @Override
......
...@@ -28,23 +28,25 @@ import de.hft.stuttgart.citydoctor2.check.Check; ...@@ -28,23 +28,25 @@ import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; 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.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError; 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.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; 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/> * three vertices are minimum for a linear ring. <br/>
* <br/> * <br/>
* <b>Dependency:</b> <br/> * <b>Dependency:</b> <br/>
* <dd> * <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; private static final List<CheckId> dependencies;
...@@ -95,15 +97,20 @@ public class NumPointsCheck extends Check { ...@@ -95,15 +97,20 @@ public class NumPointsCheck extends Check {
public List<CheckId> getDependencies() { public List<CheckId> getDependencies() {
return dependencies; return dependencies;
} }
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_GE_R_TOO_FEW_POINTS);
}
@Override @Override
public CheckType getType() { public RequirementType getType() {
return CheckType.GEOMETRY; return RequirementType.GEOMETRY;
} }
@Override @Override
public Check createNewInstance() { public Check createNewInstance() {
return new NumPointsCheck(); return new TooFewPointsCheck();
} }
@Override @Override
......
...@@ -21,21 +21,24 @@ package de.hft.stuttgart.citydoctor2.checks.geometry; ...@@ -21,21 +21,24 @@ package de.hft.stuttgart.citydoctor2.checks.geometry;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; 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.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError; 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.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType; 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 { public class TooFewPolygonsCheck extends Check {
...@@ -59,7 +62,6 @@ public class TooFewPolygonsCheck extends Check { ...@@ -59,7 +62,6 @@ public class TooFewPolygonsCheck extends Check {
* not. * not.
* *
* @param toBeCheckedGeometry The ViewableGeometry that has to be checked. * @param toBeCheckedGeometry The ViewableGeometry that has to be checked.
* @return Vector of CDErrors
*/ */
@Override @Override
public void check(Geometry g) { public void check(Geometry g) {
...@@ -81,10 +83,15 @@ public class TooFewPolygonsCheck extends Check { ...@@ -81,10 +83,15 @@ public class TooFewPolygonsCheck extends Check {
public List<CheckId> getDependencies() { public List<CheckId> getDependencies() {
return dependencies; return dependencies;
} }
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_GE_S_TOO_FEW_POLYGONS);
}
@Override @Override
public CheckType getType() { public RequirementType getType() {
return CheckType.GEOMETRY; return RequirementType.GEOMETRY;
} }
@Override @Override
......
...@@ -21,12 +21,15 @@ package de.hft.stuttgart.citydoctor2.checks.semantics; ...@@ -21,12 +21,15 @@ package de.hft.stuttgart.citydoctor2.checks.semantics;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; 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.ResultStatus;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.checks.util.UnfragmentedCheck; import de.hft.stuttgart.citydoctor2.checks.util.UnfragmentedCheck;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface; import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType; import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
...@@ -66,10 +69,15 @@ public class GroundSurfaceUnfragmented extends Check { ...@@ -66,10 +69,15 @@ public class GroundSurfaceUnfragmented extends Check {
public List<CheckId> getDependencies() { public List<CheckId> getDependencies() {
return dependencies; return dependencies;
} }
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_SE_BS_GROUND_UNFRAGMENTED);
}
@Override @Override
public CheckType getType() { public RequirementType getType() {
return CheckType.SEMANTIC; return RequirementType.SEMANTIC;
} }
@Override @Override
...@@ -79,7 +87,7 @@ public class GroundSurfaceUnfragmented extends Check { ...@@ -79,7 +87,7 @@ public class GroundSurfaceUnfragmented extends Check {
@Override @Override
public CheckId getCheckId() { 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; ...@@ -21,13 +21,16 @@ package de.hft.stuttgart.citydoctor2.checks.semantics;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; 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.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.NotCeilingError; 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.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType; import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
...@@ -80,10 +83,15 @@ public class IsCeilingCheck extends Check { ...@@ -80,10 +83,15 @@ public class IsCeilingCheck extends Check {
public List<CheckId> getDependencies() { public List<CheckId> getDependencies() {
return dependencies; return dependencies;
} }
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_SE_BS_IS_CEILING);
}
@Override @Override
public CheckType getType() { public RequirementType getType() {
return CheckType.SEMANTIC; return RequirementType.SEMANTIC;
} }
@Override @Override
...@@ -93,7 +101,7 @@ public class IsCeilingCheck extends Check { ...@@ -93,7 +101,7 @@ public class IsCeilingCheck extends Check {
@Override @Override
public CheckId getCheckId() { 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; ...@@ -21,13 +21,16 @@ package de.hft.stuttgart.citydoctor2.checks.semantics;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; 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.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.NotFloorError; 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.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType; import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
...@@ -83,8 +86,13 @@ public class IsFloorCheck extends Check { ...@@ -83,8 +86,13 @@ public class IsFloorCheck extends Check {
} }
@Override @Override
public CheckType getType() { public Set<Requirement> appliesToRequirements() {
return CheckType.SEMANTIC; return CollectionUtils.singletonSet(Requirement.R_SE_BS_IS_FLOOR);
}
@Override
public RequirementType getType() {
return RequirementType.SEMANTIC;
} }
@Override @Override
...@@ -94,7 +102,7 @@ public class IsFloorCheck extends Check { ...@@ -94,7 +102,7 @@ public class IsFloorCheck extends Check {
@Override @Override
public CheckId getCheckId() { 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; ...@@ -21,13 +21,16 @@ package de.hft.stuttgart.citydoctor2.checks.semantics;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; 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.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.NotGroundError; 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.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType; import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
...@@ -80,10 +83,15 @@ public class IsGroundCheck extends Check { ...@@ -80,10 +83,15 @@ public class IsGroundCheck extends Check {
public List<CheckId> getDependencies() { public List<CheckId> getDependencies() {
return dependencies; return dependencies;
} }
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_SE_BS_IS_GROUND);
}
@Override @Override
public CheckType getType() { public RequirementType getType() {
return CheckType.SEMANTIC; return RequirementType.SEMANTIC;
} }
@Override @Override
...@@ -93,6 +101,6 @@ public class IsGroundCheck extends Check { ...@@ -93,6 +101,6 @@ public class IsGroundCheck extends Check {
@Override @Override
public CheckId getCheckId() { public CheckId getCheckId() {
return CheckId.C_SEM_BS_NOT_GROUND; return CheckId.C_SE_BS_IS_GROUND;
} }
} }
...@@ -22,15 +22,16 @@ import java.util.ArrayList; ...@@ -22,15 +22,16 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType; import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.DefaultParameter; import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.ResultStatus; 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.check.error.NotWallError;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface; import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType; import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
...@@ -52,7 +53,6 @@ public class IsWallCheck extends Check { ...@@ -52,7 +53,6 @@ public class IsWallCheck extends Check {
private static final String UPPER_ANGLE_NAME = "upperAngle"; private static final String UPPER_ANGLE_NAME = "upperAngle";
private static final List<CheckId> dependencies; private static final List<CheckId> dependencies;
private static final List<DefaultParameter> defaultParameters;
static { static {
ArrayList<CheckId> deps = new ArrayList<>(); ArrayList<CheckId> deps = new ArrayList<>();
...@@ -63,10 +63,6 @@ public class IsWallCheck extends Check { ...@@ -63,10 +63,6 @@ public class IsWallCheck extends Check {
deps.add(CheckId.C_GE_P_NON_PLANAR); deps.add(CheckId.C_GE_P_NON_PLANAR);
dependencies = Collections.unmodifiableList(deps); dependencies = Collections.unmodifiableList(deps);
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));
defaultParameters = Collections.unmodifiableList(defParameters);
} }
private static final Vector3d Z_AXIS = new Vector3d(0, 0, 1); private static final Vector3d Z_AXIS = new Vector3d(0, 0, 1);
...@@ -133,13 +129,13 @@ public class IsWallCheck extends Check { ...@@ -133,13 +129,13 @@ public class IsWallCheck extends Check {
} }
@Override @Override
public List<DefaultParameter> getDefaultParameter() { public Set<Requirement> appliesToRequirements() {
return defaultParameters; return CollectionUtils.singletonSet(Requirement.R_SE_BS_IS_WALL);
} }
@Override @Override
public CheckType getType() { public RequirementType getType() {
return CheckType.SEMANTIC; return RequirementType.SEMANTIC;
} }
@Override @Override
...@@ -149,7 +145,7 @@ public class IsWallCheck extends Check { ...@@ -149,7 +145,7 @@ public class IsWallCheck extends Check {
@Override @Override
public CheckId getCheckId() { public CheckId getCheckId() {
return CheckId.C_SEM_BS_IS_WALL; return CheckId.C_SE_BS_IS_WALL;
} }
} }
...@@ -22,13 +22,14 @@ import java.util.ArrayList; ...@@ -22,13 +22,14 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckType; import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.DefaultParameter; import de.hft.stuttgart.citydoctor2.check.RequirementType;
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.checks.util.UnfragmentedCheck;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface; import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType; import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType;
...@@ -43,17 +44,12 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; ...@@ -43,17 +44,12 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
public class RoofSurfaceUnfragmentedCheck extends Check { public class RoofSurfaceUnfragmentedCheck extends Check {
private static final List<CheckId> dependencies; private static final List<CheckId> dependencies;
private static final List<DefaultParameter> defaultParameters;
private static final String MAX_ANGLE_DEVIATION = "maxAngleDeviation"; private static final String MAX_ANGLE_DEVIATION = "maxAngleDeviation";
private double maxAngleDeviation = Math.toRadians(1); private double maxAngleDeviation = Math.toRadians(1);
static { static {
ArrayList<DefaultParameter> defParameters = new ArrayList<>(3);
defParameters.add(new DefaultParameter(MAX_ANGLE_DEVIATION, "1", Unit.DEGREE));
defaultParameters = Collections.unmodifiableList(defParameters);
ArrayList<CheckId> deps = new ArrayList<>(); ArrayList<CheckId> deps = new ArrayList<>();
deps.add(CheckId.C_GE_R_TOO_FEW_POINTS); deps.add(CheckId.C_GE_R_TOO_FEW_POINTS);
deps.add(CheckId.C_GE_R_NOT_CLOSED); deps.add(CheckId.C_GE_R_NOT_CLOSED);
...@@ -88,13 +84,13 @@ public class RoofSurfaceUnfragmentedCheck extends Check { ...@@ -88,13 +84,13 @@ public class RoofSurfaceUnfragmentedCheck extends Check {
} }
@Override @Override
public List<DefaultParameter> getDefaultParameter() { public Set<Requirement> appliesToRequirements() {
return defaultParameters; return CollectionUtils.singletonSet(Requirement.R_SE_BS_ROOF_UNFRAGMENTED);
} }
@Override @Override
public CheckType getType() { public RequirementType getType() {
return CheckType.SEMANTIC; return RequirementType.SEMANTIC;
} }
@Override @Override
...@@ -104,7 +100,7 @@ public class RoofSurfaceUnfragmentedCheck extends Check { ...@@ -104,7 +100,7 @@ public class RoofSurfaceUnfragmentedCheck extends Check {
@Override @Override
public CheckId getCheckId() { 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; ...@@ -32,10 +32,9 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; 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.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.ErrorType; 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.check.ValidationConfiguration;
import de.hft.stuttgart.citydoctor2.checkresult.CheckReport; import de.hft.stuttgart.citydoctor2.checkresult.CheckReport;
import de.hft.stuttgart.citydoctor2.checkresult.Environment; import de.hft.stuttgart.citydoctor2.checkresult.Environment;
...@@ -115,10 +114,10 @@ public class XmlStreamReporter implements StreamReporter { ...@@ -115,10 +114,10 @@ public class XmlStreamReporter implements StreamReporter {
plan.setNumberOfRoundingPlaces(config.getNumberOfRoundingPlaces()); plan.setNumberOfRoundingPlaces(config.getNumberOfRoundingPlaces());
List<PlanCheck> checkConfigs = new ArrayList<>(); List<PlanCheck> checkConfigs = new ArrayList<>();
plan.setChecks(checkConfigs); plan.setChecks(checkConfigs);
for (Entry<CheckId, CheckConfiguration> e : config.getChecks().entrySet()) { for (Entry<String, RequirementConfiguration> e : config.getRequirements().entrySet()) {
PlanCheck checkConfig = new PlanCheck(); PlanCheck checkConfig = new PlanCheck();
checkConfigs.add(checkConfig); checkConfigs.add(checkConfig);
checkConfig.setName(e.getKey().toString()); checkConfig.setName(e.getKey());
if (e.getValue().isEnabled()) { if (e.getValue().isEnabled()) {
checkConfig.setActivated(true); checkConfig.setActivated(true);
Map<String, String> checkParams = e.getValue().getParameters(); Map<String, String> checkParams = e.getValue().getParameters();
......
...@@ -41,6 +41,10 @@ import org.apache.fop.apps.FOPException; ...@@ -41,6 +41,10 @@ import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop; import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory; import org.apache.fop.apps.FopFactory;
import org.apache.fop.events.EventFormatter;
import org.apache.fop.events.model.EventSeverity;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.xmlgraphics.util.MimeConstants; import org.apache.xmlgraphics.util.MimeConstants;
import org.jdom2.Document; import org.jdom2.Document;
import org.jdom2.Element; import org.jdom2.Element;
...@@ -57,6 +61,8 @@ import de.hft.stuttgart.citydoctor2.checkresult.utility.CheckReportWriteExceptio ...@@ -57,6 +61,8 @@ import de.hft.stuttgart.citydoctor2.checkresult.utility.CheckReportWriteExceptio
*/ */
public class PdfReport { public class PdfReport {
private static final Logger logger = LogManager.getLogger(PdfReport.class);
private static final String FRONT_PAGE = "front-page"; private static final String FRONT_PAGE = "front-page";
private static final String REGION_BODY = "region-body"; private static final String REGION_BODY = "region-body";
private static final String MASTER_NAME = "master-name"; private static final String MASTER_NAME = "master-name";
...@@ -160,16 +166,28 @@ public class PdfReport { ...@@ -160,16 +166,28 @@ public class PdfReport {
try { try {
FOUserAgent userAgent = FOP_FACTORY.newFOUserAgent(); FOUserAgent userAgent = FOP_FACTORY.newFOUserAgent();
userAgent.getEventBroadcaster().addEventListener(event -> {
EventSeverity severity = event.getSeverity();
String msg = EventFormatter.format(event);
if (severity == EventSeverity.ERROR) {
logger.error(msg);
} else if (severity == EventSeverity.FATAL) {
logger.fatal(msg);
} else if (severity == EventSeverity.INFO) {
logger.info(msg);
} else if (severity == EventSeverity.WARN) {
logger.warn(msg);
}
});
Fop fop = FOP_FACTORY.newFop(MimeConstants.MIME_PDF, userAgent, outFile); Fop fop = FOP_FACTORY.newFop(MimeConstants.MIME_PDF, userAgent, outFile);
TransformerFactory factory = TransformerFactory.newInstance(); TransformerFactory factory = TransformerFactory.newInstance();
// deactivate external dtds because of security issues // deactivate external dtds because of security issues
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
// identity transformer // identity transformer
Transformer transformer = factory.newTransformer(); Transformer transformer = factory.newTransformer();
DOMOutputter domOutputter = new DOMOutputter(); DOMOutputter domOutputter = new DOMOutputter();
Source src = new DOMSource(domOutputter.output(doc)); Source src = new DOMSource(domOutputter.output(doc));
Result res = new SAXResult(fop.getDefaultHandler()); Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res); transformer.transform(src, res);
......
...@@ -32,7 +32,7 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -32,7 +32,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; 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.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.check.CheckResult;
...@@ -133,8 +133,8 @@ public class PdfStreamReporter implements StreamReporter { ...@@ -133,8 +133,8 @@ public class PdfStreamReporter implements StreamReporter {
if (config.getSchematronFilePath() != null && !config.getSchematronFilePath().isEmpty()) { if (config.getSchematronFilePath() != null && !config.getSchematronFilePath().isEmpty()) {
vp.addTextElement("Schematron file: " + config.getSchematronFilePath()); vp.addTextElement("Schematron file: " + config.getSchematronFilePath());
} }
for (Entry<CheckId, CheckConfiguration> e : config.getChecks().entrySet()) { for (Entry<String, RequirementConfiguration> e : config.getRequirements().entrySet()) {
String text = e.getKey().toString(); String text = e.getKey();
String color; String color;
if (e.getValue().isEnabled()) { if (e.getValue().isEnabled()) {
text = text + " = enabled"; text = text + " = enabled";
......
...@@ -29,6 +29,10 @@ import org.jdom2.Namespace; ...@@ -29,6 +29,10 @@ import org.jdom2.Namespace;
*/ */
public class PdfUtils { public class PdfUtils {
private static final String HEIGHT_STRING = "height";
private static final String WIDTH_STRING = "width";
private static final Namespace svgNs = Namespace.getNamespace("svg", "http://www.w3.org/2000/svg"); private static final Namespace svgNs = Namespace.getNamespace("svg", "http://www.w3.org/2000/svg");
private static final int WIDTH = 450; private static final int WIDTH = 450;
...@@ -46,8 +50,8 @@ public class PdfUtils { ...@@ -46,8 +50,8 @@ public class PdfUtils {
String val2LengthString = "" + val2Length; String val2LengthString = "" + val2Length;
Element svgElement = new Element("svg", svgNs); Element svgElement = new Element("svg", svgNs);
svgElement.setAttribute("width", "450px"); svgElement.setAttribute(WIDTH_STRING, "450px");
svgElement.setAttribute("height", "30px"); svgElement.setAttribute(HEIGHT_STRING, "30px");
if (val1 > 0) { if (val1 > 0) {
Element gVal1Style = new Element("g", svgNs); Element gVal1Style = new Element("g", svgNs);
...@@ -58,8 +62,8 @@ public class PdfUtils { ...@@ -58,8 +62,8 @@ public class PdfUtils {
gVal1Style.addContent(val1Rect); gVal1Style.addContent(val1Rect);
val1Rect.setAttribute("x", "0"); val1Rect.setAttribute("x", "0");
val1Rect.setAttribute("y", "0"); val1Rect.setAttribute("y", "0");
val1Rect.setAttribute("width", val1LengthString); val1Rect.setAttribute(WIDTH_STRING, val1LengthString);
val1Rect.setAttribute("height", "30"); val1Rect.setAttribute(HEIGHT_STRING, "30");
Element val1Text = new Element("text", svgNs); Element val1Text = new Element("text", svgNs);
svgElement.addContent(val1Text); svgElement.addContent(val1Text);
val1Text.setAttribute("x", "5"); val1Text.setAttribute("x", "5");
...@@ -76,8 +80,8 @@ public class PdfUtils { ...@@ -76,8 +80,8 @@ public class PdfUtils {
gVal2Style.addContent(val2Rect); gVal2Style.addContent(val2Rect);
val2Rect.setAttribute("x", val1LengthString); val2Rect.setAttribute("x", val1LengthString);
val2Rect.setAttribute("y", "0"); val2Rect.setAttribute("y", "0");
val2Rect.setAttribute("width", val2LengthString); val2Rect.setAttribute(WIDTH_STRING, val2LengthString);
val2Rect.setAttribute("height", "30"); val2Rect.setAttribute(HEIGHT_STRING, "30");
Element val2Text = new Element("text", svgNs); Element val2Text = new Element("text", svgNs);
svgElement.addContent(val2Text); svgElement.addContent(val2Text);
String val2String = "" + val2; String val2String = "" + val2;
......
...@@ -51,8 +51,8 @@ public class CheckerTest { ...@@ -51,8 +51,8 @@ public class CheckerTest {
@Test @Test
public void testSchematron() throws CityGmlParseException, InvalidGmlFileException { public void testSchematron() throws CityGmlParseException, InvalidGmlFileException {
ValidationConfiguration config = ValidationConfiguration.loadStandardValidationConfig(); ValidationConfiguration config = ValidationConfiguration.loadStandardValidationConfig();
config.getChecks().get(CheckId.C_SEM_BS_ROOF_NOT_FRAGMENTED).setEnabled(false); config.getRequirements().get(Requirement.R_SE_BS_ROOF_UNFRAGMENTED.toString()).setEnabled(false);
config.setSchematronFilePath("src/test/resources/schematronTest.xml"); config.setSchematronFilePathInGlobalParameters("src/test/resources/schematronTest.xml");
CityDoctorModel model = CityGmlParser.parseCityGmlFile( CityDoctorModel model = CityGmlParser.parseCityGmlFile(
"src/test/resources/SimpleSolid_SrefBS_SchematronTest.gml", config.getParserConfiguration()); "src/test/resources/SimpleSolid_SrefBS_SchematronTest.gml", config.getParserConfiguration());
Checker checker = new Checker(config, model); Checker checker = new Checker(config, model);
......
...@@ -25,6 +25,7 @@ import java.io.FileNotFoundException; ...@@ -25,6 +25,7 @@ import java.io.FileNotFoundException;
import org.junit.Test; import org.junit.Test;
import de.hft.stuttgart.citydoctor2.datastructure.FeatureType; import de.hft.stuttgart.citydoctor2.datastructure.FeatureType;
import de.hft.stuttgart.quality.model.jaxb.RequirementId;
public class ValidationConfigurationTest { public class ValidationConfigurationTest {
...@@ -33,33 +34,33 @@ public class ValidationConfigurationTest { ...@@ -33,33 +34,33 @@ public class ValidationConfigurationTest {
String file = "src/test/resources/testConfig.yml"; String file = "src/test/resources/testConfig.yml";
ValidationConfiguration config = ValidationConfiguration.loadValidationConfig(file); ValidationConfiguration config = ValidationConfiguration.loadValidationConfig(file);
assertEquals(8, config.getNumberOfRoundingPlaces()); assertEquals(8, config.getNumberOfRoundingPlaces());
assertTrue(config.getChecks().containsKey(CheckId.C_GE_R_TOO_FEW_POINTS)); assertTrue(config.getRequirements().containsKey(RequirementId.R_GE_R_TOO_FEW_POINTS.toString()));
assertTrue(config.getChecks().get(CheckId.C_GE_P_NON_PLANAR).isEnabled()); assertFalse(config.getRequirements().get(RequirementId.R_GE_P_NON_PLANAR.toString()).isEnabled());
assertNull(config.getFilter()); assertNull(config.getFilter());
} }
@Test @Test
public void testLoadingConfigWithFilter() throws FileNotFoundException { public void testLoadingConfigWithFilter() throws FileNotFoundException {
String file = "src/test/resources/testConfigWithFilter.yml"; String file = "src/test/resources/testConfigWithFilter.yml";
ValidationConfiguration config = ValidationConfiguration.loadValidationConfig(file); ValidationConfiguration config = ValidationConfiguration.loadValidationConfig(file);
assertEquals(8, config.getNumberOfRoundingPlaces()); assertEquals(8, config.getNumberOfRoundingPlaces());
assertTrue(config.getChecks().containsKey(CheckId.C_GE_R_TOO_FEW_POINTS)); assertTrue(config.getRequirements().containsKey(RequirementId.R_GE_R_TOO_FEW_POINTS.toString()));
assertTrue(config.getChecks().get(CheckId.C_GE_P_NON_PLANAR).isEnabled()); assertFalse(config.getRequirements().get(RequirementId.R_GE_P_NON_PLANAR.toString()).isEnabled());
FilterConfiguration filterConfig = config.getFilter(); FilterConfiguration filterConfig = config.getFilter();
assertNotNull(filterConfig); assertNotNull(filterConfig);
ExcludeFilterConfiguration excludeFilter = filterConfig.getExclude(); ExcludeFilterConfiguration excludeFilter = filterConfig.getExclude();
assertNotNull(excludeFilter); assertNotNull(excludeFilter);
assertTrue(excludeFilter.getIds().contains("UUID-8972-kghf-asgv")); assertTrue(excludeFilter.getIds().contains("UUID-8972-kghf-asgv"));
assertTrue(excludeFilter.getIds().contains("UUID.*")); assertTrue(excludeFilter.getIds().contains("UUID.*"));
assertTrue(excludeFilter.getTypes().contains(FeatureType.BUILDING)); assertTrue(excludeFilter.getTypes().contains(FeatureType.BUILDING));
assertTrue(excludeFilter.getTypes().contains(FeatureType.VEGETATION)); assertTrue(excludeFilter.getTypes().contains(FeatureType.VEGETATION));
IncludeFilterConfiguration includeFilter = filterConfig.getInclude(); IncludeFilterConfiguration includeFilter = filterConfig.getInclude();
assertNotNull(includeFilter); assertNotNull(includeFilter);
assertTrue(includeFilter.getIds().contains(".*")); assertTrue(includeFilter.getIds().contains(".*"));
assertTrue(includeFilter.getTypes().contains(FeatureType.BUILDING)); assertTrue(includeFilter.getTypes().contains(FeatureType.BUILDING));
assertTrue(includeFilter.getTypes().contains(FeatureType.VEGETATION)); assertTrue(includeFilter.getTypes().contains(FeatureType.VEGETATION));
......
...@@ -20,13 +20,16 @@ package de.hft.stuttgart.citydoctor2.checks; ...@@ -20,13 +20,16 @@ package de.hft.stuttgart.citydoctor2.checks;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import java.util.Set;
import org.junit.Test; import org.junit.Test;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; 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.ErrorId;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.ResultStatus; import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding; import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding;
import de.hft.stuttgart.citydoctor2.datastructure.Building; import de.hft.stuttgart.citydoctor2.datastructure.Building;
...@@ -43,7 +46,7 @@ public class CheckContainerTest { ...@@ -43,7 +46,7 @@ public class CheckContainerTest {
} }
@Override @Override
public CheckType getType() { public RequirementType getType() {
return null; return null;
} }
...@@ -56,6 +59,11 @@ public class CheckContainerTest { ...@@ -56,6 +59,11 @@ public class CheckContainerTest {
public CheckId getCheckId() { public CheckId getCheckId() {
return CheckId.C_GE_P_HOLE_OUTSIDE; return CheckId.C_GE_P_HOLE_OUTSIDE;
} }
@Override
public Set<Requirement> appliesToRequirements() {
return null;
}
}; };
CheckContainer cc = new CheckContainer(c); CheckContainer cc = new CheckContainer(c);
......
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