public HelpCommand(SessionFactory factory) { Registry registry = factory.getRegistry(); registry.register(this); registry.register(new SimpleHelpProvider()); registry.register(new ShellHelpProvider()); registry.register(new SingleCommandHelpProvider()); registry.register(new CommandsHelpProvider()); registry.register(new CommandListHelpProvider()); registry.register(new BundleHelpProvider()); }
@Override public CommandLine parse(Session session, String command, int cursor) { Object service = session.getRegistry().getService(clazz); if (service instanceof Parser) { return ((Parser) service).parse(session, command, cursor); } throw new IllegalStateException("Could not find specified parser"); }
/** * Register a command. * * The session factory must be not null. * * @param command The command that should be registered. */ private void registerCommand(final ConsoleCommandExtension command) { final Registry registry = sessionFactory.getRegistry(); final CommandWrapper wrapperOld; final CommandWrapper wrapperNew; wrapperNew = new CommandWrapper(command); wrapperOld = registeredCommands.put(command, wrapperNew); if (wrapperOld != null) { registry.unregister(wrapperOld); } try { registry.register(wrapperNew); } catch (final Exception ex) { logger.error("Cannot register command '{}'.", command.getCommand(), ex); } }
@Override public void removedService(ServiceReference<Object> reference, List<Command> commands) { for (Command command : commands) { sessionFactory.getRegistry().unregister(command); } } }
@Override public Set<String> getCommands() { return factory.getRegistry().getCommands().stream() .map(c -> c.getScope() + ":" + c.getName()) .collect(Collectors.toSet()); } @Override
if (type.getRawClass() == List.class) { Set<Object> set = new HashSet<>(); set.addAll(registry.getServices(type.getActualTypeArgument(0).getRawClass())); if (registry != this.dependencies) { set.addAll(this.dependencies.getServices(type.getActualTypeArgument(0).getRawClass())); value = registry.getService(type.getRawClass()); if (value == null && registry != this.dependencies) { value = this.dependencies.getService(type.getRawClass());
@Override public Command getCommand(String scope, String name) { if (parent != null) { Command command = parent.getCommand(scope, name); if (command != null) { return command; } } synchronized (services) { List<Command> cmds = commands.get(scope + ":" + name); if (cmds != null && !cmds.isEmpty()) { return cmds.get(0); } } return null; }
@Override public <T> List<T> getServices(Class<T> clazz) { List<T> list = new ArrayList<>(); synchronized (services) { for (Object service : services.values()) { if (service instanceof Factory) { if (clazz.isAssignableFrom(((Factory<?>) service).clazz)) { if (isVisible(service)) { try { list.add(clazz.cast(((Factory<?>) service).callable.call())); } catch (Exception e) { // TODO: log exception } } } } else if (clazz.isInstance(service)) { if (isVisible(service)) { list.add(clazz.cast(service)); } } } } if (parent != null) { list.addAll(parent.getServices(clazz)); } return list; }
@Override public void removedService(ServiceReference<Object> reference, List<Command> commands) { for (Command command : commands) { sessionFactory.getRegistry().unregister(command); } } }
@Override public Set<String> getCommands() { return factory.getRegistry().getCommands().stream() .map(c -> c.getScope() + ":" + c.getName()) .collect(Collectors.toSet()); } @Override
if (type.getRawClass() == List.class) { Set<Object> set = new HashSet<>(); set.addAll(registry.getServices(type.getActualTypeArgument(0).getRawClass())); if (registry != this.dependencies) { set.addAll(this.dependencies.getServices(type.getActualTypeArgument(0).getRawClass())); value = registry.getService(type.getRawClass()); if (value == null && registry != this.dependencies) { value = this.dependencies.getService(type.getRawClass());
@Override public Command getCommand(String scope, String name) { if (parent != null) { Command command = parent.getCommand(scope, name); if (command != null) { return command; } } synchronized (services) { List<Command> cmds = commands.get(scope + ":" + name); if (cmds != null && !cmds.isEmpty()) { return cmds.get(0); } } return null; }
@Override public <T> List<T> getServices(Class<T> clazz) { List<T> list = new ArrayList<>(); synchronized (services) { for (Object service : services.values()) { if (service instanceof Factory) { if (clazz.isAssignableFrom(((Factory<?>) service).clazz)) { if (isVisible(service)) { try { list.add(clazz.cast(((Factory<?>) service).callable.call())); } catch (Exception e) { // TODO: log exception } } } } else if (clazz.isInstance(service)) { if (isVisible(service)) { list.add(clazz.cast(service)); } } } } if (parent != null) { list.addAll(parent.getServices(clazz)); } return list; }
public HelpCommand(SessionFactory factory) { Registry registry = factory.getRegistry(); registry.register(this); registry.register(new SimpleHelpProvider()); registry.register(new ShellHelpProvider()); registry.register(new SingleCommandHelpProvider()); registry.register(new CommandsHelpProvider()); registry.register(new CommandListHelpProvider()); registry.register(new BundleHelpProvider()); }
@Override public String preprocess(Session session, CommandLine commandLine) { Object service = session.getRegistry().getService(clazz); if (service instanceof Parser) { return ((Parser) service).preprocess(session, commandLine); } throw new IllegalStateException("Could not find specified parser"); } }
@Override public void removedService(ServiceReference reference, Object service) { if (service instanceof org.apache.karaf.shell.api.console.Command) { sessionFactory.getRegistry().unregister(service); } if (service instanceof List) { List<org.apache.karaf.shell.api.console.Command> commands = (List<org.apache.karaf.shell.api.console.Command>) service; for (org.apache.karaf.shell.api.console.Command command : commands) { sessionFactory.getRegistry().unregister(command); } } context.ungetService(reference); } }
/** * {@link Action}.{@link #execute()} will be called on the CommandWrapper instance created by Karaf (see * {@link CommandWrapper} default constructor). */ @Override public Object execute() throws Exception { List<Command> commands = registry.getCommands(); for (Command command : commands) { if (command.getScope().equals(SCOPE) && command instanceof CommandWrapper) { command.execute(null, Arrays.asList(new Object[] { "--help" })); } } return null; }
@Override public Command getCommand(String scope, String name) { if (parent != null) { Command command = parent.getCommand(scope, name); if (command != null) { return command; } } synchronized (services) { List<Command> cmds = commands.get(scope + ":" + name); if (cmds != null && !cmds.isEmpty()) { return cmds.get(0); } } return null; }
list.addAll(parent.getServices(clazz));
private void register(final Function command) { log.debug("Registering command: {}", command); if (sessionFactory != null) { sessionFactory.getRegistry().register(command); } else { log.warn("Unable to register command, sessionFactory is null: {}", command); } }