package org.jspringbot.lifecycle; import org.jspringbot.Visitor; import org.springframework.context.ApplicationContext; import java.util.Map; public class LifeCycleHandlerManager implements RobotListenerHandler { private ApplicationContext context; public LifeCycleHandlerManager(ApplicationContext context) { this.context = context; } private void visitAll(Visitor<LifeCycleHandler> visitor) { try { Map<String, LifeCycleHandlerRegistryBean> handlers = context.getBeansOfType(LifeCycleHandlerRegistryBean.class); for(LifeCycleHandlerRegistryBean handler : handlers.values()) { visitor.visit(handler); } } catch(Exception e) { e.printStackTrace(System.out); } } private void visitAllExtension(Visitor<RobotListenerHandler> visitor) { try { Map<String, LifeCycleHandlerRegistryBean> handlers = context.getBeansOfType(LifeCycleHandlerRegistryBean.class); for(LifeCycleHandlerRegistryBean handler : handlers.values()) { if(RobotListenerHandler.class.isInstance(handler.getHandler())) { visitor.visit((RobotListenerHandler) handler.getHandler()); } } } catch(Exception e) { e.printStackTrace(System.out); } } @Override public void startSuite(final String name, final Map attributes) { visitAll(new Visitor<LifeCycleHandler>() { @Override public void visit(LifeCycleHandler handler) { handler.startSuite(name, attributes); } }); } @Override public void endSuite(final String name, final Map attributes) { visitAll(new Visitor<LifeCycleHandler>() { @Override public void visit(LifeCycleHandler handler) { handler.endSuite(name, attributes); } }); } @Override public void startTest(final String name, final Map attributes) { visitAll(new Visitor<LifeCycleHandler>() { @Override public void visit(LifeCycleHandler handler) { handler.startTest(name, attributes); } }); } @Override public void endTest(final String name, final Map attributes) { visitAll(new Visitor<LifeCycleHandler>() { @Override public void visit(LifeCycleHandler handler) { handler.endTest(name, attributes); } }); } @Override public void startKeyword(final String name, final Map attributes) { visitAll(new Visitor<LifeCycleHandler>() { @Override public void visit(LifeCycleHandler handler) { handler.startKeyword(name, attributes); } }); } @Override public void endKeyword(final String name, final Map attributes) { visitAll(new Visitor<LifeCycleHandler>() { @Override public void visit(LifeCycleHandler handler) { handler.endKeyword(name, attributes); } }); } @Override public void startJSpringBotKeyword(final String name, final Map attributes) { visitAll(new Visitor<LifeCycleHandler>() { @Override public void visit(LifeCycleHandler handler) { handler.startJSpringBotKeyword(name, attributes); } }); } @Override public void endJSpringBotKeyword(final String name, final Map attributes) { visitAll(new Visitor<LifeCycleHandler>() { @Override public void visit(LifeCycleHandler handler) { handler.endJSpringBotKeyword(name, attributes); } }); } @Override public void logMessage(final Map message) { visitAllExtension(new Visitor<RobotListenerHandler>() { @Override public void visit(RobotListenerHandler type) { type.logMessage(message); } }); } @Override public void message(final Map message) { visitAllExtension(new Visitor<RobotListenerHandler>() { @Override public void visit(RobotListenerHandler type) { type.message(message); } }); } @Override public void outputFile(final String path) { visitAllExtension(new Visitor<RobotListenerHandler>() { @Override public void visit(RobotListenerHandler type) { type.outputFile(path); } }); } @Override public void logFile(final String path) { visitAllExtension(new Visitor<RobotListenerHandler>() { @Override public void visit(RobotListenerHandler type) { type.logFile(path); } }); } @Override public void reportFile(final String path) { visitAllExtension(new Visitor<RobotListenerHandler>() { @Override public void visit(RobotListenerHandler type) { type.reportFile(path); } }); } @Override public void debugFile(final String path) { visitAllExtension(new Visitor<RobotListenerHandler>() { @Override public void visit(RobotListenerHandler type) { type.debugFile(path); } }); } @Override public void close() { visitAllExtension(new Visitor<RobotListenerHandler>() { @Override public void visit(RobotListenerHandler type) { type.close(); } }); } }