co.cask.common.cli.Arguments Maven / Gradle / Ivy
/*
* Copyright © 2012-2014 Cask Data, Inc.
*
* 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 co.cask.common.cli;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
import java.util.NoSuchElementException;
/**
* Convenience class to represent a set of arguments contained within user input.
*
* For example, if the user input is "create dataset test", and the argument
* is "test" and is called "dataset-name", then the {@link #arguments} map
* would contain "dataset-name" -> "test" and the {@link #rawInput}
* would be "create dataset test".
*/
public class Arguments {
private final Map arguments;
/**
* The full raw input that the user entered. Useful for commands that
* don't necessarily expect a single value per argument.
*/
private final String rawInput;
public Arguments(Map arguments, String rawInput) {
this.rawInput = rawInput;
this.arguments = ImmutableMap.copyOf(arguments);
}
/**
* Returns the number of arguments in this {@code Arguments} object
*
* @return the number of arguments
*/
public int size() {
return arguments.size();
}
/**
* @return the raw user input
*/
public String getRawInput() {
return rawInput;
}
/**
* @param key the argument name
* @return true if there is a value associated with the argument name
*/
public boolean hasArgument(String key) {
return arguments.containsKey(key);
}
/**
* @param key the argument name
* @return the argument value
*/
public String get(String key) {
checkRequiredArgument(key);
return arguments.get(key);
}
/**
* @param key the argument name
* @param defaultValue the value to return if the argument is missing
* @return the argument value
*/
public String get(String key, String defaultValue) {
String value = arguments.get(key);
return Objects.firstNonNull(value, defaultValue);
}
/**
* Gets an argument value as an integer.
*
* @param key the argument name
* @return the argument value
*/
public int getInt(String key) {
checkRequiredArgument(key);
return Integer.parseInt(arguments.get(key));
}
/**
* Gets an argument value as an integer.
*
* @param key the argument name
* @param defaultValue the value to return if the argument is missing
* @return the argument value
*/
public Integer getInt(String key, int defaultValue) {
String value = arguments.get(key);
if (value != null) {
return Integer.parseInt(value);
} else {
return defaultValue;
}
}
/**
* Gets an argument value as a long.
*
* @param key the argument name
* @return the argument value
*/
public Long getLong(String key) {
checkRequiredArgument(key);
return Long.parseLong(arguments.get(key));
}
/**
* Gets an argument value as a long.
*
* @param key the argument name
* @param defaultValue the value to return if the argument is missing
* @return the argument value
*/
public Long getLong(String key, long defaultValue) {
String value = arguments.get(key);
if (value != null) {
return Long.parseLong(value);
} else {
return defaultValue;
}
}
private void checkRequiredArgument(String key) {
if (!arguments.containsKey(key)) {
throw new NoSuchElementException("Missing required argument: " + key);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy