/** * Returns a metadata object for this command. Default implementation * generates barebone metadata based on class name. * * @return metadata object describing current command. * @since 0.12 */ default CommandMetadata getMetadata() { return CommandMetadata.builder(getClass()).build(); } }
protected Collection<HelpOption> collectOptions() { HelpOptions helpOptions = new HelpOptions(); application.getCommands().forEach(c -> { // for now expose commands as simply options (commands are options in a default CLI parser) helpOptions.add(c.asOption()); c.getOptions().forEach(o -> helpOptions.add(o)); }); application.getOptions().forEach(o -> helpOptions.add(o)); return helpOptions.getOptions(); }
private Builder() { this.command = new CommandMetadata(); }
/** * Returns an option representation of this command, that may be used in help generation or exposing the command * in a CLI parser. * * @return option representation of this command. * @since 0.21 */ public OptionMetadata asOption() { // TODO: cache the value? // using getters instead of vars ; some getters have logic return OptionMetadata.builder(getName()).shortName(getShortName()).description(getDescription()).build(); }
@Provides @Singleton ApplicationMetadata provideApplicationMetadata( ApplicationDescription descriptionHolder, CommandManager commandManager, Set<OptionMetadata> options, Set<DeclaredVariable> declaredVars, ModulesMetadata modulesMetadata) { ApplicationMetadata.Builder builder = ApplicationMetadata .builder() .description(descriptionHolder.getDescription()) .addOptions(options); commandManager.getAllCommands().values().forEach(mc -> { if (!mc.isHidden() && !mc.isDefault()) { builder.addCommand(mc.getCommand().getMetadata()); } }); // merge default command options with top-level app options commandManager.getPublicDefaultCommand().ifPresent(c -> builder.addOptions(c.getMetadata().getOptions())); declaredVars.forEach(dv -> DeclaredVariableMetaCompiler .compileIfValid(dv, modulesMetadata) .ifPresent(builder::addVariable)); return builder.build(); }
protected ManagedCommand addCommand(Map<String, ManagedCommand> commandMap, ManagedCommand managedCommand) { Command command = managedCommand.getCommand(); String name = command.getMetadata().getName(); return commandMap.put(name, managedCommand); }
/** * Returns an option representation of this command, that may be used in help generation or exposing the command * in a CLI parser. * * @return option representation of this command. * @since 0.21 */ public OptionMetadata asOption() { // TODO: cache the value? // using getters instead of vars ; some getters have logic return OptionMetadata.builder(getName()).shortName(getShortName()).description(getDescription()).build(); }
@Provides @Singleton ApplicationMetadata provideApplicationMetadata( ApplicationDescription descriptionHolder, CommandManager commandManager, Set<OptionMetadata> options, Set<DeclaredVariable> declaredVars, ModulesMetadata modulesMetadata) { ApplicationMetadata.Builder builder = ApplicationMetadata .builder() .description(descriptionHolder.getDescription()) .addOptions(options); commandManager.getAllCommands().values().forEach(mc -> { if (!mc.isHidden() && !mc.isDefault()) { builder.addCommand(mc.getCommand().getMetadata()); } }); // merge default command options with top-level app options commandManager.getPublicDefaultCommand().ifPresent(c -> builder.addOptions(c.getMetadata().getOptions())); declaredVars.forEach(dv -> DeclaredVariableMetaCompiler .compileIfValid(dv, modulesMetadata) .ifPresent(builder::addVariable)); return builder.build(); }
protected void addCommandNoOverride(Map<String, ManagedCommand> commandMap, ManagedCommand managedCommand) { ManagedCommand existing = addCommand(commandMap, managedCommand); // complain on dupes if (existing != null && existing.getCommand() != managedCommand.getCommand()) { String c1 = existing.getCommand().getClass().getName(); String c2 = managedCommand.getCommand().getClass().getName(); String message = String.format("More than one DI command named '%s'. Conflicting types: %s, %s.", managedCommand.getCommand().getMetadata().getName(), c1, c2); throw new BootiqueException(1, message); } } }
public HelpCommand(BootLogger bootLogger, Provider<HelpGenerator> helpGeneratorProvider) { super(CommandMetadata.builder(HelpCommand.class).description("Prints this message.").build()); this.bootLogger = bootLogger; this.helpGeneratorProvider = helpGeneratorProvider; }
protected OptionParser createParser() { // do not allow option abbreviations .. we will provide short forms explicitly OptionParser parser = new OptionParser(false); application.getCommands().forEach(c -> { c.getOptions().forEach(o -> addOption(parser, o)); // using option-bound command strategy... OptionMetadata commandAsOption = c.asOption(); addOption(parser, commandAsOption); }); // load global options application.getOptions().forEach(o -> addOption(parser, o)); return parser; }
protected void mergeOverrides(Map<String, ManagedCommand> commandMap) { if (commandOverrides != null) { commandOverrides.forEach(co -> { ManagedCommand.Builder builder = ManagedCommand.builder(co); // check existing command prior to overriding... preserve existing "help" and "default" flags ManagedCommand existing = commandMap.get(co.getMetadata().getName()); if (existing != null) { // preserve existing flags... if (existing.isHelp()) { builder.asHelp(); } if (existing.isDefault()) { builder.asDefault(); } // log override String i1 = existing.getCommand().getClass().getName(); String i2 = co.getClass().getName(); bootLogger.trace(() -> String.format("Overriding command '%s' (old command: %s, new command: %s)", co.getMetadata().getName(), i1, i2)); } addCommand(commandMap, builder.build()); }); } }
private Builder() { this.command = new CommandMetadata(); }
public HelpConfigCommand(BootLogger bootLogger, Provider<ConfigHelpGenerator> helpGeneratorProvider) { super(CommandMetadata .builder(HelpConfigCommand.class) .description("Prints information about application modules and their configuration options.") .shortName('H')); this.bootLogger = bootLogger; this.helpGeneratorProvider = helpGeneratorProvider; }
protected Collection<HelpOption> collectOptions() { HelpOptions helpOptions = new HelpOptions(); application.getCommands().forEach(c -> { // for now expose commands as simply options (commands are options in a default CLI parser) helpOptions.add(c.asOption()); c.getOptions().forEach(o -> helpOptions.add(o)); }); application.getOptions().forEach(o -> helpOptions.add(o)); return helpOptions.getOptions(); }
protected ManagedCommand addCommand(Map<String, ManagedCommand> commandMap, ManagedCommand managedCommand) { Command command = managedCommand.getCommand(); String name = command.getMetadata().getName(); return commandMap.put(name, managedCommand); }
/** * Returns a metadata object for this command. Default implementation * generates barebone metadata based on class name. * * @return metadata object describing current command. * @since 0.12 */ default CommandMetadata getMetadata() { return CommandMetadata.builder(getClass()).build(); } }
protected OptionParser createParser() { // do not allow option abbreviations .. we will provide short forms explicitly OptionParser parser = new OptionParser(false); application.getCommands().forEach(c -> { c.getOptions().forEach(o -> addOption(parser, o)); // using option-bound command strategy... OptionMetadata commandAsOption = c.asOption(); addOption(parser, commandAsOption); }); // load global options application.getOptions().forEach(o -> addOption(parser, o)); return parser; }
protected void addCommandNoOverride(Map<String, ManagedCommand> commandMap, ManagedCommand managedCommand) { ManagedCommand existing = addCommand(commandMap, managedCommand); // complain on dupes if (existing != null && existing.getCommand() != managedCommand.getCommand()) { String c1 = existing.getCommand().getClass().getName(); String c2 = managedCommand.getCommand().getClass().getName(); String message = String.format("More than one DI command named '%s'. Conflicting types: %s, %s.", managedCommand.getCommand().getMetadata().getName(), c1, c2); throw new BootiqueException(1, message); } } }
/** Constructor. * * @param compiler the SARL batch compiler. * @param configuration the configuration of the tool. * @param pathDetector the detector of path. * @param progressConfig the configuration of the progress bar. */ public CompilerCommand(Provider<SarlBatchCompiler> compiler, Provider<SarlConfig> configuration, Provider<PathDetector> pathDetector, Provider<ProgressBarConfig> progressConfig) { super(CommandMetadata .builder(CompilerCommand.class) .description(Messages.CompilerCommand_0)); this.compiler = compiler; this.configuration = configuration; this.pathDetector = pathDetector; this.progressConfig = progressConfig; }