Search in sources :

Example 1 with Tuple3

use of io.vavr.Tuple3 in project rulesservice by genny-project.

the class RulesLoader method processFileRealms.

private static List<Tuple3<String, String, String>> processFileRealms(final String realm, String inputFileStr) {
    File file = new File(inputFileStr);
    String fileName = inputFileStr.replaceFirst(".*/(\\w+).*", "$1");
    String fileNameExt = inputFileStr.replaceFirst(".*/\\w+\\.(.*)", "$1");
    List<Tuple3<String, String, String>> rules = new ArrayList<Tuple3<String, String, String>>();
    if (!file.isFile()) {
        // DIRECTORY
        if (!fileName.startsWith("XX")) {
            String localRealm = realm;
            if (fileName.startsWith("prj_") || fileName.startsWith("PRJ_")) {
                // extract realm name
                localRealm = fileName.substring("prj_".length()).toLowerCase();
            }
            final List<String> filesList = Vertx.currentContext().owner().fileSystem().readDirBlocking(inputFileStr);
            for (final String dirFileStr : filesList) {
                // use
                List<Tuple3<String, String, String>> childRules = processFileRealms(localRealm, dirFileStr);
                // directory
                // name
                // as
                // rulegroup
                rules.addAll(childRules);
            }
        }
        return rules;
    } else {
        Buffer buf = Vertx.currentContext().owner().fileSystem().readFileBlocking(inputFileStr);
        try {
            if ((!fileName.startsWith("XX")) && (fileNameExt.equalsIgnoreCase("drl"))) {
                // ignore files that start
                // with XX
                final String ruleText = buf.toString();
                Tuple3<String, String, String> rule = (Tuple.of(realm, fileName + "." + fileNameExt, ruleText));
                System.out.println(realm + " Loading in Rule:" + rule._1 + " of " + inputFileStr);
                rules.add(rule);
            } else if ((!fileName.startsWith("XX")) && (fileNameExt.equalsIgnoreCase("bpmn"))) {
                // ignore files
                // that start
                // with XX
                final String bpmnText = buf.toString();
                Tuple3<String, String, String> bpmn = (Tuple.of(realm, fileName + "." + fileNameExt, bpmnText));
                System.out.println(realm + " Loading in BPMN:" + bpmn._1 + " of " + inputFileStr);
                rules.add(bpmn);
            } else if ((!fileName.startsWith("XX")) && (fileNameExt.equalsIgnoreCase("xls"))) {
                // ignore files that
                // start with XX
                final String xlsText = buf.toString();
                Tuple3<String, String, String> xls = (Tuple.of(realm, fileName + "." + fileNameExt, xlsText));
                System.out.println(realm + " Loading in XLS:" + xls._1 + " of " + inputFileStr);
                rules.add(xls);
            }
            return rules;
        } catch (final DecodeException dE) {
        }
    }
    return null;
}
Also used : Buffer(io.vertx.rxjava.core.buffer.Buffer) Tuple3(io.vavr.Tuple3) ArrayList(java.util.ArrayList) File(java.io.File) DecodeException(io.vertx.core.json.DecodeException)

Example 2 with Tuple3

use of io.vavr.Tuple3 in project rulesservice by genny-project.

the class KieTest method drlWhenConditionTest.

