
com.beust.jcommander.UnixStyleUsageFormatter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.portal.tools.rest.builder
Show all versions of com.liferay.portal.tools.rest.builder
Liferay Portal Tools REST Builder
The newest version!
/**
* Copyright (C) 2010 the original author or authors.
* See the notice.md file distributed with this work for additional
* information regarding copyright ownership.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.beust.jcommander;
import java.util.EnumSet;
import java.util.List;
/**
* A unix-style usage formatter. This works by overriding and modifying the output of
* {@link #appendAllParametersDetails(StringBuilder, int, String, List)} which is inherited from
* {@link DefaultUsageFormatter}.
*/
public class UnixStyleUsageFormatter extends DefaultUsageFormatter {
public UnixStyleUsageFormatter(JCommander commander) {
super(commander);
}
/**
* Appends the details of all parameters in the given order to the argument string builder, indenting every
* line with indentCount-many indent.
*
* @param out the builder to append to
* @param indentCount the amount of indentation to apply
* @param indent the indentation
* @param sortedParameters the parameters to append to the builder
*/
public void appendAllParametersDetails(StringBuilder out, int indentCount, String indent,
List sortedParameters) {
if (sortedParameters.size() > 0) {
out.append(indent).append(" Options:\n");
}
// Calculate prefix indent
int prefixIndent = 0;
for (ParameterDescription pd : sortedParameters) {
WrappedParameter parameter = pd.getParameter();
String prefix = (parameter.required() ? "* " : " ") + pd.getNames();
if (prefix.length() > prefixIndent) {
prefixIndent = prefix.length();
}
}
// Append parameters
for (ParameterDescription pd : sortedParameters) {
WrappedParameter parameter = pd.getParameter();
String prefix = (parameter.required() ? "* " : " ") + pd.getNames();
out.append(indent)
.append(" ")
.append(prefix)
.append(s(prefixIndent - prefix.length()))
.append(" ");
final int initialLinePrefixLength = indent.length() + prefixIndent + 3;
// Generate description
String description = pd.getDescription();
Object def = pd.getDefault();
if (pd.isDynamicParameter()) {
String syntax = "(syntax: " + parameter.names()[0] + "key" + parameter.getAssignment() + "value)";
description += (description.length() == 0 ? "" : " ") + syntax;
}
if (def != null && !pd.isHelp()) {
String displayedDef = Strings.isStringEmpty(def.toString()) ? "" : def.toString();
String defaultText = "(default: " + (parameter.password() ? "********" : displayedDef) + ")";
description += (description.length() == 0 ? "" : " ") + defaultText;
}
Class> type = pd.getParameterized().getType();
if (type.isEnum()) {
String valueList = EnumSet.allOf((Class extends Enum>) type).toString();
// Prevent duplicate values list, since it is set as 'Options: [values]' if the description
// of an enum field is empty in ParameterDescription#init(..)
if (!description.contains("Options: " + valueList)) {
String possibleValues = "(values: " + valueList + ")";
description += (description.length() == 0 ? "" : " ") + possibleValues;
}
}
// Append description
// The magic value 3 is the number of spaces between the name of the option and its description
// in DefaultUsageFormatter#appendCommands(..)
wrapDescription(out, indentCount + prefixIndent - 3, initialLinePrefixLength, description);
out.append("\n");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy