Skip to content

Commit c4251b3

Browse files
javier-godoypaodb
authored andcommitted
feat: allow registering ErrorWindowFactory per exception type
Close #27
1 parent 30d73bd commit c4251b3

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

src/main/java/com/flowingcode/vaadin/addons/errorwindow/ErrorManager.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,17 @@
2020

2121
package com.flowingcode.vaadin.addons.errorwindow;
2222

23+
import java.util.Map;
24+
import java.util.Optional;
25+
import java.util.concurrent.ConcurrentHashMap;
26+
2327
public final class ErrorManager {
2428

25-
private static ErrorWindowFactory errorWindowFactory = new DefaultErrorWindowFactory();
29+
private static final Map<Class<?>, ErrorWindowFactory> factories = new ConcurrentHashMap<>();
30+
31+
static {
32+
factories.put(Object.class, new DefaultErrorWindowFactory());
33+
}
2634

2735
private ErrorManager() {
2836
throw new IllegalStateException("Utility class not meant to be instantiated");
@@ -34,14 +42,25 @@ public static void showError(Throwable throwable) {
3442

3543
public static void showError(Throwable throwable, String cause) {
3644
ErrorDetails details = new ErrorDetails(throwable, cause);
37-
errorWindowFactory.showError(details);
45+
getErrorWindowFactory(throwable.getClass()).showError(details);
46+
}
47+
48+
public static void setErrorWindowFactory(Class<? extends Throwable> clazz,
49+
ErrorWindowFactory errorWindowFactory) {
50+
factories.put(clazz.asSubclass(Throwable.class), errorWindowFactory);
51+
}
52+
53+
public static ErrorWindowFactory getErrorWindowFactory(Class<?> clazz) {
54+
return Optional.ofNullable(factories.get(clazz))
55+
.orElseGet(() -> getErrorWindowFactory(clazz.getSuperclass()));
3856
}
3957

4058
public static void setErrorWindowFactory(ErrorWindowFactory errorWindowFactory) {
41-
ErrorManager.errorWindowFactory = errorWindowFactory;
59+
factories.put(Throwable.class, errorWindowFactory);
4260
}
4361

4462
public static ErrorWindowFactory getErrorWindowFactory() {
45-
return errorWindowFactory;
63+
return getErrorWindowFactory(Throwable.class);
4664
}
65+
4766
}

0 commit comments

Comments
 (0)