@Test
public void drlWhenConditionTest() {
    String rule = "";
    rule += "package org.kie.test\n";
    rule += "import java.util.Map;\n";
    rule += "global java.util.List list\n";
    rule += "rule rule2\n";
    rule += "when\n";
    rule += "  $a : Integer(intValue > 1)\n";
    rule += "  $map : Map($value: this[\"token\"] != null)\n";
    rule += "then\n";
    rule += "  System.out.println(\"value a=\"+$a);\n";
    rule += "  list.add( $a );\n";
    rule += "end\n";
    rule += "\n";
    String rulesGroup = "GRP_RULES_TEST";
    List<Tuple3<String, String, String>> rules = new ArrayList<Tuple3<String, String, String>>();
    List<Tuple2<String, Object>> globals = new ArrayList<Tuple2<String, Object>>();
    EventBus eb = null;
    rules.add(Tuple.of("genny", "rule2.drl", rule));
    List<?> list = new ArrayList<Object>();
    globals.add(Tuple.of("list", list));
    RulesLoader.setupKieRules(rulesGroup, rules);
    Map<String, KieBase> cache = RulesLoader.getKieBaseCache();
    Integer count = cache.size();
    System.out.println("Loaded Test Kie Session with " + count + " ruleGroups");
    List<Object> facts = new ArrayList<Object>();
    facts.add(1);
    facts.add(2);
    facts.add(3);
    Map<String, String> keyvalue = new HashMap<String, String>();
    keyvalue.put("token", "TOKEN");
    RulesLoader.executeStatefull(rulesGroup, eb, globals, facts, keyvalue);
    assertThat(list.size(), is(2));
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) EventBus(io.vertx.rxjava.core.eventbus.EventBus) Tuple2(io.vavr.Tuple2) KieBase(org.kie.api.KieBase) Tuple3(io.vavr.Tuple3) Test(org.junit.Test)

Example 3 with Tuple3

use of io.vavr.Tuple3 in project rulesservice by genny-project.

the class KieTest method setupKieSessionTest.

@Test
public void setupKieSessionTest() {
    String rule = "";
    rule += "package org.kie.test\n";
    rule += "global java.util.List list\n";
    rule += "rule rule1\n";
    rule += "when\n";
    rule += "  Integer(intValue > 0)\n";
    rule += "then\n";
    rule += "  list.add( 1 );\n";
    rule += "  System.out.println(\"Added!\");\n";
    rule += "end\n";
    rule += "\n";
    String rulesGroup = "GRP_RULES_TEST";
    List<Tuple3<String, String, String>> rules = new ArrayList<Tuple3<String, String, String>>();
    rules.add(Tuple.of("genny", "rule1.drl", rule));
    List<Tuple2<String, Object>> globals = new ArrayList<Tuple2<String, Object>>();
    List<?> list = new ArrayList<Object>();
    globals.add(Tuple.of("list", list));
    RulesLoader.setupKieRules(rulesGroup, rules);
    Map<String, KieBase> cache = RulesLoader.getKieBaseCache();
    Integer count = cache.size();
    System.out.println("Loaded Test Kie Session with " + count + " ruleGroups");
    EventBus eb = null;
    List<Object> facts = new ArrayList<Object>();
    facts.add(1);
    facts.add(2);
    facts.add(3);
    Map<String, String> keyvalue = new HashMap<String, String>();
    keyvalue.put("token", null);
    RulesLoader.executeStatefull(rulesGroup, eb, globals, facts, keyvalue);
    assertThat(list.size(), is(3));
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) EventBus(io.vertx.rxjava.core.eventbus.EventBus) Tuple2(io.vavr.Tuple2) KieBase(org.kie.api.KieBase) Tuple3(io.vavr.Tuple3) Test(org.junit.Test)

Example 4 with Tuple3

use of io.vavr.Tuple3 in project rulesservice by genny-project.

the class EBCHandlers method registerHandlers.

