Behavioral.Mediator.Mediator   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 25
Duplicated Lines 0 %

Importance

Changes 5
Bugs 0 Features 1
Metric Value
wmc 6
eloc 18
c 5
b 0
f 1
dl 0
loc 25
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A addListener(AbstractListener,String) 0 9 3
A notify(String,HandlerInterface) 0 10 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