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 {
public GmlId getSubjectFeatureId() {
return collisionRecord.getSubjectFeatureId();
return collisionRecord.subjectFeatureId();
}
public Geometry getSubjectGeom() {
return collisionRecord.getSubjectGeom();
return collisionRecord.subjectGeom();
}
public Geometry getCollidingGeom() {
return collisionRecord.getCollidingGeom();
return collisionRecord.collidingGeom();
}
public GmlId getCollidingFeatureId() {
return collisionRecord.getCollidingFeatureId();
return collisionRecord.collidingFeatureId();
}
public Map<Polygon, List<Polygon>> getCollisionMap() {
return collisionRecord.getCollisionMap();
return collisionRecord.collisionMap();
}
public CollisionRecord getCollisionRecord() {
......@@ -83,10 +83,10 @@ public class FeatureCollisionError implements CheckError {
@Override
public void report(ErrorReport report) {
report.add("Geometry", collisionRecord.getSubjectGeom().getGmlId().toString());
report.add("Colliding with Feature", collisionRecord.getCollidingFeatureId().toString());
report.add("In Geometry", collisionRecord.getCollidingGeom().getGmlId().toString());
for (Map.Entry<Polygon, List<Polygon>> entry : collisionRecord.getCollisionMap().entrySet()) {
report.add("Geometry", collisionRecord.subjectGeom().getGmlId().toString());
report.add("Colliding with Feature", collisionRecord.collidingFeatureId().toString());
report.add("In Geometry", collisionRecord.collidingGeom().getGmlId().toString());
for (Map.Entry<Polygon, List<Polygon>> entry : collisionRecord.collisionMap().entrySet()) {
StringJoiner sj = new StringJoiner(", ");
entry.getValue().forEach(polygon -> sj.add(polygon.getGmlId().toString()));
report.add("On Subject Polygon", entry.getKey().getGmlId().toString());
......
......@@ -12,49 +12,25 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CollisionRecord implements Serializable {
private final Geometry subjectGeom;
private final Geometry collidingGeom;
private final GmlId subjectFeatureId;
private final GmlId collidingFeatureId;
private final Map<Polygon, List<Polygon>> collisionMap;
public record CollisionRecord(Geometry subjectGeom, Geometry collidingGeom, GmlId subjectFeatureId,
GmlId collidingFeatureId,
Map<Polygon, List<Polygon>> collisionMap) implements Serializable {
public CollisionRecord(Geometry subjectGeom, Geometry collidingGeom, CityObject subjectFeature,
CityObject collidingFeature, List<Pair<Polygon, Polygon>> collisionPairs) {
this.subjectGeom = subjectGeom;
this.collidingGeom = collidingGeom;
this.subjectFeatureId = subjectFeature.getGmlId();
this.collidingFeatureId = collidingFeature.getGmlId();
this.collisionMap = new HashMap<>();
this(subjectGeom, collidingGeom, subjectFeature.getGmlId(), collidingFeature.getGmlId(), new HashMap<>());
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<>());
polyList.add(collidingPoly);
}
public Map<Polygon, List<Polygon>> getCollisionMap() {
@Override
public Map<Polygon, List<Polygon>> 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{
}
candidate.accept(new CheckableUtilsVisitor() {
@Override
public void check(Geometry geom) {
List<Pair<Polygon, Polygon>> collisionPairs = getCollisionPairs(sGeo, geom);
public void check(Geometry cGeo) {
if(sGeo.getLod() != cGeo.getLod()){
return;
}
List<Pair<Polygon, Polygon>> collisionPairs = getCollisionPairs(sGeo, cGeo);
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 {
}
}
/**
* Adds a highlight
* @param p
* @param currentTriGeom
*/
public void highlight(Polygon p, TriangulatedGeometry currentTriGeom) {
clearHighlights();
addPolygonHighlight(p, currentTriGeom, Color.RED, Color.BLUE, Color.ORANGE);
......@@ -233,7 +238,7 @@ public class HighlightController {
}
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));
Set<Polygon> collidingPolys = collisionMap.values().stream().flatMap(List::stream).collect(Collectors.toSet());
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