public static void registerHandlers(final EventBus eventBus) {
    Consumer.getFromCmds().subscribe(arg -> {
        JsonObject payload = processMessage("Service Command", arg);
        if ("CMD_RELOAD_RULES".equals(payload.getString("cmd_type"))) {
            if ("RELOAD_RULES_FROM_FILES".equals(payload.getString("code"))) {
                String rulesDir = payload.getString("rulesDir");
                RulesLoader.loadInitialRules(rulesDir);
            }
        }
    });
    Consumer.getFromEvents().subscribe(arg -> {
        JsonObject payload = processMessage("Event", arg);
        QEventMessage eventMsg = null;
        String evtMsg = "Event:";
        if (payload.getString("event_type").equals("EVT_ATTRIBUTE_VALUE_CHANGE")) {
            eventMsg = JsonUtils.fromJson(payload.toString(), QEventAttributeValueChangeMessage.class);
        } else if (payload.getString("event_type").equals("BTN_CLICK")) {
            eventMsg = JsonUtils.fromJson(payload.toString(), QEventBtnClickMessage.class);
        } else if (payload.getString("event_type").equals("EVT_LINK_CHANGE")) {
            eventMsg = JsonUtils.fromJson(payload.toString(), QEventLinkChangeMessage.class);
        } else {
            try {
                eventMsg = JsonUtils.fromJson(payload.toString(), QEventMessage.class);
            } catch (NoClassDefFoundError e) {
                log.error("No class def found [" + payload.toString() + "]");
            }
        }
        processMsg("Event:" + payload.getString("event_type"), payload.getString("ruleGroup"), eventMsg, eventBus, payload.getString("token"));
    });
    Consumer.getFromData().subscribe(arg -> {
        JsonObject payload = processMessage("Data", arg);
        if (payload.getString("msg_type").equalsIgnoreCase("DATA_MSG")) {
            // should always be data if coming through
            // this channel
            QDataAnswerMessage dataMsg = null;
            // Is it a Rule?
            if (payload.getString("data_type").equals(Rule.class.getSimpleName())) {
                JsonArray ja = payload.getJsonArray("items");
                String ruleGroup = ja.getJsonObject(0).getString("ruleGroup");
                String ruleText = ja.getJsonObject(0).getString("rule");
                String ruleCode = ja.getJsonObject(0).getString("code");
                // QDataRuleMessage ruleMsg = gson3.fromJson(json, QDataRuleMessage.class);
                System.out.println("Incoming Rule :" + ruleText);
                if (rulesDir == null) {
                    rulesDir = "rules";
                }
                String rulesGroup = rulesDir;
                List<Tuple3<String, String, String>> rules = new ArrayList<Tuple3<String, String, String>>();
                rules.add(Tuple.of(ruleGroup, ruleCode, ruleText));
                RulesLoader.setupKieRules(rulesGroup, rules);
            } else if (payload.getString("data_type").equals(Answer.class.getSimpleName())) {
                try {
                    dataMsg = JsonUtils.fromJson(payload.toString(), QDataAnswerMessage.class);
                    processMsg("Data:" + dataMsg.getData_type(), payload.getString("ruleGroup"), dataMsg, eventBus, payload.getString("token"));
                } catch (com.google.gson.JsonSyntaxException e) {
                    log.error("BAD Syntax converting to json from " + dataMsg);
                    JsonObject json = new JsonObject(payload.toString());
                    JsonObject answerData = json.getJsonObject("items");
                    JsonArray jsonArray = new JsonArray();
                    jsonArray.add(answerData);
                    json.put("items", jsonArray);
                    dataMsg = JsonUtils.fromJson(json.toString(), QDataAnswerMessage.class);
                    processMsg("Data:" + dataMsg.getData_type(), payload.getString("ruleGroup"), dataMsg, eventBus, payload.getString("token"));
                }
            } else if (payload.getString("data_type").equals(GPS.class.getSimpleName())) {
                QDataGPSMessage dataGPSMsg = null;
                try {
                    dataGPSMsg = JsonUtils.fromJson(payload.toString(), QDataGPSMessage.class);
                    processMsg("GPS", payload.getString("ruleGroup"), dataGPSMsg, eventBus, payload.getString("token"));
                } catch (com.google.gson.JsonSyntaxException e) {
                    log.error("BAD Syntax converting to json from " + dataGPSMsg);
                    JsonObject json = new JsonObject(payload.toString());
                    JsonObject answerData = json.getJsonObject("items");
                    JsonArray jsonArray = new JsonArray();
                    jsonArray.add(answerData);
                    json.put("items", jsonArray);
                    dataGPSMsg = JsonUtils.fromJson(json.toString(), QDataGPSMessage.class);
                    processMsg("GPS:" + dataGPSMsg.getData_type(), payload.getString("ruleGroup"), dataGPSMsg, eventBus, payload.getString("token"));
                }
            } else if (payload.getString("data_type").equals(QDataPaymentsCallbackMessage.class.getSimpleName())) {
                QDataPaymentsCallbackMessage dataCallbackMsg = null;
                try {
                    dataCallbackMsg = JsonUtils.fromJson(payload.toString(), QDataPaymentsCallbackMessage.class);
                    processMsg("Data:" + dataCallbackMsg.getData_type(), payload.getString("ruleGroup"), dataCallbackMsg, eventBus, payload.getString("token"));
                } catch (com.google.gson.JsonSyntaxException e) {
                    log.error("BAD Syntax converting to json from " + dataCallbackMsg);
                    JsonObject json = new JsonObject(payload.toString());
                    dataCallbackMsg = JsonUtils.fromJson(json.toString(), QDataPaymentsCallbackMessage.class);
                    processMsg("Callback:" + dataCallbackMsg.getData_type(), payload.getString("ruleGroup"), dataCallbackMsg, eventBus, payload.getString("token"));
                }
            }
        }
    });
}
Also used : QEventLinkChangeMessage(life.genny.qwanda.message.QEventLinkChangeMessage) QEventAttributeValueChangeMessage(life.genny.qwanda.message.QEventAttributeValueChangeMessage) ArrayList(java.util.ArrayList) JsonObject(io.vertx.core.json.JsonObject) QDataAnswerMessage(life.genny.qwanda.message.QDataAnswerMessage) GPS(life.genny.qwanda.GPS) QEventMessage(life.genny.qwanda.message.QEventMessage) JsonArray(io.vertx.core.json.JsonArray) QDataGPSMessage(life.genny.qwanda.message.QDataGPSMessage) QDataPaymentsCallbackMessage(life.genny.qwanda.message.QDataPaymentsCallbackMessage) Tuple3(io.vavr.Tuple3) Rule(life.genny.qwanda.rule.Rule)

