// Path: src/main/java/org/grouchotools/jsrules/exception/InvalidParameterClassException.java
// public class InvalidParameterClassException extends InvalidParameterException {
//     public InvalidParameterClassException() {
//     }
// 
//     public InvalidParameterClassException(String message) {
//         super(message);
//     }
// 
//     public InvalidParameterClassException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public InvalidParameterClassException(Throwable cause) {
//         super(cause);
//     }
// 
//     public InvalidParameterClassException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
//         super(message, cause, enableSuppression, writableStackTrace);
//     }
// }
// 
// Path: src/main/java/org/grouchotools/jsrules/exception/InvalidParameterException.java
// public class InvalidParameterException extends JsRulesException {
// 
//     public InvalidParameterException() {
//     }
// 
//     public InvalidParameterException(String message) {
//         super(message);
//     }
// 
//     public InvalidParameterException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public InvalidParameterException(Throwable cause) {
//         super(cause);
//     }
// 
//     public InvalidParameterException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
//         super(message, cause, enableSuppression, writableStackTrace);
//     }
//     
// }
// 
// Path: src/main/java/org/grouchotools/jsrules/exception/MissingParameterException.java
// public class MissingParameterException extends InvalidParameterException {
//     public MissingParameterException() {
//     }
// 
//     public MissingParameterException(String message) {
//         super(message);
//     }
// 
//     public MissingParameterException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public MissingParameterException(Throwable cause) {
//         super(cause);
//     }
// 
//     public MissingParameterException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
//         super(message, cause, enableSuppression, writableStackTrace);
//     }
// }


import org.grouchotools.jsrules.exception.InvalidParameterClassException;
import org.grouchotools.jsrules.exception.InvalidParameterException;
import org.grouchotools.jsrules.exception.MissingParameterException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
package org.grouchotools.jsrules;


/**
 * Contains common methods used by various executors
 * <p/>
 * Created by Paul Richardson 4/30/2015
 */
public abstract class Executor {
    private static final Logger LOG = LoggerFactory.getLogger(Executor.class);

    /**
     * Validate that parameter is present (not null) and is an instance of the correct
     * class
     *
     * @param key           the name of the parameter
     * @param parameter     the parameter object
     * @param expectedClass the class we are expecting the parameter to be
     */
// Path: src/main/java/org/grouchotools/jsrules/exception/InvalidParameterClassException.java
// public class InvalidParameterClassException extends InvalidParameterException {
//     public InvalidParameterClassException() {
//     }
// 
//     public InvalidParameterClassException(String message) {
//         super(message);
//     }
// 
//     public InvalidParameterClassException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public InvalidParameterClassException(Throwable cause) {
//         super(cause);
//     }
// 
//     public InvalidParameterClassException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
//         super(message, cause, enableSuppression, writableStackTrace);
//     }
// }
// 
// Path: src/main/java/org/grouchotools/jsrules/exception/InvalidParameterException.java
// public class InvalidParameterException extends JsRulesException {
// 
//     public InvalidParameterException() {
//     }
// 
//     public InvalidParameterException(String message) {
//         super(message);
//     }
// 
//     public InvalidParameterException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public InvalidParameterException(Throwable cause) {
//         super(cause);
//     }
// 
//     public InvalidParameterException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
//         super(message, cause, enableSuppression, writableStackTrace);
//     }
//     
// }
// 
// Path: src/main/java/org/grouchotools/jsrules/exception/MissingParameterException.java
// public class MissingParameterException extends InvalidParameterException {
//     public MissingParameterException() {
//     }
// 
//     public MissingParameterException(String message) {
//         super(message);
//     }
// 
//     public MissingParameterException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public MissingParameterException(Throwable cause) {
//         super(cause);
//     }
// 
//     public MissingParameterException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
//         super(message, cause, enableSuppression, writableStackTrace);
//     }
// }


// Path: src/main/java/org/grouchotools/jsrules/Executor.java
import org.grouchotools.jsrules.exception.InvalidParameterClassException;
import org.grouchotools.jsrules.exception.InvalidParameterException;
import org.grouchotools.jsrules.exception.MissingParameterException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

package org.grouchotools.jsrules;


/**
 * Contains common methods used by various executors
 * <p/>
 * Created by Paul Richardson 4/30/2015
 */
public abstract class Executor {
    private static final Logger LOG = LoggerFactory.getLogger(Executor.class);

    /**
     * Validate that parameter is present (not null) and is an instance of the correct
     * class
     *
     * @param key           the name of the parameter
     * @param parameter     the parameter object
     * @param expectedClass the class we are expecting the parameter to be
     */
    protected void validateParameter(String key, Object parameter, Class expectedClass) throws InvalidParameterException {