protected StringBuffer renderOptions()

in apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Help.java [170:231]


        protected StringBuffer renderOptions(final StringBuffer sb, final int width, final Options options, final int leftPad, final int descPad) {
            final String lpad = createPadding(leftPad);
            final String dpad = createPadding(descPad);
            // first create list containing only <lpad>-a,--aaa where
            // -a is opt and --aaa is long opt; in parallel look for
            // the longest opt string this list will be then used to
            // sort options ascending
            String optionTitle = " -- Option --";
            String exampleTitle = " -- Example --";
            String descriptionTitle = " -- Description --";
            int max = optionTitle.length();
            int maxExample = exampleTitle.length();
            final List<AntOption> optList = options.getOptions().stream().filter(Option::hasLongOpt)
                    .map(AntOption::new).collect(Collectors.toList());
            if (getOptionComparator() != null) {
                optList.sort(Comparator.comparing(AbstractOption::getName));
            }
            List<String> exampleList = new ArrayList<>();
            for (final AntOption option : optList) {
                String argName = StringUtils.defaultIfEmpty(option.getArgName(), "value");
                String fmt = option.isAttribute() ? "<rat:report %s='%s'>" : "<%1$s>%2$s</%1$s>";
                String example = format(fmt, option.getName(), argName);
                exampleList.add(example);
                max = Math.max(option.cleanupName().length(), max);
                maxExample = Math.max(example.length(), maxExample);
            }

            sb.append(optionTitle).append(createPadding(max - optionTitle.length()))
                    .append(dpad)
                    .append(exampleTitle).append(createPadding(maxExample - exampleTitle.length()))
                    .append(dpad)
                    .append(descriptionTitle)
                    .append(getNewLine());

            int x = 0;
            for (final Iterator<AntOption> it = optList.iterator(); it.hasNext();) {
                final AntOption option = it.next();
                String name = option.cleanupName();
                String example = exampleList.get(x++);

                final StringBuilder optBuf = new StringBuilder(name);
                if (name.length() < max) {
                    optBuf.append(createPadding(max - name.length()));
                }
                optBuf.append(dpad).append(example);
                if (example.length() < maxExample) {
                    optBuf.append(createPadding(maxExample - example.length()));
                }
                optBuf.append(dpad);
                final int nextLineTabStop = max + maxExample + 2 * descPad;
                if (option.isDeprecated()) {
                    optBuf.append(option.getDeprecated());
                } else if (option.getDescription() != null) {
                    optBuf.append(option.getDescription());
                }
                renderWrappedText(sb, width, nextLineTabStop, optBuf.toString());
                if (it.hasNext()) {
                    sb.append(getNewLine());
                }
            }
            return sb;
        }