// Path: src/main/java/org/grouchotools/jsrules/Parameter.java
// public class Parameter<T> extends JsonBean {
//     public Parameter(String name, Class<T> klasse) {
//         this.name = name;
//         this.klasse = klasse;
//         this.staticValue = null;
//     }
// 
//     public Parameter(String name, Class<T> klasse, T staticValue) {
//         this.name = name;
//         this.klasse = klasse;
//         this.staticValue = staticValue;
//     }
//     
//     private final String name;
//     private final Class<T> klasse;
//     private final T staticValue;
// 
//     public String getName() {
//         return name;
//     }
// 
//     public Class<T> getKlasse() {
//         return klasse;
//     }
// 
//     public T getStaticValue() {
//         return staticValue;
//     }
//    
// }
// 
// Path: src/main/java/org/grouchotools/jsrules/Rule.java
// public class Rule<T, P> extends JsonBean {
//     
//     private final String ruleName;
//     
//     private final Parameter<P> leftParameter;
//     private final Operator operator;
//     private final Parameter<P> rightParameter;
//     
//     private final T response;
// 
//     public Rule(String ruleName, Parameter<P> leftParameter, Operator operator, 
//             Parameter<P> rightParameter, T response) {
//         this.ruleName = ruleName;
//         this.leftParameter = leftParameter;
//         this.operator = operator;
//         this.rightParameter = rightParameter;
//         this.response = response;
//     }
// 
//     public String getRuleName() {
//         return ruleName;
//     }
//     
//     public Operator getOperator() {
//         return operator;
//     }
// 
//     public Parameter getLeftParameter() {
//         return leftParameter;
//     }
// 
//     public Parameter getRightParameter() {
//         return rightParameter;
//     }
// 
//     public T getResponse() {
//         return response;
//     }
//    
// }
// 
// Path: src/main/java/org/grouchotools/jsrules/RuleExecutor.java
// public abstract class RuleExecutor<T> extends Executor {
//     public abstract T execute(Object leftParameter, Object rightParameter) throws InvalidParameterException;
// 
//     public abstract T execute(Object leftParameter) throws InvalidParameterException;
// 
//     public abstract Parameter getLeftParameter();
// 
//     public abstract Parameter getRightParameter();
// 
//     public abstract Rule getRule();
// }
// 
// 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);
//     }
//     
// }


import org.grouchotools.jsrules.Parameter;
import org.grouchotools.jsrules.Rule;
import org.grouchotools.jsrules.RuleExecutor;
import org.grouchotools.jsrules.exception.InvalidParameterException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.grouchotools.jsrules.impl;


/**
 *
 * @author Paul
 * @param <T>
 * @param <P>
 */
public class RuleExecutorImpl<T, P> extends RuleExecutor<T> {
    private static final Logger LOG = LoggerFactory.getLogger(RuleExecutorImpl.class);
            
    private final Rule<T, P> rule;
    
    public RuleExecutorImpl(Rule<T, P> rule) {
// Path: src/main/java/org/grouchotools/jsrules/Parameter.java
// public class Parameter<T> extends JsonBean {
//     public Parameter(String name, Class<T> klasse) {
//         this.name = name;
//         this.klasse = klasse;
//         this.staticValue = null;
//     }
// 
//     public Parameter(String name, Class<T> klasse, T staticValue) {
//         this.name = name;
//         this.klasse = klasse;
//         this.staticValue = staticValue;
//     }
//     
//     private final String name;
//     private final Class<T> klasse;
//     private final T staticValue;
// 
//     public String getName() {
//         return name;
//     }
// 
//     public Class<T> getKlasse() {
//         return klasse;
//     }
// 
//     public T getStaticValue() {
//         return staticValue;
//     }
//    
// }
// 
// Path: src/main/java/org/grouchotools/jsrules/Rule.java
// public class Rule<T, P> extends JsonBean {
//     
//     private final String ruleName;
//     
//     private final Parameter<P> leftParameter;
//     private final Operator operator;
//     private final Parameter<P> rightParameter;
//     
//     private final T response;
// 
//     public Rule(String ruleName, Parameter<P> leftParameter, Operator operator, 
//             Parameter<P> rightParameter, T response) {
//         this.ruleName = ruleName;
//         this.leftParameter = leftParameter;
//         this.operator = operator;
//         this.rightParameter = rightParameter;
//         this.response = response;
//     }
// 
//     public String getRuleName() {
//         return ruleName;
//     }
//     
//     public Operator getOperator() {
//         return operator;
//     }
// 
//     public Parameter getLeftParameter() {
//         return leftParameter;
//     }
// 
//     public Parameter getRightParameter() {
//         return rightParameter;
//     }
// 
//     public T getResponse() {
//         return response;
//     }
//    
// }
// 
// Path: src/main/java/org/grouchotools/jsrules/RuleExecutor.java
// public abstract class RuleExecutor<T> extends Executor {
//     public abstract T execute(Object leftParameter, Object rightParameter) throws InvalidParameterException;
// 
//     public abstract T execute(Object leftParameter) throws InvalidParameterException;
// 
//     public abstract Parameter getLeftParameter();
// 
//     public abstract Parameter getRightParameter();
// 
//     public abstract Rule getRule();
// }
// 
// 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/impl/RuleExecutorImpl.java
import org.grouchotools.jsrules.Parameter;
import org.grouchotools.jsrules.Rule;
import org.grouchotools.jsrules.RuleExecutor;
import org.grouchotools.jsrules.exception.InvalidParameterException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.grouchotools.jsrules.impl;


/**
 *
 * @author Paul
 * @param <T>
 * @param <P>
 */
public class RuleExecutorImpl<T, P> extends RuleExecutor<T> {
    private static final Logger LOG = LoggerFactory.getLogger(RuleExecutorImpl.class);
            
    private final Rule<T, P> rule;
    
    public RuleExecutorImpl(Rule<T, P> rule) {
        this.rule = rule;