| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you 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 common.opt; |
| |
| public class Option { |
| |
| public String name = ""; |
| public String alias = null; |
| public String aliases[] = null; |
| |
| public String description = ""; |
| public boolean used = false; |
| public boolean required = false; |
| |
| /** |
| * Parse option value, if any. |
| * |
| * @param position |
| * position of this option in list of arguments |
| * @param args |
| * command line arguments |
| * @return how many arguments are consumed, at least 1 |
| */ |
| public int parse(int position, String args[]) { |
| used = true; |
| return 1; |
| } |
| |
| @Override |
| public String toString() { |
| return help(); |
| } |
| |
| /** |
| * Return help string for this option. Example: |
| * |
| * <pre> |
| * --foo|-f Foo option. |
| * </pre> |
| */ |
| public String help() { |
| return join("|", name, alias, aliases) + "\t" + description + ((required) ? " Required." : ""); |
| } |
| |
| /** |
| * Return string like "--foo|-f|--another-foo-alias". |
| */ |
| protected String join(String delim, String name, String alias, String aliases[]) { |
| |
| // Option name is mandatory |
| StringBuilder sb = new StringBuilder(name.length()); |
| sb.append(name); |
| |
| // Alias is optional |
| if (alias != null && alias.length() > 0) { |
| sb.append(delim).append(alias); |
| } |
| |
| // Other aliases are optional too |
| if (aliases != null) { |
| for (String s : aliases) { |
| if (s != null && s.length() > 0) { |
| sb.append(delim).append(s); |
| } |
| } |
| } |
| |
| return sb.toString(); |
| } |
| |
| /** |
| * Return description of options in format suitable for help and usage text. |
| * |
| * @param header |
| * header string to print before list of options |
| * @param options |
| * list of options to print |
| */ |
| public static String toHelp(String header, Option[] options) { |
| StringBuffer sb = new StringBuffer(); |
| sb.append(header).append(":\n"); |
| for (Option option : options) { |
| sb.append(" ").append(option.help()).append('\n'); |
| } |
| return sb.toString(); |
| } |
| |
| } |