├── .gitignore ├── .idea ├── azure │ └── azureSettings.xml ├── compiler.xml ├── encodings.xml ├── jarRepositories.xml ├── libraries │ ├── Maven__aopalliance_aopalliance_1_0.xml │ ├── Maven__ch_qos_logback_logback_classic_1_1_7.xml │ ├── Maven__ch_qos_logback_logback_core_1_1_7.xml │ ├── Maven__com_google_guava_guava_18_0.xml │ ├── Maven__com_google_inject_guice_no_aop_4_0.xml │ ├── Maven__com_google_protobuf_protobuf_java_2_6_0.xml │ ├── Maven__com_thoughtworks_xstream_xstream_1_4_10.xml │ ├── Maven__commons_codec_commons_codec_1_10.xml │ ├── Maven__commons_io_commons_io_2_5.xml │ ├── Maven__commons_lang_commons_lang_2_6.xml │ ├── Maven__javax_annotation_jsr250_api_1_0.xml │ ├── Maven__javax_enterprise_cdi_api_1_0.xml │ ├── Maven__javax_inject_javax_inject_1.xml │ ├── Maven__javax_xml_stream_stax_api_1_0_2.xml │ ├── Maven__junit_junit_4_12.xml │ ├── Maven__org_antlr_antlr_runtime_3_5_2.xml │ ├── Maven__org_apache_ant_ant_1_8_4.xml │ ├── Maven__org_apache_ant_ant_launcher_1_8_4.xml │ ├── Maven__org_apache_commons_commons_lang3_3_4.xml │ ├── Maven__org_apache_httpcomponents_httpclient_4_2_6.xml │ ├── Maven__org_apache_httpcomponents_httpcore_4_4_6.xml │ ├── Maven__org_apache_maven_maven_aether_provider_3_3_9.xml │ ├── Maven__org_apache_maven_maven_artifact_3_3_9.xml │ ├── Maven__org_apache_maven_maven_builder_support_3_3_9.xml │ ├── Maven__org_apache_maven_maven_compat_3_3_9.xml │ ├── Maven__org_apache_maven_maven_core_3_3_9.xml │ ├── Maven__org_apache_maven_maven_model_3_3_9.xml │ ├── Maven__org_apache_maven_maven_model_builder_3_3_9.xml │ ├── Maven__org_apache_maven_maven_plugin_api_3_3_9.xml │ ├── Maven__org_apache_maven_maven_repository_metadata_3_3_9.xml │ ├── Maven__org_apache_maven_maven_settings_3_3_9.xml │ ├── Maven__org_apache_maven_maven_settings_builder_3_3_9.xml │ ├── Maven__org_apache_maven_wagon_wagon_http_2_10.xml │ ├── Maven__org_apache_maven_wagon_wagon_http_shared_2_10.xml │ ├── Maven__org_apache_maven_wagon_wagon_provider_api_2_10.xml │ ├── Maven__org_apache_poi_poi_3_13.xml │ ├── Maven__org_apache_poi_poi_ooxml_3_13.xml │ ├── Maven__org_apache_poi_poi_ooxml_schemas_3_13.xml │ ├── Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml │ ├── Maven__org_codehaus_plexus_plexus_classworlds_2_5_2.xml │ ├── Maven__org_codehaus_plexus_plexus_component_annotations_1_6.xml │ ├── Maven__org_codehaus_plexus_plexus_interpolation_1_21.xml │ ├── Maven__org_codehaus_plexus_plexus_utils_3_0_22.xml │ ├── Maven__org_drools_drools_compiler_7_4_1_Final.xml │ ├── Maven__org_drools_drools_core_7_4_1_Final.xml │ ├── Maven__org_drools_drools_decisiontables_7_4_1_Final.xml │ ├── Maven__org_drools_drools_templates_7_4_1_Final.xml │ ├── Maven__org_eclipse_aether_aether_api_1_0_2_v20150114.xml │ ├── Maven__org_eclipse_aether_aether_connector_basic_1_0_2_v20150114.xml │ ├── Maven__org_eclipse_aether_aether_impl_1_0_2_v20150114.xml │ ├── Maven__org_eclipse_aether_aether_spi_1_0_2_v20150114.xml │ ├── Maven__org_eclipse_aether_aether_transport_file_1_0_2_v20150114.xml │ ├── Maven__org_eclipse_aether_aether_transport_http_1_0_2_v20150114.xml │ ├── Maven__org_eclipse_aether_aether_transport_wagon_1_0_2_v20150114.xml │ ├── Maven__org_eclipse_aether_aether_util_1_0_2_v20150114.xml │ ├── Maven__org_eclipse_jdt_core_compiler_ecj_4_4_2.xml │ ├── Maven__org_eclipse_sisu_org_eclipse_sisu_inject_0_3_2.xml │ ├── Maven__org_eclipse_sisu_org_eclipse_sisu_plexus_0_3_2.xml │ ├── Maven__org_hamcrest_hamcrest_core_1_3.xml │ ├── Maven__org_jsoup_jsoup_1_7_2.xml │ ├── Maven__org_kie_kie_api_7_4_1_Final.xml │ ├── Maven__org_kie_kie_ci_7_4_1_Final.xml │ ├── Maven__org_kie_kie_internal_7_4_1_Final.xml │ ├── Maven__org_mvel_mvel2_2_3_2_Final.xml │ ├── Maven__org_slf4j_jcl_over_slf4j_1_7_21.xml │ ├── Maven__org_slf4j_slf4j_api_1_7_21.xml │ ├── Maven__org_sonatype_plexus_plexus_cipher_1_7.xml │ ├── Maven__org_sonatype_plexus_plexus_sec_dispatcher_1_3.xml │ ├── Maven__org_springframework_spring_core_4_3_18.xml │ ├── Maven__org_uberfire_uberfire_maven_integration_1_4_0_Final.xml │ ├── Maven__org_uberfire_uberfire_maven_support_1_4_0_Final.xml │ ├── Maven__stax_stax_api_1_0_1.xml │ ├── Maven__xmlpull_xmlpull_1_1_3_1.xml │ └── Maven__xpp3_xpp3_min_1_1_4c.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── LICENCSE ├── README.MD ├── drools.iml ├── pom.xml └── src ├── main ├── java │ └── net │ │ └── cloudburo │ │ └── drools │ │ ├── config │ │ └── DroolsBeanFactory.java │ │ └── model │ │ ├── Customer.java │ │ └── Offer.java └── resources │ └── net │ └── cloudburo │ └── drools │ └── rules │ └── DroolsDiscount.xlsx └── test └── java └── net └── cloudburo └── drools └── service └── DiscountExcelIntegrationTest.java /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Java template 3 | # Compiled class file 4 | *.class 5 | 6 | # Log file 7 | *.log 8 | 9 | # BlueJ files 10 | *.ctxt 11 | 12 | # Mobile Tools for Java (J2ME) 13 | .mtj.tmp/ 14 | 15 | # Package Files # 16 | *.jar 17 | *.war 18 | *.nar 19 | *.ear 20 | *.zip 21 | *.tar.gz 22 | *.rar 23 | 24 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 25 | hs_err_pid* 26 | 27 | .gitignore 28 | .idea/workspace.xml 29 | target/ 30 | -------------------------------------------------------------------------------- /.idea/azure/azureSettings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_7.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_7.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_google_guava_guava_18_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_google_inject_guice_no_aop_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_google_protobuf_protobuf_java_2_6_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_thoughtworks_xstream_xstream_1_4_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__commons_io_commons_io_2_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__javax_annotation_jsr250_api_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__javax_enterprise_cdi_api_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__javax_inject_javax_inject_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__javax_xml_stream_stax_api_1_0_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__junit_junit_4_12.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_ant_ant_1_8_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_ant_ant_launcher_1_8_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_commons_commons_lang3_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_2_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_maven_aether_provider_3_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_maven_artifact_3_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_maven_builder_support_3_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_maven_compat_3_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_maven_core_3_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_maven_model_3_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_maven_model_builder_3_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_maven_plugin_api_3_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_maven_repository_metadata_3_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_maven_settings_3_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_maven_settings_builder_3_3_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_wagon_wagon_http_2_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_wagon_wagon_http_shared_2_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_maven_wagon_wagon_provider_api_2_10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_poi_poi_3_13.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_poi_poi_ooxml_3_13.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_poi_poi_ooxml_schemas_3_13.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_codehaus_plexus_plexus_classworlds_2_5_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_codehaus_plexus_plexus_component_annotations_1_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_codehaus_plexus_plexus_interpolation_1_21.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_codehaus_plexus_plexus_utils_3_0_22.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_drools_drools_compiler_7_4_1_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_drools_drools_core_7_4_1_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_drools_drools_decisiontables_7_4_1_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_drools_drools_templates_7_4_1_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_eclipse_aether_aether_api_1_0_2_v20150114.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_eclipse_aether_aether_connector_basic_1_0_2_v20150114.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_eclipse_aether_aether_impl_1_0_2_v20150114.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_eclipse_aether_aether_spi_1_0_2_v20150114.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_eclipse_aether_aether_transport_file_1_0_2_v20150114.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_eclipse_aether_aether_transport_http_1_0_2_v20150114.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_eclipse_aether_aether_transport_wagon_1_0_2_v20150114.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_eclipse_aether_aether_util_1_0_2_v20150114.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_eclipse_jdt_core_compiler_ecj_4_4_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_eclipse_sisu_org_eclipse_sisu_inject_0_3_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_eclipse_sisu_org_eclipse_sisu_plexus_0_3_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_jsoup_jsoup_1_7_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_kie_kie_api_7_4_1_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_kie_kie_ci_7_4_1_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_kie_kie_internal_7_4_1_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_mvel_mvel2_2_3_2_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_21.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_21.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_sonatype_plexus_plexus_cipher_1_7.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_sonatype_plexus_plexus_sec_dispatcher_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_core_4_3_18.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_uberfire_uberfire_maven_integration_1_4_0_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_uberfire_uberfire_maven_support_1_4_0_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__stax_stax_api_1_0_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__xmlpull_xmlpull_1_1_3_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__xpp3_xpp3_min_1_1_4c.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | /usr/local/bin/bower 9 | 10 | 11 | 12 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | Android 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /LICENCSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2018 Felix Kuestahler 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # Tutorial: Decision Tables in Excel 2 | 3 | This is a modified sample of the work done by [www.baeldung.com](https://www.baeldung.com), credit goes to them. 4 | 5 | Decision tables are a "precise yet compact" (ref. Wikipedia) way of representing conditional logic, and are well suited 6 | to business level rules. 7 | 8 | Drools supports managing rules in a spreadsheet format. Supported formats are Excel (XLS), and CSV, which means that a 9 | variety of spreadsheet programs can be used for defining the business rules. 10 | 11 | The Tutorial Guide can be found under 12 | [dev.cloudburo.net](https://dev.cloudburo.net/2018/05/10/tutorial-drools-decision-tables-in-excel-for-a-product-proposal.html) 13 | 14 | 15 | 16 | ## Drools Documentation 17 | - [Decision Tables in Excel](https://docs.jboss.org/drools/release/5.2.0.Final/drools-expert-docs/html/ch06.html) 18 | 19 | ## Relevant Articles: 20 | - [Introduction to Drools](http://www.baeldung.com/drools) 21 | - [Drools Using Rules from Excel Files](http://www.baeldung.com/drools-excel) 22 | - [An Example of Backward Chaining in Drools](http://www.baeldung.com/drools-backward-chaining) 23 | -------------------------------------------------------------------------------- /drools.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | net.cloudburo 6 | drools 7 | 1.0.0-SNAPSHOT 8 | 9 | 10 | 11 | org.apache.maven.plugins 12 | maven-compiler-plugin 13 | ${maven-compiler-plugin.version} 14 | 15 | 1.8 16 | 1.8 17 | 18 | 19 | 20 | 21 | 22 | 23 | org.apache.httpcomponents 24 | httpcore 25 | ${http-component-version} 26 | 27 | 28 | 29 | org.kie 30 | kie-ci 31 | ${drools-version} 32 | 33 | 34 | org.drools 35 | drools-decisiontables 36 | ${drools-version} 37 | 38 | 39 | org.drools 40 | drools-core 41 | ${drools-version} 42 | 43 | 44 | org.drools 45 | drools-compiler 46 | ${drools-version} 47 | 48 | 49 | org.apache.poi 50 | poi 51 | ${apache-poi-version} 52 | 53 | 54 | org.apache.poi 55 | poi-ooxml 56 | ${apache-poi-version} 57 | 58 | 59 | org.springframework 60 | spring-core 61 | ${spring-core.version} 62 | 63 | 64 | junit 65 | junit 66 | ${junit.version} 67 | test 68 | 69 | 70 | 71 | org.slf4j 72 | slf4j-api 73 | ${org.slf4j.version} 74 | 75 | 76 | ch.qos.logback 77 | logback-classic 78 | ${logback.version} 79 | 80 | 81 | ch.qos.logback 82 | logback-core 83 | ${logback.version} 84 | 85 | 86 | org.slf4j 87 | jcl-over-slf4j 88 | ${org.slf4j.version} 89 | 90 | 91 | 92 | 93 | 3.7.0 94 | 4.4.6 95 | 7.4.1.Final 96 | 3.13 97 | 4.3.18.RELEASE 98 | 4.12 99 | 1.7.21 100 | 1.1.7 101 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /src/main/java/net/cloudburo/drools/config/DroolsBeanFactory.java: -------------------------------------------------------------------------------- 1 | package net.cloudburo.drools.config; 2 | 3 | import org.drools.decisiontable.DecisionTableProviderImpl; 4 | import org.kie.api.KieServices; 5 | import org.kie.api.builder.*; 6 | import org.kie.api.io.Resource; 7 | import org.kie.api.runtime.KieContainer; 8 | import org.kie.api.runtime.KieSession; 9 | import org.kie.internal.builder.DecisionTableConfiguration; 10 | import org.kie.internal.builder.DecisionTableInputType; 11 | import org.kie.internal.builder.KnowledgeBuilderFactory; 12 | import org.kie.internal.io.ResourceFactory; 13 | 14 | public class DroolsBeanFactory { 15 | 16 | private KieServices kieServices=KieServices.Factory.get(); 17 | 18 | 19 | public KieSession getKieSession(Resource dt) { 20 | KieFileSystem kieFileSystem = kieServices.newKieFileSystem() 21 | .write(dt); 22 | 23 | KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem) 24 | .buildAll(); 25 | 26 | KieRepository kieRepository = kieServices.getRepository(); 27 | 28 | ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId(); 29 | 30 | KieContainer kieContainer = kieServices.newKieContainer(krDefaultReleaseId); 31 | 32 | KieSession ksession = kieContainer.newKieSession(); 33 | 34 | return ksession; 35 | } 36 | 37 | /* 38 | * Can be used for debugging 39 | * Input excelFile example: com/baeldung/drools/rules/Discount.xls 40 | */ 41 | public String getDrlFromExcel(String excelFile) { 42 | DecisionTableConfiguration configuration = KnowledgeBuilderFactory.newDecisionTableConfiguration(); 43 | configuration.setInputType(DecisionTableInputType.XLS); 44 | 45 | Resource dt = ResourceFactory.newClassPathResource(excelFile, getClass()); 46 | 47 | DecisionTableProviderImpl decisionTableProvider = new DecisionTableProviderImpl(); 48 | 49 | String drl = decisionTableProvider.loadFromResource(dt, null); 50 | 51 | return drl; 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/net/cloudburo/drools/model/Customer.java: -------------------------------------------------------------------------------- 1 | package net.cloudburo.drools.model; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class Customer { 7 | private CustomerLifeStage lifestage; 8 | private CustomerAssets assets; 9 | private List customerNeeds = new ArrayList<>(); 10 | 11 | public Customer() { 12 | super(); 13 | } 14 | 15 | public void setLifeStage(CustomerLifeStage lifestage) { 16 | 17 | this.lifestage = lifestage; 18 | } 19 | 20 | public CustomerLifeStage getLifeStage() { 21 | 22 | return lifestage; 23 | } 24 | 25 | public void addNeed(CustomerNeed need) { 26 | 27 | customerNeeds.add(need); 28 | } 29 | 30 | public List getNeeds() { 31 | return customerNeeds; 32 | } 33 | 34 | public void setAssets(CustomerAssets assets) { 35 | this.assets = assets; 36 | } 37 | 38 | public CustomerAssets getAssets() { 39 | return assets; 40 | } 41 | 42 | public enum CustomerNeed { 43 | SAVINGACCOUNT, 44 | LIFEINSURANCE, 45 | DIGITALBANKING, 46 | STUDENTLOAN, 47 | MORTAGE 48 | } 49 | 50 | // https://www.peoples-ebank.com/lifestages.html 51 | public enum CustomerLifeStage { 52 | GETTINGSTARTED, 53 | CAREERFOCUSED, 54 | ADVICEFAMILY, 55 | EMPTYNESTER, 56 | GOLDENYEARS, 57 | BUSINESS 58 | } 59 | 60 | public enum CustomerAssets { 61 | TO50K, 62 | FROM50KTO150K, 63 | FROM150KTO300K, 64 | OVER300K 65 | } 66 | 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/net/cloudburo/drools/model/Offer.java: -------------------------------------------------------------------------------- 1 | package net.cloudburo.drools.model; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class Offer { 7 | 8 | private ProductPackage financialPackage; 9 | private List products = new ArrayList(); 10 | private int discount; 11 | 12 | public int getDiscount() { 13 | return discount; 14 | } 15 | 16 | public void setDiscount(int discount) { 17 | this.discount = discount; 18 | } 19 | 20 | public void setFinancialPackage(ProductPackage financialPackage) { 21 | this.financialPackage = financialPackage; 22 | } 23 | 24 | public ProductPackage getFinancialPackage() { 25 | return financialPackage; 26 | } 27 | 28 | public void addSingleProduct(Product prod){ 29 | products.add(prod); 30 | } 31 | 32 | public List getProducts() { 33 | return products; 34 | } 35 | 36 | public enum Product { 37 | LOAN, 38 | SUPERLOAN, 39 | INSURANCE 40 | } 41 | 42 | public enum ProductPackage { 43 | GETTINGSTARTED_PACKAGE, 44 | CAREERFOCUSED_PACKAGE, 45 | ADVICEFAMILY_PACKAGE, 46 | EMPTYNESTER_PACKAGE, 47 | GOLDENYEARS_PACKAGE, 48 | BUSINESS_PACKAGE 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/resources/net/cloudburo/drools/rules/DroolsDiscount.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talfco/tutorial-drools-decisiontable/6222de942da9d40247cd11c21b3035ca98628ede/src/main/resources/net/cloudburo/drools/rules/DroolsDiscount.xlsx -------------------------------------------------------------------------------- /src/test/java/net/cloudburo/drools/service/DiscountExcelIntegrationTest.java: -------------------------------------------------------------------------------- 1 | package net.cloudburo.drools.service; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | 5 | import net.cloudburo.drools.model.Offer; 6 | import org.junit.Before; 7 | import org.junit.Test; 8 | import org.kie.api.io.Resource; 9 | import org.kie.api.runtime.KieSession; 10 | import org.kie.internal.io.ResourceFactory; 11 | 12 | import net.cloudburo.drools.config.DroolsBeanFactory; 13 | import net.cloudburo.drools.model.Customer; 14 | 15 | public class DiscountExcelIntegrationTest { 16 | 17 | private KieSession kSession; 18 | 19 | @Before 20 | public void setup() { 21 | Resource resource = ResourceFactory.newClassPathResource("net/cloudburo/drools/rules/DroolsDiscount.xlsx", getClass()); 22 | kSession = new DroolsBeanFactory().getKieSession(resource); 23 | System.out.println(new DroolsBeanFactory().getDrlFromExcel("net/cloudburo/drools/rules/DroolsDiscount.xlsx")); 24 | } 25 | 26 | @Test 27 | public void giveIndvidualLongStanding_whenFireRule_thenCorrectDiscount() throws Exception { 28 | // Add a Customer with its personal data and needs, used for the LHS Decision 29 | Customer customer = new Customer(); 30 | customer.setLifeStage(Customer.CustomerLifeStage.CAREERFOCUSED); 31 | customer.setAssets(Customer.CustomerAssets.FROM150KTO300K); 32 | customer.addNeed(Customer.CustomerNeed.LIFEINSURANCE); 33 | customer.addNeed(Customer.CustomerNeed.SAVINGACCOUNT); 34 | customer.addNeed(Customer.CustomerNeed.MORTAGE); 35 | kSession.insert(customer); 36 | // Now we add the global variable which we use to communicate back our 37 | Offer offer = new Offer(); 38 | kSession.setGlobal("offer", offer); 39 | kSession.fireAllRules(); 40 | assertEquals(offer.getDiscount(), 10); 41 | assertEquals(offer.getFinancialPackage(), Offer.ProductPackage.CAREERFOCUSED_PACKAGE); 42 | assertEquals(offer.getProducts().size(),2); 43 | } 44 | 45 | 46 | } 47 | --------------------------------------------------------------------------------