All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.oberasoftware.base.event.impl.HandlerEntryImpl Maven / Gradle / Ivy

There is a newer version: 3.0
Show newest version
package com.oberasoftware.base.event.impl;

import com.google.common.collect.ObjectArrays;
import com.oberasoftware.base.event.HandlerEntry;
import org.slf4j.Logger;

import java.lang.reflect.Method;
import java.util.Optional;

import static org.slf4j.LoggerFactory.getLogger;

/**
 * @author renarj
 */
public class HandlerEntryImpl implements HandlerEntry {
    private static final Logger LOG = getLogger(HandlerEntryImpl.class);

    private Method eventMethod;
    private Object listenerInstance;

    public HandlerEntryImpl(Object listenerInstance, Method eventMethod) {
        this.eventMethod = eventMethod;
        this.listenerInstance = listenerInstance;
    }

    @Override
    public Optional executeHandler(Object event, Object... args) {
        LOG.debug("Executing event listener: {} method: {} for event: {}", listenerInstance.getClass().getSimpleName(), eventMethod.getName(), event);
        try {
            int argumentLength = eventMethod.getParameterTypes().length;
            Object result = null;
            if(argumentLength == 1) {
                result = eventMethod.invoke(listenerInstance, event);
            } else {
                Object[] eventArguments = ObjectArrays.concat(event, args);
                if(argumentLength == eventArguments.length) {
                    LOG.debug("Calling method: {} with args: {}", eventMethod.getName(), eventArguments);
                    result = eventMethod.invoke(listenerInstance, eventArguments);
                } else {
                    LOG.debug("Cannot executed event method: {} not enough arguments: {}", event, eventArguments);
                }
            }
            return Optional.ofNullable(result);
        } catch (Throwable e) {
            LOG.error("Unable to execute listener instance", e);
        }

        return Optional.empty();
    }

    @Override
    public Method getEventMethod() {
        return eventMethod;
    }

    @Override
    public Object getListenerInstance() {
        return listenerInstance;
    }

    @Override
    public String toString() {
        return "HandlerEntryImpl{" +
                "eventMethod=" + eventMethod.getDeclaringClass() + "." + eventMethod.getName() +
                ", listenerInstance=" + listenerInstance +
                '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy