static void exec(String... args) { String programName = Optional.ofNullable(System.getProperty(KEY_COMMAND_NAME)) .orElse("java -jar <self.jar>"); new JCommanderWrapper<Runnable>(programName, new Main()) .configure(it -> ServiceLoader.load(CommandProvider.class) .forEach(provider -> provider.accept(it))) .parse(args) .ifPresent(Runnable::run); } }
private static void handle(ParameterException e) { JCommanderWrapper.handle(e, s -> LOG.error("{}", s)); //$NON-NLS-1$ } }
static void exec(String... args) { String programName = Optional.ofNullable(System.getProperty(KEY_COMMAND_NAME)) .orElse("java -jar <self.jar>"); new JCommanderWrapper<Runnable>(programName, new AsakusaPortal()) .addCommand(new VersionCommand()) .configure(it -> ServiceLoader.load(CommandProvider.class) .forEach(provider -> provider.accept(it))) .parse(args) .ifPresent(Runnable::run); }
/** * Parses the program arguments and returns the corresponded command object. * @param args the program arguments * @return the command object, or {@code empty} if there are no commands to execute (e.g. help) * @throws ParameterException if arguments are not valid */ public Optional<T> parse(String... args) { String[] expandedArgs = expand(args); try { root.commander.parse(expandedArgs); } catch (ParameterException e) { Optional.ofNullable(findCommander()).ifPresent(e::setJCommander); throw e; } JCommander commander = findCommander(); @SuppressWarnings("unchecked") T cmd = (T) getActiveCommand(commander); if (cmd != null) { validate(commander, expandedArgs); return Optional.of(cmd); } return Optional.empty(); }
private String[] expand(String[] args) { JCommander commander = findCommander(args); Params params = collectParams(commander); if (params.names.stream() .filter(JCommanderWrapper::isShortNameOption) results.add(arg); } else { if (isShortNameOption(arg) && arg.length() > 2 && dynamics.stream().anyMatch(arg::startsWith) == false) {
private static void collectParams(Params results, Object object) { for (Class<?> current = object.getClass(); current != Object.class && current != null; current = current.getSuperclass()) { for (Field f : current.getDeclaredFields()) { Optional.ofNullable(f.getAnnotation(Parameter.class)).ifPresent(results::add); Optional.ofNullable(f.getAnnotation(DynamicParameter.class)).ifPresent(results::add); try { if (f.isAnnotationPresent(ParametersDelegate.class)) { f.setAccessible(true); Object delegate = f.get(object); collectParams(results, delegate); } } catch (ReflectiveOperationException e) { LOG.warn("error occurred while analyzing arguments: {}", object, e); //$NON-NLS-1$ } } } }
private static Params collectParams(JCommander commander) { Params results = new Params(); commander.getObjects().forEach(it -> collectParams(results, it)); return results; }
static void exec(String... args) { String programName = System.getProperty(KEY_COMMAND_NAME, DEFAULT_COMMAND_NAME); new JCommanderWrapper<Runnable>(programName, new DirectIo()) .configure(new FileGroup().flattern()) .configure(new ConfigurationGroup()) .configure(new TransactionGroup()) .parse(args) .ifPresent(Runnable::run); } }
/** * Program entry. * @param args command line tokens */ public static void main(String... args) { try { exec(args); } catch (CommandExecutionException e) { LOG.error("error occurred while executing command", e); System.exit(1); } catch (CommandConfigurationException e) { LOG.error("{}", e.getMessage()); LOG.debug("configuration error detail: {}", Arrays.toString(args), e); System.exit(2); } catch (ParameterException e) { JCommanderWrapper.handle(e, s -> LOG.error("{}", s)); //$NON-NLS-1$ System.exit(3); } }
static void exec(String... args) { String programName = Optional.ofNullable(System.getProperty(KEY_COMMAND_NAME)) .orElse("java -jar <self.jar>"); new JCommanderWrapper<Runnable>(programName, new Main()) .configure(it -> ServiceLoader.load(CommandProvider.class) .forEach(provider -> provider.accept(it))) .parse(args) .ifPresent(Runnable::run); } }