ru.sendto.gwt.client.util.Bus Maven / Gradle / Ivy
package ru.sendto.gwt.client.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
/**
*
* @author Lev Nadeinsky
* @date 2017-04-29
*/
public class Bus {
public static interface Event{
R invoke (A a);
}
public static interface VoidEvent{
void invoke (A a);
}
static class EventMap extends HashMap>{
@Override
public List get(Object key) {
// TODO Auto-generated method stub
List list = super.get(key);
return list==null?new ArrayList():list;
}
public void listen(Class key, Event value) {
List list = get(key);
list.add(value);
put(key, list);
}
public void listen(Class key, VoidEvent value) {
List list = get(key);
list.add(t->{value.invoke((A)t);return null;});
put(key, list);
}
public List
fire
(A o){
Class clz = (Class) o.getClass();
List tmp = get(clz);
List> list =tmp;
Object[] results = new Object[list.size()];
for (int i=0 ; i< list.size(); i++){//Event event : list) {
results[i]=list.get(0).invoke(o);
}
return (List) Arrays.asList(results);
}
}
private EventMap map = new EventMap();
static private Bus bus;
private Bus() {
}
public void listen(Class key, Event value) {
map.listen(key, value);
}
public void listen(Class key, VoidEvent value) {
map.listen(key, value);
}
public List
fire (A o){
return map.fire(o);
}
static public Bus get(){
return bus==null?bus=new Bus():bus;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy