diff --git a/lib/src/main/java/net/tomatentum/cutin/MethodProcessor.java b/lib/src/main/java/net/tomatentum/cutin/MethodProcessor.java index cbbbcb0..01853b4 100644 --- a/lib/src/main/java/net/tomatentum/cutin/MethodProcessor.java +++ b/lib/src/main/java/net/tomatentum/cutin/MethodProcessor.java @@ -1,7 +1,9 @@ package net.tomatentum.cutin; -public interface MethodProcessor { +import net.tomatentum.cutin.container.MethodContainer; - void process(Object context); +public interface MethodProcessor { + + void process(Object context, MethodContainer methodContainer); } diff --git a/lib/src/main/java/net/tomatentum/cutin/ProcessorContainer.java b/lib/src/main/java/net/tomatentum/cutin/ProcessorContainer.java index da95b5b..0015a78 100644 --- a/lib/src/main/java/net/tomatentum/cutin/ProcessorContainer.java +++ b/lib/src/main/java/net/tomatentum/cutin/ProcessorContainer.java @@ -1,7 +1,11 @@ package net.tomatentum.cutin; -public interface ProcessorContainer { +import java.util.Collection; - ProcessorContainer addProcessor(MethodProcessor processor); +public interface ProcessorContainer { + + ProcessorContainer addProcessor(MethodProcessor processor); + + Collection> processor(); } diff --git a/lib/src/main/java/net/tomatentum/cutin/ProcessorMethodExecutor.java b/lib/src/main/java/net/tomatentum/cutin/ProcessorMethodExecutor.java index 747609c..23041a3 100644 --- a/lib/src/main/java/net/tomatentum/cutin/ProcessorMethodExecutor.java +++ b/lib/src/main/java/net/tomatentum/cutin/ProcessorMethodExecutor.java @@ -1,31 +1,41 @@ package net.tomatentum.cutin; +import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ProcessorMethodExecutor implements MethodExecutor, ProcessorContainer { +import net.tomatentum.cutin.container.MethodContainer; + +public class ProcessorMethodExecutor implements MethodExecutor, ProcessorContainer { private Logger logger = LoggerFactory.getLogger(getClass()); - private Set processors; + private MethodContainer methodContainer; + private Set> processors; - public ProcessorMethodExecutor() { + public ProcessorMethodExecutor(MethodContainer methodContainer) { + this.methodContainer = methodContainer; this.processors = new HashSet<>(); } @Override - public ProcessorContainer addProcessor(MethodProcessor processor) { + public ProcessorContainer addProcessor(MethodProcessor processor) { processors.add(processor); return this; } + @Override + public Collection> processor() { + return this.processors; + } + @Override public void handle(Object context) { - logger.debug("Received {} interaction ", context); - processors.forEach(x -> x.process(context)); + logger.debug("Handling {} context ", context); + processors.forEach(x -> x.process(context, methodContainer)); } } diff --git a/lib/src/main/java/net/tomatentum/cutin/ReflectedMethod.java b/lib/src/main/java/net/tomatentum/cutin/ReflectedMethod.java index cf3e51f..44840c1 100644 --- a/lib/src/main/java/net/tomatentum/cutin/ReflectedMethod.java +++ b/lib/src/main/java/net/tomatentum/cutin/ReflectedMethod.java @@ -12,15 +12,15 @@ import org.slf4j.LoggerFactory; import net.tomatentum.cutin.util.ReflectionUtil; -public abstract class ReflectedMethod { +public abstract class ReflectedMethod { private Logger logger = LoggerFactory.getLogger(getClass()); - private Method method; - private Object containingObject; + protected Method method; + protected Object containingObject; - public ReflectedMethod(Method method, Object containingObject) { - if (!Arrays.asList(containingObject.getClass().getMethods()).contains(method)) + protected ReflectedMethod(Method method, Object containingObject) { + if (!Arrays.asList(containingObject.getClass().getDeclaredMethods()).contains(method)) throw new InvalidParameterException("Method does not apply to specified handler"); this.method = method; this.containingObject = containingObject; @@ -28,6 +28,8 @@ public abstract class ReflectedMethod { public abstract Object getParameter(Object context, int index); + public abstract I identifier(); + public Object run(Object context) { method.setAccessible(true); try { diff --git a/lib/src/main/java/net/tomatentum/cutin/ReflectedMethodFactoryImpl.java b/lib/src/main/java/net/tomatentum/cutin/ReflectedMethodFactoryImpl.java index 7fa2517..ae208f3 100644 --- a/lib/src/main/java/net/tomatentum/cutin/ReflectedMethodFactoryImpl.java +++ b/lib/src/main/java/net/tomatentum/cutin/ReflectedMethodFactoryImpl.java @@ -27,17 +27,17 @@ public class ReflectedMethodFactoryImpl implements ReflectedMethodFactory { @Override public Optional produce(Method method, Object containingClass) { - Optional imethod = this.factories.stream() + Optional rmethod = this.factories.stream() .map(f -> factoryProduce(f, method, containingClass)) .filter(Optional::isPresent) .map(Optional::get) .findFirst(); - if (imethod.isEmpty()) { + if (rmethod.isEmpty()) { logger.debug("Could not produce a ReflectedMethod for Method {}", ReflectionUtil.getFullMethodName(method)); } - return imethod; + return rmethod; } @Override