package org.jspringbot.argument; import org.springframework.context.ApplicationContext; import java.util.Map; public final class ArgumentHandlerManager { private ApplicationContext context; public ArgumentHandlerManager(ApplicationContext context) { this.context = context; } private Object handle(String keyword, Object arg) { try { Map<String, ArgumentHandlerRegistryBean> handlers = context.getBeansOfType(ArgumentHandlerRegistryBean.class); for(ArgumentHandlerRegistryBean handler : handlers.values()) { if(handler.isSupported(keyword, arg)) { return handler.handle(arg); } } } catch(Exception e) { e.printStackTrace(System.out); throw new IllegalArgumentException(String.format("Unable to handle arguments '%s'", arg), e); } return arg; } public Object[] handlerArguments(String keyword, Object[] args) { if(args == null || args.length == 0) { return args; } Object[] converted = new Object[args.length]; for (int i = 0; i < args.length; i++) { converted[i] = handle(keyword, args[i]); } return converted; } }