From bfc6d480c8df0a85473b0e41f2320a10ba6a4fe6 Mon Sep 17 00:00:00 2001 From: Sunil Mogadati Date: Tue, 20 Jun 2017 14:34:58 -0600 Subject: [PATCH] BAEL-802: Drools using rules from Excel Files (#2115) * Add NDC and JBoss Logging to the demo application * NDC for Log4j, Log4j2 and JBoss Logging * Simplify NDC example by making it a single operation instead of two * Make NDC example as RestController, Use JBoss Logging only as a logging bridge * Fix merge conflicts in pull request - log-mdc pom.xml updated * BAEL-445 Update to Spring security SpEL example * BAEL-445: Change tabs to spaces in the updated code * BAEL-245: Add Enum Serialization exmaple * BAEL-245: Remove the folder jackson/src/test/java/com/baeldung/jackson/dtos/withEnum as the example is not used anymore * Add more enum serialization examples to align with previous example and prevent build fail * BAEL-611: Minor formatting changes * BAEL-611: Update Test case method names * BAEL-611 Add JAX-WS client and JUnit Test * BAEL-245: Issue 1753. Fix the typo - change from writeNumber() to writeString() * BAEL-741: Spring Security Multiple Authentication Providers * BAEL-741: Spring Security Multiple Authentication Providers * Remove unnecessary change in pom.xml * BAEL-802: Drools Excel example --- drools/pom.xml | 2 +- .../drools/config/DroolsBeanFactory.java | 42 +++++++++++- .../com/baeldung/drools/model/Customer.java | 44 +++++++++++++ .../com/baeldung/drools/rules/Discount.xls | Bin 0 -> 30720 bytes .../service/DiscountExcelIntegrationTest.java | 56 ++++++++++++++++ ...MultipleAuthProvidersApplicationTests.java | 61 ++++++++++++++++++ 6 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 drools/src/main/java/com/baeldung/drools/model/Customer.java create mode 100644 drools/src/main/resources/com/baeldung/drools/rules/Discount.xls create mode 100644 drools/src/test/java/com/baeldung/drools/service/DiscountExcelIntegrationTest.java create mode 100644 spring-security-mvc-boot/src/test/java/org/baeldung/web/MultipleAuthProvidersApplicationTests.java diff --git a/drools/pom.xml b/drools/pom.xml index b352044fb8..29231f150c 100644 --- a/drools/pom.xml +++ b/drools/pom.xml @@ -16,7 +16,7 @@ 4.4.6 - 7.0.0.CR1 + 7.1.0.Beta2 3.13 diff --git a/drools/src/main/java/com/baeldung/drools/config/DroolsBeanFactory.java b/drools/src/main/java/com/baeldung/drools/config/DroolsBeanFactory.java index 5f0d619813..e8841b05e2 100644 --- a/drools/src/main/java/com/baeldung/drools/config/DroolsBeanFactory.java +++ b/drools/src/main/java/com/baeldung/drools/config/DroolsBeanFactory.java @@ -1,10 +1,15 @@ package com.baeldung.drools.config; +import org.drools.decisiontable.DecisionTableProviderImpl; import org.kie.api.KieServices; import org.kie.api.builder.*; import org.kie.api.io.KieResources; +import org.kie.api.io.Resource; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; +import org.kie.internal.builder.DecisionTableConfiguration; +import org.kie.internal.builder.DecisionTableInputType; +import org.kie.internal.builder.KnowledgeBuilderFactory; import org.kie.internal.io.ResourceFactory; import java.io.IOException; import java.util.Arrays; @@ -64,4 +69,39 @@ public class DroolsBeanFactory { } -} \ No newline at end of file + public KieSession getKieSession(Resource dt) { + KieFileSystem kieFileSystem = kieServices.newKieFileSystem() + .write(dt); + + KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem) + .buildAll(); + + KieRepository kieRepository = kieServices.getRepository(); + + ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId(); + + KieContainer kieContainer = kieServices.newKieContainer(krDefaultReleaseId); + + KieSession ksession = kieContainer.newKieSession(); + + return ksession; + } + + /* + * Can be used for debugging + * Input excelFile example: com/baeldung/drools/rules/Discount.xls + */ + public String getDrlFromExcel(String excelFile) { + DecisionTableConfiguration configuration = KnowledgeBuilderFactory.newDecisionTableConfiguration(); + configuration.setInputType(DecisionTableInputType.XLS); + + Resource dt = ResourceFactory.newClassPathResource(excelFile, getClass()); + + DecisionTableProviderImpl decisionTableProvider = new DecisionTableProviderImpl(); + + String drl = decisionTableProvider.loadFromResource(dt, null); + + return drl; + } + +} diff --git a/drools/src/main/java/com/baeldung/drools/model/Customer.java b/drools/src/main/java/com/baeldung/drools/model/Customer.java new file mode 100644 index 0000000000..e900612b55 --- /dev/null +++ b/drools/src/main/java/com/baeldung/drools/model/Customer.java @@ -0,0 +1,44 @@ +package com.baeldung.drools.model; + +public class Customer { + + private CustomerType type; + + private int years; + + private int discount; + + public Customer(CustomerType type, int numOfYears) { + super(); + this.type = type; + this.years = numOfYears; + } + + public CustomerType getType() { + return type; + } + + public void setType(CustomerType type) { + this.type = type; + } + + public int getYears() { + return years; + } + + public void setYears(int years) { + this.years = years; + } + + public int getDiscount() { + return discount; + } + + public void setDiscount(int discount) { + this.discount = discount; + } + + public enum CustomerType { + INDIVIDUAL, BUSINESS; + } +} diff --git a/drools/src/main/resources/com/baeldung/drools/rules/Discount.xls b/drools/src/main/resources/com/baeldung/drools/rules/Discount.xls new file mode 100644 index 0000000000000000000000000000000000000000..198cc8dcda84c1693cda5bfeb746b7a3b210e616 GIT binary patch literal 30720 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 Lwr`B~KFj|f-YvSm literal 0 HcmV?d00001 diff --git a/drools/src/test/java/com/baeldung/drools/service/DiscountExcelIntegrationTest.java b/drools/src/test/java/com/baeldung/drools/service/DiscountExcelIntegrationTest.java new file mode 100644 index 0000000000..c3c4ebd4f8 --- /dev/null +++ b/drools/src/test/java/com/baeldung/drools/service/DiscountExcelIntegrationTest.java @@ -0,0 +1,56 @@ +package com.baeldung.drools.service; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; +import org.kie.api.io.Resource; +import org.kie.api.runtime.KieSession; +import org.kie.internal.io.ResourceFactory; + +import com.baeldung.drools.config.DroolsBeanFactory; +import com.baeldung.drools.model.Customer; +import com.baeldung.drools.model.Customer.CustomerType; + +public class DiscountExcelIntegrationTest { + + private KieSession kSession; + + @Before + public void setup() { + Resource resource = ResourceFactory.newClassPathResource("com/baeldung/drools/rules/Discount.xls", getClass()); + kSession = new DroolsBeanFactory().getKieSession(resource); + } + + @Test + public void giveIndvidualLongStanding_whenFireRule_thenCorrectDiscount() throws Exception { + Customer customer = new Customer(CustomerType.INDIVIDUAL, 5); + kSession.insert(customer); + + kSession.fireAllRules(); + + assertEquals(customer.getDiscount(), 15); + } + + @Test + public void giveIndvidualRecent_whenFireRule_thenCorrectDiscount() throws Exception { + + Customer customer = new Customer(CustomerType.INDIVIDUAL, 1); + kSession.insert(customer); + + kSession.fireAllRules(); + + assertEquals(customer.getDiscount(), 5); + } + + @Test + public void giveBusinessAny_whenFireRule_thenCorrectDiscount() throws Exception { + Customer customer = new Customer(CustomerType.BUSINESS, 0); + kSession.insert(customer); + + kSession.fireAllRules(); + + assertEquals(customer.getDiscount(), 20); + } + +} diff --git a/spring-security-mvc-boot/src/test/java/org/baeldung/web/MultipleAuthProvidersApplicationTests.java b/spring-security-mvc-boot/src/test/java/org/baeldung/web/MultipleAuthProvidersApplicationTests.java new file mode 100644 index 0000000000..0d70cd64e4 --- /dev/null +++ b/spring-security-mvc-boot/src/test/java/org/baeldung/web/MultipleAuthProvidersApplicationTests.java @@ -0,0 +1,61 @@ +package org.baeldung.web; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Collections; + +import org.baeldung.multipleauthproviders.MultipleAuthProvidersApplication; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = MultipleAuthProvidersApplication.class) +public class MultipleAuthProvidersApplicationTests { + @Autowired + private TestRestTemplate restTemplate; + + @Test + public void givenMemUsers_whenGetPingWithValidUser_thenOk() { + ResponseEntity result = makeRestCallToGetPing("memuser", "pass"); + + assertThat(result.getStatusCodeValue()).isEqualTo(200); + assertThat(result.getBody()).isEqualTo("OK"); + } + + @Test + public void givenExternalUsers_whenGetPingWithValidUser_thenOK() { + ResponseEntity result = makeRestCallToGetPing("externaluser", "pass"); + + assertThat(result.getStatusCodeValue()).isEqualTo(200); + assertThat(result.getBody()).isEqualTo("OK"); + } + + @Test + public void givenAuthProviders_whenGetPingWithNoCred_then401() { + ResponseEntity result = makeRestCallToGetPing(); + + assertThat(result.getStatusCodeValue()).isEqualTo(401); + } + + @Test + public void givenAuthProviders_whenGetPingWithBadCred_then401() { + ResponseEntity result = makeRestCallToGetPing("user", "bad_password"); + + assertThat(result.getStatusCodeValue()).isEqualTo(401); + } + + private ResponseEntity makeRestCallToGetPing(String username, String password) { + return restTemplate.withBasicAuth(username, password) + .getForEntity("/api/ping", String.class, Collections.emptyMap()); + } + + private ResponseEntity makeRestCallToGetPing() { + return restTemplate.getForEntity("/api/ping", String.class, Collections.emptyMap()); + } +}