package org.eclipse.iee.core; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.eclipse.iee.core.utils.ReflectionUtils; public class HandlerManager<T> { private Class<T> type; private Map<Class<?>, T> objects = new HashMap<>(); public HandlerManager(Class<T> type) { this.type = type; } public void registerHandler(T handler) { objects.put(extractType(handler), handler); } private Class<?> extractType(T handler) { return ReflectionUtils.getGenericParameterClass(handler.getClass(), type, 0); } public void unregisterHandler(T handler) { Set<Entry<Class<?>, T>> entrySet = objects.entrySet(); for (Iterator<Entry<Class<?>, T>> iterator = entrySet .iterator(); iterator.hasNext();) { Entry<Class<?>, T> entry = iterator.next(); if (entry.getValue() == handler) { iterator.remove(); } } } public T getHandler(Class<?> type) { T object = objects.get(type); if (object != null) { return object; } return null; } }