/*
* 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 org.weasis.core.api.command;
import java.util.List;
public interface Option {
/**
* stop parsing on the first unknown option. This allows one parser to get its own options and then pass the
* remaining options to another parser.
*
* @param stopOnBadOption
*/
Option setStopOnBadOption(boolean stopOnBadOption);
/**
* require options to precede args. Default is false, so options can appear between or after args.
*
* @param optionsFirst
*/
Option setOptionsFirst(boolean optionsFirst);
/**
* parse arguments. If skipArgv0 is true, then parsing begins at arg1. This allows for commands where argv0 is the
* command name rather than a real argument.
*
* @param argv
* @param skipArg0
* @return
*/
Option parse(List<? extends Object> argv, boolean skipArg0);
/**
* parse arguments.
*
* @see {@link #parse(List, boolean)
*
*/
Option parse(List<? extends Object> argv);
/**
* parse arguments.
*
* @see {@link #parse(List, boolean)
*
*/
Option parse(Object[] argv, boolean skipArg0);
/**
* parse arguments.
*
* @see {@link #parse(List, boolean)
*
*/
Option parse(Object[] argv);
/**
* test whether specified option has been explicitly set.
*
* @param name
* @return
*/
boolean isSet(String name);
/**
* get value of named option. If multiple options given, this method returns the last one. Use
* {@link #getList(String)} to get all values.
*
* @param name
* @return
* @throws IllegalArgumentException
* if value is not a String.
*/
String get(String name);
/**
* get list of all values for named option.
*
* @param name
* @return empty list if option not given and no default specified.
* @throws IllegalArgumentException
* if all values are not Strings.
*/
List<String> getList(String name);
/**
* get value of named option as an Object. If multiple options given, this method returns the last one. Use
* {@link #getObjectList(String)} to get all values.
*
* @param name
* @return
*/
Object getObject(String name);
/**
* get list of all Object values for named option.
*
* @param name
* @return
*/
List<Object> getObjectList(String name);
/**
* get value of named option as a Number.
*
* @param name
* @return
* @throws IllegalArgumentException
* if argument is not a Number.
*/
int getNumber(String name);
/**
* get remaining non-options args as Strings.
*
* @return
* @throws IllegalArgumentException
* if args are not Strings.
*/
List<String> args();
/**
* get remaining non-options args as Objects.
*
* @return
*/
List<Object> argObjects();
/**
* print usage message to System.err.
*/
void usage();
/**
* print specified usage error to System.err. You should explicitly throw the returned exception.
*
* @param error
* @return IllegalArgumentException
*/
IllegalArgumentException usageError(String error);
default boolean isOnlyOneOptionActivate(String... options) {
int trueCount = 0;
for (String name : options) {
if (isSet(name)) {
trueCount++;
}
}
return trueCount == 1;
}
}