/**
*
*/
package mil.nga.giat.geowave.core.cli.utils;
import java.lang.reflect.Constructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.beust.jcommander.IStringConverter;
import com.beust.jcommander.Parameter;
import mil.nga.giat.geowave.core.cli.converters.GeoWaveBaseConverter;
/**
*
*/
public class JCommanderParameterUtils
{
private static Logger LOGGER = LoggerFactory.getLogger(JCommanderParameterUtils.class);
public static boolean isPassword(
Parameter parameter ) {
boolean isPassword = false;
if (parameter != null) {
Class<?> superClass = null;
Class<? extends IStringConverter<?>> converterClass = parameter.converter();
if (converterClass != null) {
superClass = converterClass.getSuperclass();
while (superClass != null && superClass != GeoWaveBaseConverter.class) {
superClass = superClass.getSuperclass();
}
}
if (superClass != null && superClass.equals(GeoWaveBaseConverter.class)) {
GeoWaveBaseConverter<?> converter = getParameterBaseConverter(parameter);
if (converter != null) {
isPassword = isPassword || converter.isPassword();
}
}
isPassword = isPassword || parameter.password();
}
return isPassword;
}
public static boolean isRequired(
Parameter parameter ) {
boolean isRequired = false;
if (parameter != null) {
if (parameter.converter() != null && parameter.converter().getSuperclass().equals(
GeoWaveBaseConverter.class)) {
GeoWaveBaseConverter<?> converter = getParameterBaseConverter(parameter);
if (converter != null) {
isRequired = isRequired || converter.isRequired();
}
}
isRequired = isRequired || parameter.required();
}
return isRequired;
}
private static GeoWaveBaseConverter<?> getParameterBaseConverter(
Parameter parameter ) {
GeoWaveBaseConverter<?> converter = null;
try {
Constructor<?> ctor = parameter.converter().getConstructor(
String.class);
if (ctor != null) {
converter = (GeoWaveBaseConverter<?>) ctor.newInstance(new Object[] {
""
});
}
}
catch (Exception e) {
LOGGER.error(
"An error occurred getting converter from parameter: " + e.getLocalizedMessage(),
e);
}
return converter;
}
}