Commit 04b94412 authored by Luna Riegel's avatar Luna Riegel
Browse files

Refactor: Convert Class to Record

parent fb1d1c4f
...@@ -31,23 +31,23 @@ public class FeatureCollisionError implements CheckError { ...@@ -31,23 +31,23 @@ public class FeatureCollisionError implements CheckError {
public GmlId getSubjectFeatureId() { public GmlId getSubjectFeatureId() {
return collisionRecord.getSubjectFeatureId(); return collisionRecord.subjectFeatureId();
} }
public Geometry getSubjectGeom() { public Geometry getSubjectGeom() {
return collisionRecord.getSubjectGeom(); return collisionRecord.subjectGeom();
} }
public Geometry getCollidingGeom() { public Geometry getCollidingGeom() {
return collisionRecord.getCollidingGeom(); return collisionRecord.collidingGeom();
} }
public GmlId getCollidingFeatureId() { public GmlId getCollidingFeatureId() {
return collisionRecord.getCollidingFeatureId(); return collisionRecord.collidingFeatureId();
} }
public Map<Polygon, List<Polygon>> getCollisionMap() { public Map<Polygon, List<Polygon>> getCollisionMap() {
return collisionRecord.getCollisionMap(); return collisionRecord.collisionMap();
} }
public CollisionRecord getCollisionRecord() { public CollisionRecord getCollisionRecord() {
...@@ -83,10 +83,10 @@ public class FeatureCollisionError implements CheckError { ...@@ -83,10 +83,10 @@ public class FeatureCollisionError implements CheckError {
@Override @Override
public void report(ErrorReport report) { public void report(ErrorReport report) {
report.add("Geometry", collisionRecord.getSubjectGeom().getGmlId().toString()); report.add("Geometry", collisionRecord.subjectGeom().getGmlId().toString());
report.add("Colliding with Feature", collisionRecord.getCollidingFeatureId().toString()); report.add("Colliding with Feature", collisionRecord.collidingFeatureId().toString());
report.add("In Geometry", collisionRecord.getCollidingGeom().getGmlId().toString()); report.add("In Geometry", collisionRecord.collidingGeom().getGmlId().toString());
for (Map.Entry<Polygon, List<Polygon>> entry : collisionRecord.getCollisionMap().entrySet()) { for (Map.Entry<Polygon, List<Polygon>> entry : collisionRecord.collisionMap().entrySet()) {
StringJoiner sj = new StringJoiner(", "); StringJoiner sj = new StringJoiner(", ");
entry.getValue().forEach(polygon -> sj.add(polygon.getGmlId().toString())); entry.getValue().forEach(polygon -> sj.add(polygon.getGmlId().toString()));
report.add("On Subject Polygon", entry.getKey().getGmlId().toString()); report.add("On Subject Polygon", entry.getKey().getGmlId().toString());
......
...@@ -12,49 +12,25 @@ import java.util.HashMap; ...@@ -12,49 +12,25 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class CollisionRecord implements Serializable {
public record CollisionRecord(Geometry subjectGeom, Geometry collidingGeom, GmlId subjectFeatureId,
GmlId collidingFeatureId,
private final Geometry subjectGeom; Map<Polygon, List<Polygon>> collisionMap) implements Serializable {
private final Geometry collidingGeom;
private final GmlId subjectFeatureId;
private final GmlId collidingFeatureId;
private final Map<Polygon, List<Polygon>> collisionMap;
public CollisionRecord(Geometry subjectGeom, Geometry collidingGeom, CityObject subjectFeature, public CollisionRecord(Geometry subjectGeom, Geometry collidingGeom, CityObject subjectFeature,
CityObject collidingFeature, List<Pair<Polygon, Polygon>> collisionPairs) { CityObject collidingFeature, List<Pair<Polygon, Polygon>> collisionPairs) {
this.subjectGeom = subjectGeom; this(subjectGeom, collidingGeom, subjectFeature.getGmlId(), collidingFeature.getGmlId(), new HashMap<>());
this.collidingGeom = collidingGeom;
this.subjectFeatureId = subjectFeature.getGmlId();
this.collidingFeatureId = collidingFeature.getGmlId();
this.collisionMap = new HashMap<>();
collisionPairs.forEach(pair -> addCollision(pair.getValue0(), pair.getValue1())); collisionPairs.forEach(pair -> addCollision(pair.getValue0(), pair.getValue1()));
} }
private void addCollision(Polygon subjectPoly, Polygon collidingPoly){ private void addCollision(Polygon subjectPoly, Polygon collidingPoly) {
List<Polygon> polyList = collisionMap.computeIfAbsent(subjectPoly, k -> new ArrayList<>()); List<Polygon> polyList = collisionMap.computeIfAbsent(subjectPoly, k -> new ArrayList<>());
polyList.add(collidingPoly); polyList.add(collidingPoly);
} }
public Map<Polygon, List<Polygon>> getCollisionMap() { @Override
public Map<Polygon, List<Polygon>> collisionMap() {
return Collections.unmodifiableMap(collisionMap); return Collections.unmodifiableMap(collisionMap);
} }
public Geometry getSubjectGeom() {
return subjectGeom;
}
public Geometry getCollidingGeom() {
return collidingGeom;
}
public GmlId getSubjectFeatureId() {
return subjectFeatureId;
}
public GmlId getCollidingFeatureId() {
return collidingFeatureId;
}
} }
...@@ -147,10 +147,13 @@ public class FeatureCollisionCheck extends Check{ ...@@ -147,10 +147,13 @@ public class FeatureCollisionCheck extends Check{
} }
candidate.accept(new CheckableUtilsVisitor() { candidate.accept(new CheckableUtilsVisitor() {
@Override @Override
public void check(Geometry geom) { public void check(Geometry cGeo) {
List<Pair<Polygon, Polygon>> collisionPairs = getCollisionPairs(sGeo, geom); if(sGeo.getLod() != cGeo.getLod()){
return;
}
List<Pair<Polygon, Polygon>> collisionPairs = getCollisionPairs(sGeo, cGeo);
if(!collisionPairs.isEmpty()) { if(!collisionPairs.isEmpty()) {
collisions.add(new CollisionRecord(sGeo, geom, subject, candidate, collisionPairs)); collisions.add(new CollisionRecord(sGeo, cGeo, subject, candidate, collisionPairs));
} }
} }
}); });
......
...@@ -66,6 +66,11 @@ public class HighlightController { ...@@ -66,6 +66,11 @@ public class HighlightController {
} }
} }
/**
* Adds a highlight
* @param p
* @param currentTriGeom
*/
public void highlight(Polygon p, TriangulatedGeometry currentTriGeom) { public void highlight(Polygon p, TriangulatedGeometry currentTriGeom) {
clearHighlights(); clearHighlights();
addPolygonHighlight(p, currentTriGeom, Color.RED, Color.BLUE, Color.ORANGE); addPolygonHighlight(p, currentTriGeom, Color.RED, Color.BLUE, Color.ORANGE);
...@@ -233,7 +238,7 @@ public class HighlightController { ...@@ -233,7 +238,7 @@ public class HighlightController {
} }
public void highlightGeometryCollisions(CollisionRecord collRecord, TriangulatedGeometry currentTriGeom) { public void highlightGeometryCollisions(CollisionRecord collRecord, TriangulatedGeometry currentTriGeom) {
Map<Polygon, List<Polygon>> collisionMap = collRecord.getCollisionMap(); Map<Polygon, List<Polygon>> collisionMap = collRecord.collisionMap();
collisionMap.keySet().forEach(subject -> addPolygonHighlight(subject, currentTriGeom, Color.RED, Color.BLUE, Color.ORANGE)); collisionMap.keySet().forEach(subject -> addPolygonHighlight(subject, currentTriGeom, Color.RED, Color.BLUE, Color.ORANGE));
Set<Polygon> collidingPolys = collisionMap.values().stream().flatMap(List::stream).collect(Collectors.toSet()); Set<Polygon> collidingPolys = collisionMap.values().stream().flatMap(List::stream).collect(Collectors.toSet());
collidingPolys.forEach(poly -> addPolygonHighlight(poly, currentTriGeom, Color.DARKRED, Color.NAVY, Color.DARKORANGE)); collidingPolys.forEach(poly -> addPolygonHighlight(poly, currentTriGeom, Color.DARKRED, Color.NAVY, Color.DARKORANGE));
......
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