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.
/** * 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 appendAllParametersDetails(StringBuilder, int, String, List<ParameterDescription>) which is inherited from DefaultUsageFormatter.
/** * 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.
Params:
  • out – the builder to append to
  • indentCount – the amount of indentation to apply
  • indent – the indentation
  • sortedParameters – the parameters to append to the builder
/** * 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<ParameterDescription> 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()) ? "<empty string>" : 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"); } } }