| // 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(); | |
| } | |
| } |