Commit 31710fb8 authored by Matthias Betz's avatar Matthias Betz
Browse files

add check error hierarchy

extending visitor and add abstract visitor
parent b50c5f13
Pipeline #11354 passed with stage
in 1 minute and 40 seconds
package de.hft.stuttgart.citydoctor2.check;
import de.hft.stuttgart.citydoctor2.check.error.AllPolygonsWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeInvalidError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeMissingError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeValueWrongError;
import de.hft.stuttgart.citydoctor2.check.error.ConsecutivePointSameError;
import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError;
import de.hft.stuttgart.citydoctor2.check.error.DependenciesNotMetError;
import de.hft.stuttgart.citydoctor2.check.error.MultipleConnectedComponentsError;
import de.hft.stuttgart.citydoctor2.check.error.NestedRingError;
import de.hft.stuttgart.citydoctor2.check.error.NonManifoldEdgeError;
import de.hft.stuttgart.citydoctor2.check.error.NonManifoldVertexError;
import de.hft.stuttgart.citydoctor2.check.error.NonPlanarPolygonDistancePlaneError;
import de.hft.stuttgart.citydoctor2.check.error.NonPlanarPolygonNormalsDeviation;
import de.hft.stuttgart.citydoctor2.check.error.NotCeilingError;
import de.hft.stuttgart.citydoctor2.check.error.NotFloorError;
import de.hft.stuttgart.citydoctor2.check.error.NotGroundError;
import de.hft.stuttgart.citydoctor2.check.error.NotWallError;
import de.hft.stuttgart.citydoctor2.check.error.NullAreaError;
import de.hft.stuttgart.citydoctor2.check.error.PlanarityError;
import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonSameOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonWithoutSurfaceError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError;
import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.RingError;
import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.RingSelfIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError;
import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
import de.hft.stuttgart.citydoctor2.check.error.SolidError;
import de.hft.stuttgart.citydoctor2.check.error.SolidNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError;
import de.hft.stuttgart.citydoctor2.check.error.SurfaceUnfragmentedError;
import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError;
import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
public abstract class AbstractErrorVisitor implements ErrorVisitor {
@Override
public void visit(RingError err) {
}
@Override
public void visit(PolygonError err) {
}
@Override
public void visit(RingSelfIntersectionError err) {
}
@Override
public void visit(PlanarityError err) {
}
@Override
public void visit(PolygonHoleOutsideError err) {
}
@Override
public void visit(NonManifoldEdgeError err) {
}
@Override
public void visit(MultipleConnectedComponentsError err) {
}
@Override
public void visit(NestedRingError err) {
}
@Override
public void visit(NonManifoldVertexError err) {
}
@Override
public void visit(PolygonWrongOrientationError err) {
}
@Override
public void visit(PolygonSameOrientationError err) {
}
@Override
public void visit(SolidNotClosedError err) {
}
@Override
public void visit(DependenciesNotMetError err) {
}
@Override
public void visit(UnknownCheckError err) {
}
@Override
public void visit(RingNotClosedError err) {
}
@Override
public void visit(ConsecutivePointSameError err) {
}
@Override
public void visit(AllPolygonsWrongOrientationError err) {
}
@Override
public void visit(PolygonInteriorDisconnectedError err) {
}
@Override
public void visit(NullAreaError err) {
}
@Override
public void visit(RingTooFewPointsError err) {
}
@Override
public void visit(NonPlanarPolygonNormalsDeviation err) {
}
@Override
public void visit(NonPlanarPolygonDistancePlaneError err) {
}
@Override
public void visit(PolygonIntersectingRingsError err) {
}
@Override
public void visit(SolidSelfIntError err) {
}
@Override
public void visit(TooFewPolygonsError err) {
}
@Override
public void visit(RingDuplicatePointError err) {
}
@Override
public void visit(RingEdgeIntersectionError err) {
}
@Override
public void visit(PointTouchesEdgeError err) {
}
@Override
public void visit(NotCeilingError err) {
}
@Override
public void visit(NotFloorError err) {
}
@Override
public void visit(NotWallError err) {
}
@Override
public void visit(NotGroundError err) {
}
@Override
public void visit(CheckError err) {
}
@Override
public void visit(SchematronError err) {
}
@Override
public void visit(SurfaceUnfragmentedError err) {
}
@Override
public void visit(DegeneratedRingError err) {
}
@Override
public void visit(AttributeMissingError err) {
}
@Override
public void visit(AttributeValueWrongError err) {
}
@Override
public void visit(AttributeInvalidError err) {
}
@Override
public void visit(PolygonWithoutSurfaceError err) {
}
@Override
public void visit(SolidError err) {
}
}
...@@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.error.AttributeInvalidError; ...@@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.error.AttributeInvalidError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeMissingError; import de.hft.stuttgart.citydoctor2.check.error.AttributeMissingError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeValueWrongError; import de.hft.stuttgart.citydoctor2.check.error.AttributeValueWrongError;
import de.hft.stuttgart.citydoctor2.check.error.ConsecutivePointSameError; import de.hft.stuttgart.citydoctor2.check.error.ConsecutivePointSameError;
import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError;
import de.hft.stuttgart.citydoctor2.check.error.DependenciesNotMetError; import de.hft.stuttgart.citydoctor2.check.error.DependenciesNotMetError;
import de.hft.stuttgart.citydoctor2.check.error.MultipleConnectedComponentsError; import de.hft.stuttgart.citydoctor2.check.error.MultipleConnectedComponentsError;
import de.hft.stuttgart.citydoctor2.check.error.NestedRingError; import de.hft.stuttgart.citydoctor2.check.error.NestedRingError;
...@@ -35,7 +36,9 @@ import de.hft.stuttgart.citydoctor2.check.error.NotFloorError; ...@@ -35,7 +36,9 @@ import de.hft.stuttgart.citydoctor2.check.error.NotFloorError;
import de.hft.stuttgart.citydoctor2.check.error.NotGroundError; import de.hft.stuttgart.citydoctor2.check.error.NotGroundError;
import de.hft.stuttgart.citydoctor2.check.error.NotWallError; import de.hft.stuttgart.citydoctor2.check.error.NotWallError;
import de.hft.stuttgart.citydoctor2.check.error.NullAreaError; import de.hft.stuttgart.citydoctor2.check.error.NullAreaError;
import de.hft.stuttgart.citydoctor2.check.error.PlanarityError;
import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError; import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError; import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError; import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError; import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
...@@ -44,13 +47,15 @@ import de.hft.stuttgart.citydoctor2.check.error.PolygonWithoutSurfaceError; ...@@ -44,13 +47,15 @@ import de.hft.stuttgart.citydoctor2.check.error.PolygonWithoutSurfaceError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonWrongOrientationError; import de.hft.stuttgart.citydoctor2.check.error.PolygonWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError; import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError;
import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError; import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.RingError;
import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError; import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.RingSelfIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError; import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError;
import de.hft.stuttgart.citydoctor2.check.error.SchematronError; import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
import de.hft.stuttgart.citydoctor2.check.error.SolidError;
import de.hft.stuttgart.citydoctor2.check.error.SolidNotClosedError; import de.hft.stuttgart.citydoctor2.check.error.SolidNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError; import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError;
import de.hft.stuttgart.citydoctor2.check.error.SurfaceUnfragmentedError; import de.hft.stuttgart.citydoctor2.check.error.SurfaceUnfragmentedError;
import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError;
import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError; import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError;
import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError; import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
...@@ -62,7 +67,15 @@ import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError; ...@@ -62,7 +67,15 @@ import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
* *
*/ */
public interface ErrorVisitor { public interface ErrorVisitor {
public void visit(RingError err);
public void visit(PolygonError err);
public void visit(RingSelfIntersectionError err);
public void visit(PlanarityError err);
public void visit(PolygonHoleOutsideError err); public void visit(PolygonHoleOutsideError err);
public void visit(NonManifoldEdgeError err); public void visit(NonManifoldEdgeError err);
...@@ -119,8 +132,6 @@ public interface ErrorVisitor { ...@@ -119,8 +132,6 @@ public interface ErrorVisitor {
public void visit(NotGroundError err); public void visit(NotGroundError err);
public void visit(CheckError err);
public void visit(SchematronError err); public void visit(SchematronError err);
public void visit(SurfaceUnfragmentedError err); public void visit(SurfaceUnfragmentedError err);
...@@ -134,5 +145,9 @@ public interface ErrorVisitor { ...@@ -134,5 +145,9 @@ public interface ErrorVisitor {
public void visit(AttributeInvalidError err); public void visit(AttributeInvalidError err);
public void visit(PolygonWithoutSurfaceError err); public void visit(PolygonWithoutSurfaceError err);
public void visit(CheckError err);
public void visit(SolidError err);
} }
...@@ -89,7 +89,7 @@ import de.hft.stuttgart.quality.model.types.SolidSelfIntersectionError; ...@@ -89,7 +89,7 @@ import de.hft.stuttgart.quality.model.types.SolidSelfIntersectionError;
import de.hft.stuttgart.quality.model.types.SolidTooFewPolygonsError; import de.hft.stuttgart.quality.model.types.SolidTooFewPolygonsError;
import de.hft.stuttgart.quality.model.types.ValidationResult; import de.hft.stuttgart.quality.model.types.ValidationResult;
public class QualityAdeErrorVisitor implements ErrorVisitor { public class QualityAdeErrorVisitor extends AbstractErrorVisitor {
private final ValidationResult res; private final ValidationResult res;
......
...@@ -18,9 +18,9 @@ ...@@ -18,9 +18,9 @@
*/ */
package de.hft.stuttgart.citydoctor2.check.error; package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor; import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod; import de.hft.stuttgart.citydoctor2.check.HealingMethod;
...@@ -28,47 +28,35 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener; ...@@ -28,47 +28,35 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement; import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import java.io.Serial;
/** /**
* Error when all polygons are oriented wrong. * Error when all polygons are oriented wrong.
* *
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class AllPolygonsWrongOrientationError implements CheckError { public class AllPolygonsWrongOrientationError extends SolidError {
@Serial @Serial
private static final long serialVersionUID = 2263993313732858840L; private static final long serialVersionUID = 2263993313732858840L;
private final Geometry geom;
public AllPolygonsWrongOrientationError(Geometry geom) { public AllPolygonsWrongOrientationError(Geometry geom) {
this.geom = geom; super(geom);
}
public Geometry getGeometry() {
return geom;
} }
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "AllPolygonsWrongOrientationError [geom=" + geom + "]"; return "AllPolygonsWrongOrientationError [geom=" + getGeometry() + "]";
}
@Override
public void report(ErrorReport report) {
report.add(geom);
} }
@Override @Override
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
*/ */
package de.hft.stuttgart.citydoctor2.check.error; package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -29,8 +30,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement; ...@@ -29,8 +30,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
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;
import java.io.Serial;
/** /**
* When two points are too close to each other and are consecutive in a linear * When two points are too close to each other and are consecutive in a linear
* ring, this error is created. * ring, this error is created.
...@@ -38,25 +37,20 @@ import java.io.Serial; ...@@ -38,25 +37,20 @@ import java.io.Serial;
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class ConsecutivePointSameError implements CheckError { public class ConsecutivePointSameError extends RingError {
@Serial @Serial
private static final long serialVersionUID = -6355935751554777494L; private static final long serialVersionUID = -6355935751554777494L;
private final LinearRing lr;
private final Vertex p1; private final Vertex p1;
private final Vertex p2; private final Vertex p2;
public ConsecutivePointSameError(LinearRing lr, Vertex p1, Vertex p2) { public ConsecutivePointSameError(LinearRing lr, Vertex p1, Vertex p2) {
this.lr = lr; super(lr);
this.p1 = p1; this.p1 = p1;
this.p2 = p2; this.p2 = p2;
} }
public LinearRing getRing() {
return lr;
}
public Vertex getVertex1() { public Vertex getVertex1() {
return p1; return p1;
} }
...@@ -67,22 +61,23 @@ public class ConsecutivePointSameError implements CheckError { ...@@ -67,22 +61,23 @@ public class ConsecutivePointSameError implements CheckError {
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "ConsecutivePointSameError [lr=" + lr + ", p1=" + p1 + ", p2=" + p2 + "]"; return "ConsecutivePointSameError [lr=" + getRing() + ", p1=" + p1 + ", p2=" + p2 + "]";
} }
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add(lr); super.report(report);
report.add("duplicate point 1", p1); report.add("duplicate point 1", p1);
report.add("duplicate point 2", p2); report.add("duplicate point 2", p2);
} }
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
*/ */
package de.hft.stuttgart.citydoctor2.check.error; package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -28,37 +29,30 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener; ...@@ -28,37 +29,30 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement; import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import java.io.Serial; public class DegeneratedRingError extends RingSelfIntersectionError {
public class DegeneratedRingError implements CheckError {
@Serial @Serial
private static final long serialVersionUID = 865493182529055651L; private static final long serialVersionUID = 865493182529055651L;
private final LinearRing lr;
public DegeneratedRingError(LinearRing lr) { public DegeneratedRingError(LinearRing lr) {
this.lr = lr; super(lr);
} }
public LinearRing getRing() {
return lr;
}
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add("type", "degenerated ring"); report.add("type", "degenerated ring");
report.add(getRing()); super.report(report);
} }
@Override @Override
......
...@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error; ...@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial; import java.io.Serial;
import java.util.List; import java.util.List;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -39,30 +38,25 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon; ...@@ -39,30 +38,25 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class MultipleConnectedComponentsError implements CheckError { public class MultipleConnectedComponentsError extends SolidError {
@Serial @Serial
private static final long serialVersionUID = 2152069835068857036L; private static final long serialVersionUID = 2152069835068857036L;
private final Geometry geom;
private final List<List<Polygon>> components; private final List<List<Polygon>> components;
public MultipleConnectedComponentsError(Geometry geom, List<List<Polygon>> components) { public MultipleConnectedComponentsError(Geometry geom, List<List<Polygon>> components) {
this.geom = geom; super(geom);
this.components = components; this.components = components;
} }
public Geometry getGeometry() {
return geom;
}
public List<List<Polygon>> getComponents() { public List<List<Polygon>> getComponents() {
return components; return components;
} }
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add(geom); super.report(report);
for (int i = 0; i < components.size(); i++) { for (int i = 0; i < components.size(); i++) {
List<Polygon> polygons = components.get(i); List<Polygon> polygons = components.get(i);
report.addPolygons("component nr: " + (i + 1), polygons); report.addPolygons("component nr: " + (i + 1), polygons);
...@@ -71,17 +65,18 @@ public class MultipleConnectedComponentsError implements CheckError { ...@@ -71,17 +65,18 @@ public class MultipleConnectedComponentsError implements CheckError {
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "MultipleConnectedComponentsError [geom=" + geom + ", components=" + components + "]"; return "MultipleConnectedComponentsError [geom=" + getGeometry() + ", components=" + components + "]";
} }
@Override @Override
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
*/ */
package de.hft.stuttgart.citydoctor2.check.error; package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -29,32 +30,26 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement; ...@@ -29,32 +30,26 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import java.io.Serial;
/** /**
* If an inner ring is with in the boundaries of another, this error is created. * If an inner ring is with in the boundaries of another, this error is created.
* *
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class NestedRingError implements CheckError { public class NestedRingError extends PolygonError {
@Serial @Serial
private static final long serialVersionUID = -3396113374745830193L; private static final long serialVersionUID = -3396113374745830193L;
private final Polygon p;
private final LinearRing innerRing; private final LinearRing innerRing;
private final LinearRing withinRing; private final LinearRing withinRing;
public NestedRingError(Polygon p, LinearRing innerRing, LinearRing withinRing) { public NestedRingError(Polygon p, LinearRing innerRing, LinearRing withinRing) {
this.p = p; super(p);
this.innerRing = innerRing; this.innerRing = innerRing;
this.withinRing = withinRing; this.withinRing = withinRing;
} }
public Polygon getPolygon() {
return p;
}
public LinearRing getInnerRing() { public LinearRing getInnerRing() {
return innerRing; return innerRing;
...@@ -66,23 +61,24 @@ public class NestedRingError implements CheckError { ...@@ -66,23 +61,24 @@ public class NestedRingError implements CheckError {
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add(p); super.report(report);
report.add(innerRing); report.add(innerRing);
} }
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "NestedRingError [p=" + p + ", innerRing=" + innerRing + "]"; return "NestedRingError [p=" + getPolygon() + ", innerRing=" + innerRing + "]";
} }
@Override @Override
......
...@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error; ...@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial; import java.io.Serial;
import java.util.List; import java.util.List;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -38,48 +37,44 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement; ...@@ -38,48 +37,44 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class NonManifoldEdgeError implements CheckError { public class NonManifoldEdgeError extends SolidError {
@Serial @Serial
private static final long serialVersionUID = -6742948557014332402L; private static final long serialVersionUID = -6742948557014332402L;
private final List<Edge> edges; private final List<Edge> edges;
private final Geometry geom;
public NonManifoldEdgeError(Geometry geom, List<Edge> edges) { public NonManifoldEdgeError(Geometry geom, List<Edge> edges) {
super(geom);
this.edges = edges; this.edges = edges;
this.geom = geom;
} }
public List<Edge> getEdges() { public List<Edge> getEdges() {
return edges; return edges;
} }
public Geometry getGeometry() {
return geom;
}
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add(geom); super.report(report);
for (Edge e : edges) { for (Edge e : edges) {
report.add(e); report.add(e);
} }
} }
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "ManifoldEdgeError [edges=" + edges + ", geom=" + geom + "]"; return "ManifoldEdgeError [edges=" + edges + ", geom=" + getGeometry() + "]";
} }
@Override @Override
......
...@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error; ...@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial; import java.io.Serial;
import java.util.List; import java.util.List;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -40,17 +39,16 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex; ...@@ -40,17 +39,16 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class NonManifoldVertexError implements CheckError { public class NonManifoldVertexError extends SolidError {
@Serial @Serial
private static final long serialVersionUID = -3915669943428175777L; private static final long serialVersionUID = -3915669943428175777L;
private final List<List<Polygon>> components; private final List<List<Polygon>> components;
private final Geometry geom;
private final Vertex v; private final Vertex v;
public NonManifoldVertexError(Geometry geom, List<List<Polygon>> components, Vertex v) { public NonManifoldVertexError(Geometry geom, List<List<Polygon>> components, Vertex v) {
this.geom = geom; super(geom);
this.components = components; this.components = components;
this.v = v; this.v = v;
} }
...@@ -59,17 +57,13 @@ public class NonManifoldVertexError implements CheckError { ...@@ -59,17 +57,13 @@ public class NonManifoldVertexError implements CheckError {
return components; return components;
} }
public Geometry getGeometry() {
return geom;
}
public Vertex getVertex() { public Vertex getVertex() {
return v; return v;
} }
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add(geom); super.report(report);
report.add(v); report.add(v);
for (int i = 0; i < components.size(); i++) { for (int i = 0; i < components.size(); i++) {
List<Polygon> polygons = components.get(i); List<Polygon> polygons = components.get(i);
...@@ -83,17 +77,18 @@ public class NonManifoldVertexError implements CheckError { ...@@ -83,17 +77,18 @@ public class NonManifoldVertexError implements CheckError {
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "NonManifoldVertexError [components=" + components + ", geom=" + geom + ", v=" + v + "]"; return "NonManifoldVertexError [components=" + components + ", geom=" + getGeometry() + ", v=" + v + "]";
} }
@Override @Override
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
*/ */
package de.hft.stuttgart.citydoctor2.check.error; package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -31,8 +32,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex; ...@@ -31,8 +32,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.math.Plane; import de.hft.stuttgart.citydoctor2.math.Plane;
import de.hft.stuttgart.citydoctor2.utils.Localization; import de.hft.stuttgart.citydoctor2.utils.Localization;
import java.io.Serial;
/** /**
* Error object for planarity errors containing the polygon, the regression * Error object for planarity errors containing the polygon, the regression
* plane and the distance to the plane. * plane and the distance to the plane.
...@@ -40,18 +39,17 @@ import java.io.Serial; ...@@ -40,18 +39,17 @@ import java.io.Serial;
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class NonPlanarPolygonDistancePlaneError implements CheckError { public class NonPlanarPolygonDistancePlaneError extends PlanarityError {
@Serial @Serial
private static final long serialVersionUID = -3504364055236383519L; private static final long serialVersionUID = -3504364055236383519L;
private final Polygon p;
private final double distance; private final double distance;
private final Vertex v; private final Vertex v;
private final Plane plane; private final Plane plane;
public NonPlanarPolygonDistancePlaneError(Polygon p, double distance, Vertex v, Plane plane) { public NonPlanarPolygonDistancePlaneError(Polygon p, double distance, Vertex v, Plane plane) {
this.p = p; super(p);
this.distance = distance; this.distance = distance;
this.v = v; this.v = v;
this.plane = plane; this.plane = plane;
...@@ -61,10 +59,6 @@ public class NonPlanarPolygonDistancePlaneError implements CheckError { ...@@ -61,10 +59,6 @@ public class NonPlanarPolygonDistancePlaneError implements CheckError {
return plane; return plane;
} }
public Polygon getPolygon() {
return p;
}
public double getDistance() { public double getDistance() {
return distance; return distance;
} }
...@@ -75,24 +69,25 @@ public class NonPlanarPolygonDistancePlaneError implements CheckError { ...@@ -75,24 +69,25 @@ public class NonPlanarPolygonDistancePlaneError implements CheckError {
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add(p); super.report(report);
report.add(v); report.add(v);
report.add(Localization.getText("DistanceError.distanceFromPlane"), distance); report.add(Localization.getText("DistanceError.distanceFromPlane"), distance);
} }
@Override @Override
public String toString() { public String toString() {
return "NonPlanarPolygonDistancePlaneError [p=" + p + ", distance=" + distance + ", v=" + v + ", plane=" + plane + "]"; return "NonPlanarPolygonDistancePlaneError [p=" + getPolygon() + ", distance=" + distance + ", v=" + v + ", plane=" + plane + "]";
} }
@Override @Override
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
*/ */
package de.hft.stuttgart.citydoctor2.check.error; package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -28,8 +29,6 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener; ...@@ -28,8 +29,6 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement; import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import java.io.Serial;
/** /**
* When the normal of the triangles created from the triangulation of the * When the normal of the triangles created from the triangulation of the
* polygon have a too large angle between them, this error is created. * polygon have a too large angle between them, this error is created.
...@@ -37,46 +36,42 @@ import java.io.Serial; ...@@ -37,46 +36,42 @@ import java.io.Serial;
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class NonPlanarPolygonNormalsDeviation implements CheckError { public class NonPlanarPolygonNormalsDeviation extends PlanarityError {
@Serial @Serial
private static final long serialVersionUID = 69073161885265794L; private static final long serialVersionUID = 69073161885265794L;
private final Polygon p;
private final double deviation; private final double deviation;
public NonPlanarPolygonNormalsDeviation(Polygon p, double deviation) { public NonPlanarPolygonNormalsDeviation(Polygon p, double deviation) {
this.p = p; super(p);
this.deviation = deviation; this.deviation = deviation;
} }
public Polygon getPolygon() {
return p;
}
public double getDeviation() { public double getDeviation() {
return deviation; return deviation;
} }
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add(p); super.report(report);
report.add("normal deviation (in rad)", deviation); report.add("normal deviation (in rad)", deviation);
} }
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "NormalDeviationError [p=" + p + ", deviation=" + deviation + "]"; return "NormalDeviationError [p=" + getPolygon() + ", deviation=" + deviation + "]";
} }
@Override @Override
......
...@@ -18,9 +18,9 @@ ...@@ -18,9 +18,9 @@
*/ */
package de.hft.stuttgart.citydoctor2.check.error; package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor; import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod; import de.hft.stuttgart.citydoctor2.check.HealingMethod;
...@@ -28,47 +28,35 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener; ...@@ -28,47 +28,35 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement; import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import java.io.Serial;
/** /**
* When a linear ring has a near zero area this error is created. * When a linear ring has a near zero area this error is created.
* *
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class NullAreaError implements CheckError { public class NullAreaError extends RingError {
@Serial @Serial
private static final long serialVersionUID = 1358910429039553687L; private static final long serialVersionUID = 1358910429039553687L;
private final LinearRing lr;
public NullAreaError(LinearRing lr) { public NullAreaError(LinearRing lr) {
this.lr = lr; super(lr);
}
public LinearRing getRing() {
return lr;
}
@Override
public void report(ErrorReport report) {
report.add(lr);
} }
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "NullAreaError [lr=" + lr + "]"; return "NullAreaError [lr=" + getRing() + "]";
} }
@Override @Override
......
package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
public abstract class PlanarityError extends PolygonError {
@Serial
private static final long serialVersionUID = 4229597996236974570L;
public PlanarityError(Polygon poly) {
super(poly);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return super.accept(method, l) || method.visit(this, l);
}
}
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
*/ */
package de.hft.stuttgart.citydoctor2.check.error; package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -30,8 +31,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement; ...@@ -30,8 +31,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
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;
import java.io.Serial;
/** /**
* If a point of a linear ring touches an edge of the same ring it is considered * If a point of a linear ring touches an edge of the same ring it is considered
* self intersecting and this error object is created. * self intersecting and this error object is created.
...@@ -39,25 +38,20 @@ import java.io.Serial; ...@@ -39,25 +38,20 @@ import java.io.Serial;
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class PointTouchesEdgeError implements CheckError { public class PointTouchesEdgeError extends RingSelfIntersectionError {
@Serial @Serial
private static final long serialVersionUID = 3277456707271748954L; private static final long serialVersionUID = 3277456707271748954L;
private final LinearRing lr;
private final Edge e; private final Edge e;
private final Vertex v; private final Vertex v;
public PointTouchesEdgeError(LinearRing lr, Edge e, Vertex v) { public PointTouchesEdgeError(LinearRing lr, Edge e, Vertex v) {
this.lr = lr; super(lr);
this.e = e; this.e = e;
this.v = v; this.v = v;
} }
public LinearRing getRing() {
return lr;
}
public Edge getEdge() { public Edge getEdge() {
return e; return e;
} }
...@@ -69,24 +63,25 @@ public class PointTouchesEdgeError implements CheckError { ...@@ -69,24 +63,25 @@ public class PointTouchesEdgeError implements CheckError {
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add("type", "point touches edge"); report.add("type", "point touches edge");
report.add(lr); super.report(report);
report.add(v); report.add(v);
report.add(e); report.add(e);
} }
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "PointTouchesEdgeError [lr=" + lr + ", e=" + e + ", v=" + v + "]"; return "PointTouchesEdgeError [lr=" + getRing() + ", e=" + e + ", v=" + v + "]";
} }
@Override @Override
......
package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.Objects;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
public abstract class PolygonError implements CheckError {
@Serial
private static final long serialVersionUID = 7277982425092189736L;
private final Polygon poly;
public PolygonError(Polygon poly) {
Objects.requireNonNull(poly);
this.poly = poly;
}
public Polygon getPolygon() {
return poly;
}
@Override
public void report(ErrorReport report) {
report.add(poly);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
}
}
...@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error; ...@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial; import java.io.Serial;
import java.util.List; import java.util.List;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -39,40 +38,36 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon; ...@@ -39,40 +38,36 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class PolygonHoleOutsideError implements CheckError { public class PolygonHoleOutsideError extends PolygonError {
@Serial @Serial
private static final long serialVersionUID = -4522153084655775231L; private static final long serialVersionUID = -4522153084655775231L;
private final List<LinearRing> holesOutside; private final List<LinearRing> holesOutside;
private final Polygon p;
public PolygonHoleOutsideError(Polygon p, List<LinearRing> holesOutside) { public PolygonHoleOutsideError(Polygon p, List<LinearRing> holesOutside) {
this.p = p; super(p);
this.holesOutside = holesOutside; this.holesOutside = holesOutside;
} }
public Polygon getPolygon() {
return p;
}
public List<LinearRing> getHolesOutside() { public List<LinearRing> getHolesOutside() {
return holesOutside; return holesOutside;
} }
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add(p); super.report(report);
for (LinearRing lr : holesOutside) { for (LinearRing lr : holesOutside) {
report.add(lr); report.add(lr);
} }
...@@ -80,7 +75,7 @@ public class PolygonHoleOutsideError implements CheckError { ...@@ -80,7 +75,7 @@ public class PolygonHoleOutsideError implements CheckError {
@Override @Override
public String toString() { public String toString() {
return "HoleOutsideError [holesOutside=" + holesOutside + ", p=" + p + "]"; return "HoleOutsideError [holesOutside=" + holesOutside + ", p=" + getPolygon() + "]";
} }
@Override @Override
......
...@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error; ...@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial; import java.io.Serial;
import java.util.List; import java.util.List;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -39,30 +38,25 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon; ...@@ -39,30 +38,25 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class PolygonInteriorDisconnectedError implements CheckError { public class PolygonInteriorDisconnectedError extends PolygonError {
@Serial @Serial
private static final long serialVersionUID = 511849016699842395L; private static final long serialVersionUID = 511849016699842395L;
private final Polygon p;
private final List<LinearRing> connectedRings; private final List<LinearRing> connectedRings;
public PolygonInteriorDisconnectedError(Polygon p, List<LinearRing> connectedRings) { public PolygonInteriorDisconnectedError(Polygon p, List<LinearRing> connectedRings) {
this.p = p; super(p);
this.connectedRings = connectedRings; this.connectedRings = connectedRings;
} }
public Polygon getPolygon() {
return p;
}
public List<LinearRing> getConnectedRings() { public List<LinearRing> getConnectedRings() {
return connectedRings; return connectedRings;
} }
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add(p); super.report(report);
report.add("connected rings", ""); report.add("connected rings", "");
for (LinearRing lr : connectedRings) { for (LinearRing lr : connectedRings) {
report.add(lr); report.add(lr);
...@@ -71,17 +65,18 @@ public class PolygonInteriorDisconnectedError implements CheckError { ...@@ -71,17 +65,18 @@ public class PolygonInteriorDisconnectedError implements CheckError {
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "InteriorDisconnectedError [p=" + p + ", connectedRings=" + connectedRings + "]"; return "InteriorDisconnectedError [polygon=" + getPolygon() + ", connectedRings=" + connectedRings + "]";
} }
@Override @Override
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
*/ */
package de.hft.stuttgart.citydoctor2.check.error; package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -30,8 +31,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; ...@@ -30,8 +31,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.utils.SerializablePair; import de.hft.stuttgart.citydoctor2.utils.SerializablePair;
import java.io.Serial;
/** /**
* If the exterior ring and interior rings are intersecting each other, it * If the exterior ring and interior rings are intersecting each other, it
* results in a polygon self intersection and this error is created. * results in a polygon self intersection and this error is created.
...@@ -39,47 +38,43 @@ import java.io.Serial; ...@@ -39,47 +38,43 @@ import java.io.Serial;
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class PolygonIntersectingRingsError implements CheckError { public class PolygonIntersectingRingsError extends PolygonError {
@Serial @Serial
private static final long serialVersionUID = -7043521697085991901L; private static final long serialVersionUID = -7043521697085991901L;
private final Polygon p;
private final SerializablePair<LinearRing, LinearRing> intersectingRings; private final SerializablePair<LinearRing, LinearRing> intersectingRings;
public PolygonIntersectingRingsError(Polygon p, SerializablePair<LinearRing, LinearRing> intersectingRings) { public PolygonIntersectingRingsError(Polygon p, SerializablePair<LinearRing, LinearRing> intersectingRings) {
this.p = p; super(p);
this.intersectingRings = intersectingRings; this.intersectingRings = intersectingRings;
} }
public Polygon getPolygon() {
return p;
}
public SerializablePair<LinearRing, LinearRing> getIntersectingRings() { public SerializablePair<LinearRing, LinearRing> getIntersectingRings() {
return intersectingRings; return intersectingRings;
} }
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add(p); super.report(report);
report.add(intersectingRings.getValue0()); report.add(intersectingRings.getValue0());
report.add(intersectingRings.getValue1()); report.add(intersectingRings.getValue1());
} }
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "PolygonSelfIntError [p=" + p + ", intersectingRings=" + intersectingRings + "]"; return "PolygonSelfIntError [polygon=" + getPolygon() + ", intersectingRings=" + intersectingRings + "]";
} }
@Override @Override
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
*/ */
package de.hft.stuttgart.citydoctor2.check.error; package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport; import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType; import de.hft.stuttgart.citydoctor2.check.ErrorType;
...@@ -29,8 +30,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement; ...@@ -29,8 +30,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import java.io.Serial;
/** /**
* If the interior rings have the same orientation as the exterior ring, this * If the interior rings have the same orientation as the exterior ring, this
* error is created. * error is created.
...@@ -38,46 +37,42 @@ import java.io.Serial; ...@@ -38,46 +37,42 @@ import java.io.Serial;
* @author Matthias Betz * @author Matthias Betz
* *
*/ */
public class PolygonSameOrientationError implements CheckError { public class PolygonSameOrientationError extends PolygonError {
@Serial @Serial
private static final long serialVersionUID = -6192337889977667459L; private static final long serialVersionUID = -6192337889977667459L;
private final Polygon p;
private final LinearRing innerRing; private final LinearRing innerRing;
public PolygonSameOrientationError(Polygon p, LinearRing inner) { public PolygonSameOrientationError(Polygon p, LinearRing inner) {
this.p = p; super(p);
this.innerRing = inner; this.innerRing = inner;
} }
public Polygon getPolygon() {
return p;
}
public LinearRing getInnerRing() { public LinearRing getInnerRing() {
return innerRing; return innerRing;
} }
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add(p); super.report(report);
report.add(innerRing); report.add(innerRing);
} }
@Override @Override
public void accept(ErrorVisitor errorVisitor) { public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this); errorVisitor.visit(this);
} }
@Override @Override
public boolean accept(HealingMethod method, ModificationListener l) { public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l); return super.accept(method, l) || method.visit(this, l);
} }
@Override @Override
public String toString() { public String toString() {
return "SameOrientationError [p=" + p + ", innerRing=" + innerRing + "]"; return "SameOrientationError [polygon=" + getPolygon() + ", innerRing=" + innerRing + "]";
} }
@Override @Override
......
Supports Markdown
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