/*
* 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.OnMouse;
import net.codjo.dataprocess.common.eventsbinder.dynalistener.EventChecker;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.EventListener;
import java.util.EventObject;
/**
*
*/
public class OnMouseAnnotationManager extends AnnotationManager<OnMouse> {
@Override
public Class<?extends EventListener> getListenerClass(OnMouse currentAnnotation) {
return MouseListener.class;
}
@Override
public String[] getBoundPropertiesNames(OnMouse currentAnnotation) {
return currentAnnotation.value();
}
@Override
public EventChecker createEventChecker(OnMouse currentAnnotation) {
return new OnMouseAnnotationManager.MouseEventChecker(currentAnnotation);
}
private static class MouseEventChecker implements EventChecker {
private final OnMouse onMouse;
MouseEventChecker(OnMouse onMouse) {
this.onMouse = onMouse;
}
public boolean checkEvent(EventObject eventObject, String methodCalled) {
boolean methodOk = false;
boolean popupOk = false;
boolean buttonOk = false;
boolean clickCountOk = false;
boolean modifiersOk = false;
MouseEvent event = (MouseEvent)eventObject;
if (onMouse.popupTriggered() == OnMouse.PopupType.ALL) {
popupOk = true;
}
if (onMouse.popupTriggered() == OnMouse.PopupType.TRUE && event.isPopupTrigger()) {
popupOk = true;
}
if (onMouse.popupTriggered() == OnMouse.PopupType.FALSE && !event.isPopupTrigger()) {
popupOk = true;
}
if (onMouse.button() == -1 || onMouse.button() == event.getButton()) {
buttonOk = true;
}
if (onMouse.clickCount() == -1 || onMouse.clickCount() == event.getClickCount()) {
clickCountOk = true;
}
if (onMouse.modifiers() == -1 || onMouse.modifiers() == event.getModifiers()) {
modifiersOk = true;
}
methodOk = checkMethodCalled(methodOk, methodCalled);
return popupOk && buttonOk && clickCountOk && modifiersOk && methodOk;
}
private boolean checkMethodCalled(boolean methodOk, String methodCalled) {
switch (onMouse.eventType()) {
case ALL:
methodOk = true;
break;
case PRESSED:
methodOk = "mousePressed".equals(methodCalled);
break;
case RELEASED:
methodOk = "mouseReleased".equals(methodCalled);
break;
case CLICKED:
methodOk = "mouseClicked".equals(methodCalled);
break;
case ENTERED:
methodOk = "mouseEntered".equals(methodCalled);
break;
case EXITED:
methodOk = "mouseExited".equals(methodCalled);
}
return methodOk;
}
}
}