@Override public List<StepInvoker> getStepInvokers() { List<StepInvoker> invokerList = new LinkedList<>(); for ( StepInvokerProvider p : childInvokers) { invokerList.addAll(p.getStepInvokers()); } return invokerList; } }
@Override public List<StepInvoker> getStepInvokers() { return wrappedProvider.getStepInvokers() .stream() .map(stepInvoker -> new StepInvokerPatternWrapper(stepInvoker, patternProcessingFunction)) .collect(Collectors.toList()); }
private void addStepProviderInvokers(List<StepInvoker> stepInvokers) { if (handlerInstance instanceof StepInvokerProvider) { List<StepInvoker> invokersByInterface = ((StepInvokerProvider) handlerInstance).getStepInvokers(); stepInvokers.addAll(invokersByInterface); log.debug("Added " + invokersByInterface.size() + " step invokers for handler class " + handlerInstance.getClass().getSimpleName() + " step provider"); } }
/** * Add handler classes containing the step definitions to publish * This must be done before publish is called (or while the step publisher is disconnected) */ public void addHandlers(Object... handlers) { for ( Object handler : handlers) { //assert that this is a Handler checkValidHandlerType(handler); StepInvokerProvider invokerFactory = new HandlerClassInvokerFactory(handler); List<StepInvoker> invokers = invokerFactory.getStepInvokers(); if (invokers.isEmpty()) { Class<?> handlerClass = handler.getClass(); log.warn(String.format("Cannot export object of type (%s) it either: 1) Has no methods that declare the @Step annotation " + "2) Returns zero StepInvoker's from a StepInvokerProvider instance", handlerClass.getName())); } for ( StepInvoker i : invokers) { addStepInvoker(i); } } }
/** * @param patternPreProcessor - A function to perform a mapping on the patterns of all exported handler steps * @param handlers - Instances of handler classes which should be exported */ public ChorusHandlerJmxExporter(UnaryOperator<Pattern> patternPreProcessor, Object... handlers) { this.patternPreProcessor = patternPreProcessor; for ( Object handler : handlers) { //assert that this is a Handler checkValidHandlerType(handler); StepInvokerProvider invokerFactory = new HandlerClassInvokerFactory(handler); //Process the patterns if a step pattern pre processor is set //This mechanism lets the user transform the patterns of all steps exported by a component, for example if ( patternPreProcessor != DEFAULT_STEP_PATTERN_PREPROCESSOR) { invokerFactory = new PatternPreProcessingProvider(patternPreProcessor, invokerFactory); } List<StepInvoker> invokers = invokerFactory.getStepInvokers(); if (invokers.isEmpty()) { Class<?> handlerClass = handler.getClass(); log.warn(String.format("Cannot export object of type (%s) it either: 1) Has no methods that declare the @Step annotation " + "2) Returns zero StepInvoker's from a StepInvokerProvider instance", handlerClass.getName())); } for ( StepInvoker i : invokers) { addStepInvoker(i); } } }
@Test public void canExtractStepHandlersFromAStepInvokerProvider() { StepInvoker mockStepInvoker = mock(StepInvoker.class); when(mockStepInvoker.getStepPattern()).thenReturn(Pattern.compile(EXPECTED_PATTERN)); when(mockStepInvoker.getRetry()).thenReturn(StepRetry.NO_RETRY); StepInvokerProvider mockStepInvokerProvider = mock(StepInvokerProvider.class); when(mockStepInvokerProvider.getStepInvokers()).thenReturn(Arrays.asList(mockStepInvoker)); ChorusHandlerJmxExporter chorusHandlerJmxExporter = new ChorusHandlerJmxExporter(mockStepInvokerProvider); List<JmxInvokerResult> jmxInvokerResults = chorusHandlerJmxExporter.getStepInvokers(); assertEquals(1, jmxInvokerResults.size()); String stepPattern = (String)jmxInvokerResults.get(0).get(JmxInvokerResult.PATTERN); assertEquals(EXPECTED_PATTERN, stepPattern); }
List<StepInvoker> stepInvokers = stepInvokerProvider.getStepInvokers(); stepCatalogue.addSteps(stepInvokers);