Example 5 with Tuple3

use of io.vavr.Tuple3 in project jdbi by jdbi.

the class TestVavrTupleRowMapperFactoryWithDB method testMapTuple3WithoutSpecifiedColumn_shouldFail.

@Test
public void testMapTuple3WithoutSpecifiedColumn_shouldFail() throws SQLException {
    Handle handle = dbRule.getSharedHandle();
    handle.registerRowMapper(new SomethingMapper());
    assertThatThrownBy(() -> handle.createQuery("select * from something where id = 1").mapTo(new GenericType<Tuple3<Integer, Something, Integer>>() {
    }).findOnly()).isInstanceOf(NoSuchMapperException.class).hasMessageContaining("TupleMappers config class");
}
Also used : SomethingMapper(org.jdbi.v3.core.mapper.SomethingMapper) Tuple3(io.vavr.Tuple3) NoSuchMapperException(org.jdbi.v3.core.mapper.NoSuchMapperException) Handle(org.jdbi.v3.core.Handle) Test(org.junit.Test)

Aggregations

Tuple3 (io.vavr.Tuple3)5 ArrayList (java.util.ArrayList)4 Test (org.junit.Test)3 Tuple2 (io.vavr.Tuple2)2 EventBus (io.vertx.rxjava.core.eventbus.EventBus)2 HashMap (java.util.HashMap)2 KieBase (org.kie.api.KieBase)2 DecodeException (io.vertx.core.json.DecodeException)1 JsonArray (io.vertx.core.json.JsonArray)1 JsonObject (io.vertx.core.json.JsonObject)1 Buffer (io.vertx.rxjava.core.buffer.Buffer)1 File (java.io.File)1 GPS (life.genny.qwanda.GPS)1 QDataAnswerMessage (life.genny.qwanda.message.QDataAnswerMessage)1 QDataGPSMessage (life.genny.qwanda.message.QDataGPSMessage)1 QDataPaymentsCallbackMessage (life.genny.qwanda.message.QDataPaymentsCallbackMessage)1 QEventAttributeValueChangeMessage (life.genny.qwanda.message.QEventAttributeValueChangeMessage)1 QEventLinkChangeMessage (life.genny.qwanda.message.QEventLinkChangeMessage)1 QEventMessage (life.genny.qwanda.message.QEventMessage)1 Rule (life.genny.qwanda.rule.Rule)1