package com.griddynamics.jagger.engine.e1.collector; import com.griddynamics.jagger.coordinator.NodeContext; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; /** * Default implementation of ${@link ResponseValidatorProvider} which provides instances of ${@link ResponseValidator} * using reflection and a mandatory constructor for ${@link ResponseValidator} instances * @n * Created by Andrey Badaev * Date: 13/12/16 * * @ingroup Main_Validators_group */ public class DefaultResponseValidatorProvider implements ResponseValidatorProvider { private final Class<? extends ResponseValidator<?, ?, ?>> clazz; public DefaultResponseValidatorProvider(Class<? extends ResponseValidator<?, ?, ?>> clazz) { this.clazz = clazz; } public static DefaultResponseValidatorProvider of(Class<? extends ResponseValidator<?, ?, ?>> clazz) { return new DefaultResponseValidatorProvider(clazz); } @Override public ResponseValidator<?, ?, ?> provide(String sessionId, String taskId, NodeContext kernelContext) { try { Constructor<? extends ResponseValidator> constructor = clazz.getConstructor(String.class, String.class, NodeContext.class); return constructor.newInstance(taskId, sessionId, kernelContext); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } catch (InstantiationException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); } } }