package com.lexicalscope.jewel.cli; import static java.util.Arrays.asList; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; import com.lexicalscope.jewel.JewelRuntimeException; /** * The arguments are not valid * * @author tim */ public class ArgumentValidationException extends JewelRuntimeException { private static final long serialVersionUID = -4781861924515211053L; static final ResourceBundle m_messages = ResourceBundle.getBundle( "com.lexicalscope.jewel.cli.Messages", Locale.getDefault()); private final List<ValidationFailure> validationFailures; public ArgumentValidationException() { this(new ArrayList<ValidationFailure>()); } public ArgumentValidationException(final String message, final Throwable cause) { this(message, cause, new ArrayList<ValidationFailure>()); } public ArgumentValidationException(final String message) { this(message, new ArrayList<ValidationFailure>()); } public ArgumentValidationException(final Throwable cause) { this(cause, new ArrayList<ValidationFailure>()); } public ArgumentValidationException(final ValidationFailure validationError) { this(asList(validationError)); } public ArgumentValidationException(final List<ValidationFailure> validationFailures) { this(createMessageFromErrors(validationFailures), validationFailures); } public ArgumentValidationException( final String message, final Throwable cause, final List<ValidationFailure> validationFailures) { super(message, cause); this.validationFailures = validationFailures; } public ArgumentValidationException(final String message, final List<ValidationFailure> validationFailures) { super(message); this.validationFailures = validationFailures; } public ArgumentValidationException(final Throwable cause, final List<ValidationFailure> validationFailures) { this(createMessageFromErrors(validationFailures), cause, validationFailures); } public List<ValidationFailure> getValidationFailures() { return validationFailures; } private static String createMessageFromErrors(final List<ValidationFailure> validationFailures) { final StringBuilder message = new StringBuilder(); String separator = ""; for (final ValidationFailure error : validationFailures) { message.append(separator).append(error.getMessage()); separator = System.getProperty("line.separator"); } return message.toString(); } }