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

com.github.greengerong.ConditionRunAspect Maven / Gradle / Ivy

package com.github.greengerong;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;

@Aspect
public class ConditionRunAspect {

    @Around("methodsToBeConditionRun(conditionRun)")
    public Object profile(ProceedingJoinPoint pjp, ConditionRun conditionRun) throws Throwable {
        final Result result = isExec(pjp, conditionRun);
        if (result.isExec()) {
            return pjp.proceed();
        }
        return result.getDefaultValue();
    }

    private Result isExec(ProceedingJoinPoint pjp, ConditionRun conditionRun) {
        try {
            final Runner runner = conditionRun.value().newInstance();
            final MethodSignature signature = (MethodSignature) pjp.getSignature();
            return runner.exec(signature, pjp.getArgs());
        } catch (Exception e) {
            throw new RuntimeException("Runner must be empty constructor and make sure the config is ok.", e);
        }
    }

    @Pointcut(value = "@annotation(conditionRun)")
    public void methodsToBeConditionRun(ConditionRun conditionRun) {
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy