package roboguice.event;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
* ContextSingleton Observer testing class exercising the various implementation combinations.
*
* @author John Ericksen
*/
public class ContextObserverTesterImpl extends ContextObserverBase implements ContextObserverTester{
public static final String[] methods = {
"observesEvent",
"observesProtectedEvent",
"observesPackagePrivateEvent",
"observesPrivateEvent",
"observesOverloadedEvent",
"observesOverloadedProtectedEvent",
"observesOverloadedPackagePrivateEvent",
"observesImplementedEvent"
};
public void observesEvent(@Observes EventOne event){
triggerCalled(methods[0], EventOne.class);
}
public void observesEvent(@Observes EventTwo event){
triggerCalled(methods[0], EventOne.class);
}
protected void observesProtectedEvent(@Observes EventOne event){
triggerCalled(methods[1], EventOne.class);
}
protected void observesProtectedEvent(@Observes EventTwo event){
triggerCalled(methods[1], EventOne.class);
}
void observesPackagePrivateEvent(@Observes EventOne event){
triggerCalled(methods[2], EventOne.class);
}
void observesPackagePrivateEvent(@Observes EventTwo event){
triggerCalled(methods[2], EventOne.class);
}
@SuppressWarnings("unused")
private void observesPrivateEvent(@Observes EventOne event){
triggerCalled(methods[3], EventOne.class);
}
@SuppressWarnings("unused")
private void observesPrivateEvent(@Observes EventTwo event){
triggerCalled(methods[3], EventOne.class);
}
public void observesOverloadedEvent(EventOne event){
triggerCalled(methods[4], EventOne.class);
}
public void observesOverloadedEvent(EventTwo event){
triggerCalled(methods[4], EventTwo.class);
}
protected void observesOverloadedProtectedEvent(EventOne event){
triggerCalled(methods[5], EventOne.class);
}
protected void observesOverloadedProtectedEvent(EventTwo event){
triggerCalled(methods[5], EventTwo.class);
}
void observesOverloadedPackagePrivateEvent(EventOne event){
triggerCalled(methods[6], EventOne.class);
}
void observesOverloadedPackagePrivateEvent(EventTwo event){
triggerCalled(methods[6], EventTwo.class);
}
public void observesImplementedEvent(EventOne event){
triggerCalled(methods[7], EventOne.class);
}
public void observesImplementedEvent(EventTwo event){
triggerCalled(methods[7], EventTwo.class);
}
public static List<Method> getMethods(Class<?> eventClass) throws NoSuchMethodException {
List<Method> methodList = new ArrayList<Method>();
methodList.addAll(ContextObserverBase.getMethods(eventClass));
for(String method : ContextObserverTesterImpl.methods){
methodList.add(ContextObserverTesterImpl.class.getDeclaredMethod(method, eventClass));
}
return methodList;
}
}