From eeb64470d9c1f627df2767e000d3c2d82f8fb834 Mon Sep 17 00:00:00 2001
From: Mahmoud Ben Hassine <mahmoud.benhassine@icloud.com>
Date: Thu, 12 May 2016 22:53:30 +0200
Subject: [PATCH] issue #38: add rules engine name in spring factory bean

---
 .../spring/RulesEngineFactoryBean.java        |  8 +++++
 .../spring/RulesEngineFactoryBeanTest.java    | 31 ++++++++++---------
 2 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/easyrules-spring/src/main/java/org/easyrules/spring/RulesEngineFactoryBean.java b/easyrules-spring/src/main/java/org/easyrules/spring/RulesEngineFactoryBean.java
index f6574ed..2e1961c 100755
--- a/easyrules-spring/src/main/java/org/easyrules/spring/RulesEngineFactoryBean.java
+++ b/easyrules-spring/src/main/java/org/easyrules/spring/RulesEngineFactoryBean.java
@@ -31,6 +31,7 @@ import org.springframework.beans.factory.FactoryBean;
 import java.util.List;
 
 import static org.easyrules.core.RulesEngineBuilder.aNewRulesEngine;
+import static org.easyrules.util.Utils.DEFAULT_ENGINE_NAME;
 import static org.easyrules.util.Utils.DEFAULT_RULE_PRIORITY_THRESHOLD;
 
 /**
@@ -40,6 +41,8 @@ import static org.easyrules.util.Utils.DEFAULT_RULE_PRIORITY_THRESHOLD;
  */
 public class RulesEngineFactoryBean implements FactoryBean<RulesEngine> {
 
+    private String name = DEFAULT_ENGINE_NAME;
+
     private int priorityThreshold = DEFAULT_RULE_PRIORITY_THRESHOLD;
     
     private boolean skipOnFirstAppliedRule;
@@ -55,6 +58,7 @@ public class RulesEngineFactoryBean implements FactoryBean<RulesEngine> {
     @Override
     public RulesEngine getObject() {
         RulesEngineBuilder rulesEngineBuilder = aNewRulesEngine()
+                .named(name)
                 .withSkipOnFirstAppliedRule(skipOnFirstAppliedRule)
                 .withSkipOnFirstFailedRule(skipOnFirstFailedRule)
                 .withRulePriorityThreshold(priorityThreshold)
@@ -118,4 +122,8 @@ public class RulesEngineFactoryBean implements FactoryBean<RulesEngine> {
     public void setSkipOnFirstFailedRule(boolean skipOnFirstFailedRule) {
         this.skipOnFirstFailedRule = skipOnFirstFailedRule;
     }
+
+    public void setName(String name) {
+        this.name = name;
+    }
 }
diff --git a/easyrules-spring/src/test/java/org/easyrules/spring/RulesEngineFactoryBeanTest.java b/easyrules-spring/src/test/java/org/easyrules/spring/RulesEngineFactoryBeanTest.java
index 4cfdf40..3f9317e 100755
--- a/easyrules-spring/src/test/java/org/easyrules/spring/RulesEngineFactoryBeanTest.java
+++ b/easyrules-spring/src/test/java/org/easyrules/spring/RulesEngineFactoryBeanTest.java
@@ -27,19 +27,19 @@ package org.easyrules.spring;
 import org.easyrules.api.RuleListener;
 import org.easyrules.api.RulesEngine;
 import org.easyrules.core.BasicRule;
+import org.easyrules.core.RulesEngineParameters;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
-import java.util.*;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
 
 import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.springframework.util.ReflectionUtils.*;
 
 /**
  * Test class for {@link RulesEngineFactoryBean}.
@@ -49,6 +49,7 @@ import static org.springframework.util.ReflectionUtils.*;
 @RunWith(MockitoJUnitRunner.class)
 public class RulesEngineFactoryBeanTest {
 
+    public static final String NAME = "myRulesEngine";
     public static final int RULE_PRIORITY_THRESHOLD = 10;
 
     @Mock
@@ -57,6 +58,8 @@ public class RulesEngineFactoryBeanTest {
     @Mock
     private RuleListener ruleListener;
 
+    private String name;
+
     private int priorityThreshold;
 
     private boolean skipOnFirstAppliedRule;
@@ -69,6 +72,7 @@ public class RulesEngineFactoryBeanTest {
 
     @Before
     public void setUp() {
+        name = NAME;
         silentMode = true;
         skipOnFirstFailedRule = true;
         skipOnFirstAppliedRule = true;
@@ -88,21 +92,18 @@ public class RulesEngineFactoryBeanTest {
         rulesEngineFactoryBean.setSkipOnFirstAppliedRule(skipOnFirstAppliedRule);
         rulesEngineFactoryBean.setSkipOnFirstFailedRule(skipOnFirstFailedRule);
         rulesEngineFactoryBean.setSilentMode(silentMode);
+        rulesEngineFactoryBean.setName(name);
         RulesEngine rulesEngine = rulesEngineFactoryBean.getObject();
 
         assertThat(rulesEngine).isNotNull();
 
-        assertEquals(priorityThreshold, getFieldValue(rulesEngine.getParameters(), "priorityThreshold"));
-        assertEquals(skipOnFirstAppliedRule, getFieldValue(rulesEngine.getParameters(), "skipOnFirstAppliedRule"));
-        assertEquals(skipOnFirstFailedRule, getFieldValue(rulesEngine.getParameters(), "skipOnFirstFailedRule"));
-        assertEquals(new HashSet<>(expectedRules), new HashSet<>((Collection) getFieldValue(rulesEngine, "rules")));
-        assertEquals(expectedRuleListeners, getFieldValue(rulesEngine, "ruleListeners"));
-    }
-
-    private Object getFieldValue(Object object, String fieldName) {
-        Field field = findField(object.getClass(), fieldName);
-        makeAccessible(field);
-        return getField(field, object);
+        RulesEngineParameters rulesEngineParameters = rulesEngine.getParameters();
+        assertThat(rulesEngineParameters.getName()).isEqualTo(NAME);
+        assertThat(rulesEngineParameters.getPriorityThreshold()).isEqualTo(RULE_PRIORITY_THRESHOLD);
+        assertThat(rulesEngineParameters.isSkipOnFirstAppliedRule()).isTrue();
+        assertThat(rulesEngineParameters.isSkipOnFirstFailedRule()).isTrue();
+        assertThat(rulesEngine.getRules()).isEqualTo(new HashSet<>(expectedRules));
+        assertThat(rulesEngine.getRuleListeners()).isEqualTo(expectedRuleListeners);
     }
 
     @Test