Commit 67214f92 authored by Riegel's avatar Riegel
Browse files

Refactor: Add Visitors for ValidationError checking

parent e015765c
......@@ -24,6 +24,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import de.hft.stuttgart.citydoctor2.utils.CheckErrorFound;
import de.hft.stuttgart.citydoctor2.utils.ContainsAnyErrorVisitor;
import de.hft.stuttgart.citydoctor2.utils.ContainsErrorVisitor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
......@@ -106,6 +109,15 @@ public abstract class Checkable implements Serializable {
* @return true if an error has been found with the given check
*/
public boolean containsError(CheckId checkIdentifier) {
try {
ContainsErrorVisitor.checkCityObject(this, checkIdentifier);
} catch (CheckErrorFound c) {
return true;
}
return false;
}
public boolean hasError(CheckId checkIdentifier) {
CheckResult cs = getCheckResult(checkIdentifier);
if (cs == null) {
return false;
......@@ -165,7 +177,7 @@ public abstract class Checkable implements Serializable {
*
* @return true if it has an error, otherwise false
*/
public boolean hasAnyError() {
public boolean hasAnyErrorWithoutDependencies() {
for (CheckResult cr : checkResults.values()) {
if (cr.getResultStatus() == ResultStatus.ERROR) {
return true;
......@@ -216,6 +228,15 @@ public abstract class Checkable implements Serializable {
* have any error.
*/
public boolean containsAnyError() {
try {
ContainsAnyErrorVisitor.checkObject(this);
} catch (CheckErrorFound c) {
return true;
}
return false;
}
public boolean hasAnyError() {
for (CheckResult cr : checkResults.values()) {
if (cr.getResultStatus() == ResultStatus.ERROR
|| cr.getResultStatus() == ResultStatus.DEPENDENCIES_NOT_MET) {
......
......@@ -77,8 +77,8 @@ public class LinkedPolygon extends Polygon {
}
@Override
public boolean hasAnyError() {
return poly.hasAnyError();
public boolean hasAnyErrorWithoutDependencies() {
return poly.hasAnyErrorWithoutDependencies();
}
@Override
......
package de.hft.stuttgart.citydoctor2.utils;
public class CheckErrorFound extends Throwable {
public CheckErrorFound() {
super("CheckError was found", null, true, false);
}
}
package de.hft.stuttgart.citydoctor2.utils;
import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
import de.hft.stuttgart.citydoctor2.check.Checkable;
public class ContainsAnyErrorVisitor extends AbstractCheck {
public static void checkObject(Checkable checkable) throws CheckErrorFound {
checkable.accept(new ContainsAnyErrorVisitor());
}
@Override
public void check(Checkable checkable) {
if (checkable.hasAnyErrorWithoutDependencies()) {
ThrowUtils.sneakyThrow(new CheckErrorFound());
}
}
}
package de.hft.stuttgart.citydoctor2.utils;
import de.hft.stuttgart.citydoctor2.check.AbstractCheck;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.Checkable;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
public class ContainsErrorVisitor extends AbstractCheck {
private CheckId checkId;
public static void checkCityObject(Checkable checkable, CheckId checkIdentifier) throws CheckErrorFound {
checkable.accept(new ContainsErrorVisitor(checkIdentifier));
}
@Override
public void check(Checkable checkable) {
if (checkable.hasError(checkId)) {
ThrowUtils.sneakyThrow(new CheckErrorFound());
}
}
public ContainsErrorVisitor(CheckId checkIdentifier) {
super();
checkId = checkIdentifier;
}
}
package de.hft.stuttgart.citydoctor2.utils;
public class ThrowUtils {
private ThrowUtils() {
}
@SuppressWarnings("unchecked")
private static <T extends Throwable> void uncheckThrowable(Throwable t) throws T {
throw (T) t;
}
/**
* Throws a Throwable as an unchecked generic Throwable
*/
public static void sneakyThrow(Throwable t) {
uncheckThrowable(t);
}
}
......@@ -90,7 +90,7 @@ public class NullAreaCheckTest {
LinearRing r = setupErrorGeometry();
NullAreaCheck nac = new NullAreaCheck();
nac.check(r);
Assert.assertTrue(r.hasAnyError());
Assert.assertTrue(r.hasAnyErrorWithoutDependencies());
}
......@@ -100,7 +100,7 @@ public class NullAreaCheckTest {
LinearRing r = setupValidGeometry();
NullAreaCheck nac = new NullAreaCheck();
nac.check(r);
Assert.assertFalse(r.hasAnyError());
Assert.assertFalse(r.hasAnyErrorWithoutDependencies());
}
}
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