// Path: inputvalidation/src/main/java/com/switchfly/inputvalidation/exception/InvalidRequestParameterException.java
// public class InvalidRequestParameterException extends MissingRequestParameterException {
// 
//     private static final long serialVersionUID = 1L;
//     private final String _parameterValue;
// 
//     public InvalidRequestParameterException(String parameterName, String parameterValue) {
//         super(parameterName, "Invalid request parameter: " + parameterName + " = " + parameterValue);
//         _parameterValue = parameterValue;
//     }
// 
//     public InvalidRequestParameterException(String parameterName, String parameterValue, Throwable cause) {
//         super(parameterName, "Invalid request parameter: " + parameterName + " = " + parameterValue, cause);
//         _parameterValue = parameterValue;
//     }
// 
//     public String getParameterValue() {
//         return _parameterValue;
//     }
// }
// 
// Path: inputvalidation/src/main/java/com/switchfly/inputvalidation/exception/MissingRequestParameterException.java
// public class MissingRequestParameterException extends RuntimeException {
// 
//     private static final long serialVersionUID = 1L;
//     private final String _parameterName;
// 
//     public MissingRequestParameterException(String parameterName) {
//         super("Missing request parameter: " + parameterName + ".");
//         _parameterName = parameterName;
//     }
// 
//     public MissingRequestParameterException(String parameterName, String message) {
//         super(message);
//         _parameterName = parameterName;
//     }
// 
//     public MissingRequestParameterException(String parameterName, String message, Throwable cause) {
//         super(message, cause);
//         _parameterName = parameterName;
//     }
// 
//     public String getParameterName() {
//         return _parameterName;
//     }
// }
// 
// Path: inputvalidation/src/main/java/com/switchfly/inputvalidation/exception/ValidatorException.java
// public class ValidatorException extends RuntimeException {
//     private static final long serialVersionUID = 1L;
//     private final String _sanitizedContent;
// 
//     public ValidatorException(String sanitizedContent) {
//         _sanitizedContent = sanitizedContent;
//     }
// 
//     public ValidatorException(String sanitizedContent, String message) {
//         super(message);
//         _sanitizedContent = sanitizedContent;
//     }
// 
//     public String getSanitizedContent() {
//         return _sanitizedContent;
//     }
// }


import com.switchfly.inputvalidation.exception.InvalidRequestParameterException;
import com.switchfly.inputvalidation.exception.MissingRequestParameterException;
import com.switchfly.inputvalidation.exception.ValidatorException;

    public String getName() {
        return _parameterNameValidationStrategy.validate(_name);
    }

    public Parameter<E> validateWith(ValidationStrategy<E> validationStrategy) {
        _validationStrategy = validationStrategy;
        return this;
    }

    public boolean isEmpty() {
        return _value == null;
    }

    public E validate() {
        if (isEmpty()) {
            throw new MissingRequestParameterException(getName());
        }
        try {
            return _validationStrategy.validate(_value);
        } catch (ValidatorException e) {
            throw new InvalidRequestParameterException(getName(), e.getSanitizedContent());
        }
    }

    public E validate(E defaultValue) {
        try {
            return validate();
        } catch (InvalidRequestParameterException e) {
            return defaultValue;
// Path: inputvalidation/src/main/java/com/switchfly/inputvalidation/exception/InvalidRequestParameterException.java
// public class InvalidRequestParameterException extends MissingRequestParameterException {
// 
//     private static final long serialVersionUID = 1L;
//     private final String _parameterValue;
// 
//     public InvalidRequestParameterException(String parameterName, String parameterValue) {
//         super(parameterName, "Invalid request parameter: " + parameterName + " = " + parameterValue);
//         _parameterValue = parameterValue;
//     }
// 
//     public InvalidRequestParameterException(String parameterName, String parameterValue, Throwable cause) {
//         super(parameterName, "Invalid request parameter: " + parameterName + " = " + parameterValue, cause);
//         _parameterValue = parameterValue;
//     }
// 
//     public String getParameterValue() {
//         return _parameterValue;
//     }
// }
// 
// Path: inputvalidation/src/main/java/com/switchfly/inputvalidation/exception/MissingRequestParameterException.java
// public class MissingRequestParameterException extends RuntimeException {
// 
//     private static final long serialVersionUID = 1L;
//     private final String _parameterName;
// 
//     public MissingRequestParameterException(String parameterName) {
//         super("Missing request parameter: " + parameterName + ".");
//         _parameterName = parameterName;
//     }
// 
//     public MissingRequestParameterException(String parameterName, String message) {
//         super(message);
//         _parameterName = parameterName;
//     }
// 
//     public MissingRequestParameterException(String parameterName, String message, Throwable cause) {
//         super(message, cause);
//         _parameterName = parameterName;
//     }
// 
//     public String getParameterName() {
//         return _parameterName;
//     }
// }
// 
// Path: inputvalidation/src/main/java/com/switchfly/inputvalidation/exception/ValidatorException.java
// public class ValidatorException extends RuntimeException {
//     private static final long serialVersionUID = 1L;
//     private final String _sanitizedContent;
// 
//     public ValidatorException(String sanitizedContent) {
//         _sanitizedContent = sanitizedContent;
//     }
// 
//     public ValidatorException(String sanitizedContent, String message) {
//         super(message);
//         _sanitizedContent = sanitizedContent;
//     }
// 
//     public String getSanitizedContent() {
//         return _sanitizedContent;
//     }
// }


// Path: inputvalidation/src/main/java/com/switchfly/inputvalidation/Parameter.java
import com.switchfly.inputvalidation.exception.InvalidRequestParameterException;
import com.switchfly.inputvalidation.exception.MissingRequestParameterException;
import com.switchfly.inputvalidation.exception.ValidatorException;


    public String getName() {
        return _parameterNameValidationStrategy.validate(_name);
    }

    public Parameter<E> validateWith(ValidationStrategy<E> validationStrategy) {
        _validationStrategy = validationStrategy;
        return this;
    }

    public boolean isEmpty() {
        return _value == null;
    }

    public E validate() {
        if (isEmpty()) {
            throw new MissingRequestParameterException(getName());
        }
        try {
            return _validationStrategy.validate(_value);
        } catch (ValidatorException e) {
            throw new InvalidRequestParameterException(getName(), e.getSanitizedContent());
        }
    }

    public E validate(E defaultValue) {
        try {
            return validate();
        } catch (InvalidRequestParameterException e) {
            return defaultValue;
        } catch (MissingRequestParameterException e) {