From 1a10fda1a80c4cb6af85c3fb57ee979dc819ed02 Mon Sep 17 00:00:00 2001 From: baljeet20 Date: Sun, 14 May 2017 19:22:48 +0530 Subject: [PATCH] BAEL-928 Introduction to drools (#1842) * BAEL-804 A guide to Spring Drools * BAEL-804 A guide to Spring Drools * BAEL-804 A guide to Spring Drools * BAEL-928 Introduction to Drools * BAEL-928 Introduction to Drools --- drools/pom.xml | 84 ++++++++++++++++++ .../drools/config/DroolsBeanFactory.java | 67 ++++++++++++++ .../com/baeldung/drools/model/Applicant.java | 48 ++++++++++ .../com/baeldung/drools/model/Product.java | 38 ++++++++ .../baeldung/drools/model/SuggestedRole.java | 14 +++ .../drools/service/ApplicantService.java | 23 +++++ .../drools/service/ProductService.java | 20 +++++ .../baeldung/drools/rules/Product_rules.xls | Bin 0 -> 27648 bytes .../drools/rules/SuggestApplicant.drl | 31 +++++++ .../ApplicantServiceIntegrationTest.java | 53 +++++++++++ .../ProductServiceIntegrationTest.java | 32 +++++++ pom.xml | 1 + 12 files changed, 411 insertions(+) create mode 100644 drools/pom.xml create mode 100644 drools/src/main/java/com/baeldung/drools/config/DroolsBeanFactory.java create mode 100644 drools/src/main/java/com/baeldung/drools/model/Applicant.java create mode 100644 drools/src/main/java/com/baeldung/drools/model/Product.java create mode 100644 drools/src/main/java/com/baeldung/drools/model/SuggestedRole.java create mode 100644 drools/src/main/java/com/baeldung/drools/service/ApplicantService.java create mode 100644 drools/src/main/java/com/baeldung/drools/service/ProductService.java create mode 100644 drools/src/main/resources/com/baeldung/drools/rules/Product_rules.xls create mode 100644 drools/src/main/resources/com/baeldung/drools/rules/SuggestApplicant.drl create mode 100644 drools/src/test/java/com/baeldung/drools/service/ApplicantServiceIntegrationTest.java create mode 100644 drools/src/test/java/com/baeldung/drools/service/ProductServiceIntegrationTest.java diff --git a/drools/pom.xml b/drools/pom.xml new file mode 100644 index 0000000000..908a82df56 --- /dev/null +++ b/drools/pom.xml @@ -0,0 +1,84 @@ + + + 4.0.0 + + com.baeldung + drools + 1.0.0-SNAPSHOT + + 4.4.6 + 7.0.0.CR1 + 3.13 + 2.19.1 + 4.11 + + + + org.apache.httpcomponents + httpcore + ${http-component-version} + + + + org.kie + kie-ci + ${drools-version} + + + org.drools + drools-decisiontables + ${drools-version} + + + + org.drools + drools-core + ${drools-version} + + + org.drools + drools-compiler + ${drools-version} + + + org.apache.poi + poi + ${apache-poi-version} + + + + org.apache.poi + poi-ooxml + ${apache-poi-version} + + + junit + junit + ${junit-version} + test + + + org.springframework + spring-core + 4.3.6.RELEASE + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${surefire-plugin-version} + + + **/*IntegrationTest.java + + + + + + + \ No newline at end of file diff --git a/drools/src/main/java/com/baeldung/drools/config/DroolsBeanFactory.java b/drools/src/main/java/com/baeldung/drools/config/DroolsBeanFactory.java new file mode 100644 index 0000000000..5f0d619813 --- /dev/null +++ b/drools/src/main/java/com/baeldung/drools/config/DroolsBeanFactory.java @@ -0,0 +1,67 @@ +package com.baeldung.drools.config; + +import org.kie.api.KieServices; +import org.kie.api.builder.*; +import org.kie.api.io.KieResources; +import org.kie.api.runtime.KieContainer; +import org.kie.api.runtime.KieSession; +import org.kie.internal.io.ResourceFactory; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class DroolsBeanFactory { + + private static final String RULES_PATH = "com/baeldung/drools/rules/"; + private KieServices kieServices=KieServices.Factory.get(); + + private KieFileSystem getKieFileSystem() throws IOException{ + KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); + List rules=Arrays.asList("SuggestApplicant.drl","Product_rules.xls"); + for(String rule:rules){ + kieFileSystem.write(ResourceFactory.newClassPathResource(rule)); + } + return kieFileSystem; + + } + + public KieContainer getKieContainer() throws IOException { + getKieRepository(); + + KieBuilder kb = kieServices.newKieBuilder(getKieFileSystem()); + kb.buildAll(); + + KieModule kieModule = kb.getKieModule(); + KieContainer kContainer = kieServices.newKieContainer(kieModule.getReleaseId()); + + return kContainer; + + } + + private void getKieRepository() { + final KieRepository kieRepository = kieServices.getRepository(); + kieRepository.addKieModule(new KieModule() { + public ReleaseId getReleaseId() { + return kieRepository.getDefaultReleaseId(); + } + }); + } + + public KieSession getKieSession(){ + getKieRepository(); + KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); + + kieFileSystem.write(ResourceFactory.newClassPathResource("com/baeldung/drools/rules/SuggestApplicant.drl")); + kieFileSystem.write(ResourceFactory.newClassPathResource("com/baeldung/drools/rules/Product_rules.xls")); + + KieBuilder kb = kieServices.newKieBuilder(kieFileSystem); + kb.buildAll(); + KieModule kieModule = kb.getKieModule(); + + KieContainer kContainer = kieServices.newKieContainer(kieModule.getReleaseId()); + + return kContainer.newKieSession(); + + } + +} \ No newline at end of file diff --git a/drools/src/main/java/com/baeldung/drools/model/Applicant.java b/drools/src/main/java/com/baeldung/drools/model/Applicant.java new file mode 100644 index 0000000000..706a55d53c --- /dev/null +++ b/drools/src/main/java/com/baeldung/drools/model/Applicant.java @@ -0,0 +1,48 @@ +package com.baeldung.drools.model; + +public class Applicant { + + private String name; + private int age; + private double currentSalary; + private int experienceInYears; + + public Applicant(String name, int age, Double currentSalary, int experienceInYears) { + this.name = name; + this.age = age; + this.currentSalary = currentSalary; + this.experienceInYears = experienceInYears; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public Double getCurrentSalary() { + return currentSalary; + } + + public void setCurrentSalary(Double currentSalary) { + this.currentSalary = currentSalary; + } + + public int getExperienceInYears() { + return experienceInYears; + } + + public void setExperienceInYears(int experienceInYears) { + this.experienceInYears = experienceInYears; + } +} diff --git a/drools/src/main/java/com/baeldung/drools/model/Product.java b/drools/src/main/java/com/baeldung/drools/model/Product.java new file mode 100644 index 0000000000..3d49ca4ec3 --- /dev/null +++ b/drools/src/main/java/com/baeldung/drools/model/Product.java @@ -0,0 +1,38 @@ +package com.baeldung.drools.model; + +public class Product { + private String name; + private String type; + + private String label; + + public Product(String name, String type) { + this.name = name; + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + +} diff --git a/drools/src/main/java/com/baeldung/drools/model/SuggestedRole.java b/drools/src/main/java/com/baeldung/drools/model/SuggestedRole.java new file mode 100644 index 0000000000..3e9763aef2 --- /dev/null +++ b/drools/src/main/java/com/baeldung/drools/model/SuggestedRole.java @@ -0,0 +1,14 @@ +package com.baeldung.drools.model; + +public class SuggestedRole { + + private String role; + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } +} diff --git a/drools/src/main/java/com/baeldung/drools/service/ApplicantService.java b/drools/src/main/java/com/baeldung/drools/service/ApplicantService.java new file mode 100644 index 0000000000..f74298ef05 --- /dev/null +++ b/drools/src/main/java/com/baeldung/drools/service/ApplicantService.java @@ -0,0 +1,23 @@ +package com.baeldung.drools.service; + +import com.baeldung.drools.config.DroolsBeanFactory; +import com.baeldung.drools.model.Applicant; +import com.baeldung.drools.model.SuggestedRole; +import org.kie.api.runtime.KieContainer; +import org.kie.api.runtime.KieSession; + +import java.io.IOException; + +public class ApplicantService { + + KieSession kieSession=new DroolsBeanFactory().getKieSession(); + + public SuggestedRole suggestARoleForApplicant(Applicant applicant,SuggestedRole suggestedRole) throws IOException { + kieSession.insert(applicant); + kieSession.setGlobal("suggestedRole",suggestedRole); + kieSession.fireAllRules(); + System.out.println(suggestedRole.getRole()); + return suggestedRole; + + } +} diff --git a/drools/src/main/java/com/baeldung/drools/service/ProductService.java b/drools/src/main/java/com/baeldung/drools/service/ProductService.java new file mode 100644 index 0000000000..be5e43ed7b --- /dev/null +++ b/drools/src/main/java/com/baeldung/drools/service/ProductService.java @@ -0,0 +1,20 @@ +package com.baeldung.drools.service; + +import com.baeldung.drools.config.DroolsBeanFactory; +import com.baeldung.drools.model.Product; +import org.kie.api.runtime.KieContainer; +import org.kie.api.runtime.KieSession; + +public class ProductService { + + private KieSession kieSession=new DroolsBeanFactory().getKieSession(); + + public Product applyLabelToProduct(Product product){ + kieSession.insert(product); + kieSession.fireAllRules(); + System.out.println(product.getLabel()); + return product; + + } + +} diff --git a/drools/src/main/resources/com/baeldung/drools/rules/Product_rules.xls b/drools/src/main/resources/com/baeldung/drools/rules/Product_rules.xls new file mode 100644 index 0000000000000000000000000000000000000000..4cb18c7420e27b56dee04f2debeb6c052a7db54d GIT binary patch literal 27648 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 literal 0 HcmV?d00001 diff --git a/drools/src/main/resources/com/baeldung/drools/rules/SuggestApplicant.drl b/drools/src/main/resources/com/baeldung/drools/rules/SuggestApplicant.drl new file mode 100644 index 0000000000..3deb037571 --- /dev/null +++ b/drools/src/main/resources/com/baeldung/drools/rules/SuggestApplicant.drl @@ -0,0 +1,31 @@ +package com.baeldung.drools.rules; + +import com.baeldung.drools.model.Applicant; + +global com.baeldung.drools.model.SuggestedRole suggestedRole; + +dialect "mvel" + +rule "Suggest Manager Role" + when + Applicant(experienceInYears > 10) + Applicant(currentSalary > 1000000 && currentSalary <= 2500000) + then + suggestedRole.setRole("Manager"); +end + +rule "Suggest Senior developer Role" + when + Applicant(experienceInYears > 5 && experienceInYears <= 10) + Applicant(currentSalary > 500000 && currentSalary <= 1500000) + then + suggestedRole.setRole("Senior developer"); +end + +rule "Suggest Developer Role" + when + Applicant(experienceInYears > 0 && experienceInYears <= 5) + Applicant(currentSalary > 200000 && currentSalary <= 1000000) + then + suggestedRole.setRole("Developer"); +end diff --git a/drools/src/test/java/com/baeldung/drools/service/ApplicantServiceIntegrationTest.java b/drools/src/test/java/com/baeldung/drools/service/ApplicantServiceIntegrationTest.java new file mode 100644 index 0000000000..71f33f2db4 --- /dev/null +++ b/drools/src/test/java/com/baeldung/drools/service/ApplicantServiceIntegrationTest.java @@ -0,0 +1,53 @@ +package com.baeldung.drools.service; + +import com.baeldung.drools.model.Applicant; +import com.baeldung.drools.model.SuggestedRole; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; + +import static junit.framework.Assert.assertNull; +import static junit.framework.TestCase.assertEquals; + + +public class ApplicantServiceIntegrationTest { + + + private ApplicantService applicantService; + + @Before + public void setup(){ + applicantService = new ApplicantService(); + } + + @Test + public void whenCriteriaMatching_ThenSuggestManagerRole() throws IOException { + Applicant applicant=new Applicant("Davis",37,1600000.0,11); + SuggestedRole suggestedRole=new SuggestedRole(); + applicantService.suggestARoleForApplicant(applicant,suggestedRole); + assertEquals("Manager",suggestedRole.getRole()); + } + + @Test + public void whenCriteriaMatching_ThenSuggestSeniorDeveloperRole() throws IOException { + Applicant applicant=new Applicant("John",37,1200000.0,8); + SuggestedRole suggestedRole=new SuggestedRole(); + applicantService.suggestARoleForApplicant(applicant,suggestedRole); + assertEquals("Senior developer",suggestedRole.getRole()); + } + @Test + public void whenCriteriaMatching_ThenSuggestDeveloperRole() throws IOException { + Applicant applicant=new Applicant("Davis",37,800000.0,3); + SuggestedRole suggestedRole=new SuggestedRole(); + applicantService.suggestARoleForApplicant(applicant,suggestedRole); + assertEquals("Developer",suggestedRole.getRole()); + } + @Test + public void whenCriteriaNotMatching_ThenNoRole() throws IOException { + Applicant applicant=new Applicant("John",37,1200000.0,5); + SuggestedRole suggestedRole=new SuggestedRole(); + applicantService.suggestARoleForApplicant(applicant,suggestedRole); + assertNull(suggestedRole.getRole()); + } +} diff --git a/drools/src/test/java/com/baeldung/drools/service/ProductServiceIntegrationTest.java b/drools/src/test/java/com/baeldung/drools/service/ProductServiceIntegrationTest.java new file mode 100644 index 0000000000..08c3fceb7d --- /dev/null +++ b/drools/src/test/java/com/baeldung/drools/service/ProductServiceIntegrationTest.java @@ -0,0 +1,32 @@ +package com.baeldung.drools.service; + +import com.baeldung.drools.model.Product; +import org.junit.Before; +import org.junit.Test; +import static junit.framework.TestCase.assertEquals; + + +public class ProductServiceIntegrationTest { + + private ProductService productService; + + @Before + public void setup(){ + productService=new ProductService(); + } + + + @Test + public void whenProductTypeElectronic_ThenLabelBarcode(){ + Product product=new Product("Microwave","Electronic"); + product=productService.applyLabelToProduct(product); + assertEquals("BarCode",product.getLabel()); + } + + @Test + public void whenProductTypeBook_ThenLabelIsbn(){ + Product product=new Product("AutoBiography","Book"); + product=productService.applyLabelToProduct(product); + assertEquals("ISBN",product.getLabel()); + } +} diff --git a/pom.xml b/pom.xml index b652df1724..18f161efb7 100644 --- a/pom.xml +++ b/pom.xml @@ -221,6 +221,7 @@ spring-data-gemfire mybatis spring-drools + drools