/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.dataprocess.common.eventsbinder.annotations.managers;
import net.codjo.dataprocess.common.eventsbinder.AnnotationManager;
import net.codjo.dataprocess.common.eventsbinder.annotations.events.OnKey;
import net.codjo.dataprocess.common.eventsbinder.dynalistener.EventChecker;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.EventListener;
import java.util.EventObject;
/**
*
*/
public class OnKeyAnnotationManager extends AnnotationManager<OnKey> {
@Override
public Class<?extends EventListener> getListenerClass(OnKey currentAnnotation) {
return KeyListener.class;
}
@Override
public String[] getBoundPropertiesNames(OnKey currentAnnotation) {
return currentAnnotation.propertiesBound();
}
@Override
public EventChecker createEventChecker(OnKey currentAnnotation) {
return new KeyEventChecker(currentAnnotation);
}
private static class KeyEventChecker implements EventChecker {
private final OnKey onKey;
KeyEventChecker(OnKey onKey) {
this.onKey = onKey;
}
public boolean checkEvent(EventObject eventObject, String methodCalled) {
boolean keyCharOk = false;
boolean keyCodeOk = false;
boolean modifiersOk = false;
boolean methodOk = false;
KeyEvent keyEvent = (KeyEvent)eventObject;
if (onKey.keyChar() == 0 || keyEvent.getKeyChar() == onKey.keyChar()) {
keyCharOk = true;
}
if (onKey.keyCode() == -1 || keyEvent.getKeyCode() == onKey.keyCode()) {
keyCodeOk = true;
}
if (onKey.modifiers() == -1 || keyEvent.getModifiers() == onKey.modifiers()) {
modifiersOk = true;
}
switch (onKey.eventType()) {
case ALL:
methodOk = true;
break;
case PRESSED:
methodOk = "keyPressed".equals(methodCalled);
break;
case RELEASED:
methodOk = "keyReleased".equals(methodCalled);
break;
case TYPED:
methodOk = "keyTyped".equals(methodCalled);
}
return keyCharOk && keyCodeOk && modifiersOk && methodOk;
}
}
}