notify(String,HandlerInterface)   A
last analyzed

Complexity

Conditions 3

Size

Total Lines 10
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 0 Features 1
Metric Value
eloc 8
c 4
b 0
f 1
dl 0
loc 10
rs 10
cc 3
1
/*
2
 * @author  : Jagepard <[email protected]>
3
 * @license https://mit-license.org/ MIT
4
 */
5
6
package Behavioral.Mediator;
7
8
import java.lang.reflect.InvocationTargetException;
9
import java.lang.reflect.Method;
10
import java.util.LinkedHashMap;
11
12
public class Mediator implements MediatorInterface {
13
    LinkedHashMap<String, AbstractListener> listeners = new LinkedHashMap<>();
14
    LinkedHashMap<String, String> events = new LinkedHashMap<>();
15
16
    @Override
17
    public void addListener(AbstractListener listener, String methodToCall) {
18
        String name = listener.getClass().getName();
19
        if (listeners.containsKey(name) && events.containsKey(name)) {
20
            throw new IllegalArgumentException(name + " already exists");
21
        }
22
23
        listeners.put(name, listener);
24
        events.put(name, methodToCall);
25
    }
26
27
    @Override
28
    public String notify(String name, HandlerInterface handler) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
29
        if (listeners.containsKey(name) && events.containsKey(name)) {
30
            AbstractListener listener = listeners.get(name);
31
            String methodName = events.get(name);
32
            Method method = listener.getClass().getMethod(methodName, HandlerInterface.class);
33
            return (String) method.invoke(listener, handler);
34
        }
35
36
        return null;
37
    }
38
}
39