package gueei.binding.listeners; import gueei.binding.MulticastListener; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.HashMap; import android.view.View; public abstract class ViewMulticastListener<T> extends MulticastListener<View, T> { public abstract void registerToView(View v); @Override public void registerToHost(View host) { registerToView(host); } protected ArrayList<T> listeners = new ArrayList<T>(0); public void removeListener(T listener){ listeners.remove(listener); } public void register(T listener){ listeners.add(listener); } public void registerWithHighPriority(T listener){ listeners.add(0, listener); } public static class Factory{ public static void RegisterConstructorE(Class<?> type, Constructor<?> constructor){ constructors.put(type, constructor); } public static void RegisterConstructor(Class<?> type, Class<?> listener){ try { RegisterConstructorE(type, listener.getConstructor()); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static HashMap<Class<?>, Constructor<?>> constructors = new HashMap<Class<?>, Constructor<?>>(); @SuppressWarnings("unchecked") public static <T> ViewMulticastListener<T> create(T listenerType, View v){ if (constructors.containsKey(listenerType)){ try { ViewMulticastListener<T> listener = (ViewMulticastListener<T>)constructors.get(listenerType).newInstance(); listener.registerToView(v); return listener; } catch (Exception e) { return null; } } return null; } } }