use of org.kie.api.command.Command in project drools by kiegroup.
the class CommandSerializationTest method batchExecutionImplSerializationTest.
@Test
@Ignore
public void batchExecutionImplSerializationTest() throws Exception {
DefaultFactHandle factHandle = new DefaultFactHandle(13, "entry-point-id", 42, 84, 400l, "fact");
BatchExecutionCommandImpl batchCmd = new BatchExecutionCommandImpl();
batchCmd.setLookup("lookup");
{
AbortWorkItemCommand cmd = new AbortWorkItemCommand(23l);
batchCmd.addCommand(cmd);
}
{
String externalForm = factHandle.toExternalForm();
assertEquals("FactHandle string", externalForm, DisconnectedFactHandle.newFrom(factHandle).toExternalForm());
DeleteCommand cmd = new DeleteCommand(factHandle);
batchCmd.addCommand(cmd);
}
{
GetGlobalCommand cmd = new GetGlobalCommand("global-id");
cmd.setOutIdentifier("out-id");
batchCmd.addCommand(cmd);
}
{
SetGlobalCommand cmd = new SetGlobalCommand("global-id", new Integer(23));
cmd.setOutIdentifier("out-id");
batchCmd.addCommand(cmd);
}
{
InsertElementsCommand cmd = new InsertElementsCommand();
cmd.setEntryPoint("entry-point");
cmd.setOutIdentifier("out-id");
cmd.setReturnObject(true);
Map<String, Object> mapObj = new HashMap<String, Object>();
mapObj.put("key", "value");
List<Object> objects = new ArrayList<Object>(1);
objects.add(mapObj);
cmd.setObjects(objects);
batchCmd.addCommand(cmd);
}
{
QueryCommand cmd = new QueryCommand();
List<Object> args = new ArrayList<Object>(3);
args.add("this");
args.add(42);
args.add("other");
cmd.setArguments(args);
cmd.setName("query-name");
cmd.setOutIdentifier("out-id");
batchCmd.addCommand(cmd);
}
{
InsertObjectCommand cmd = new InsertObjectCommand();
cmd.setEntryPoint("entry-point");
cmd.setOutIdentifier("out-id");
cmd.setReturnObject(true);
cmd.setObject("object");
batchCmd.addCommand(cmd);
}
{
ModifyCommand cmd = new ModifyCommand();
cmd.setFactHandle(DisconnectedFactHandle.newFrom(factHandle));
List<Setter> setters = new ArrayList<Setter>(2);
Setter setter = new Setter() {
@Override
public String getValue() {
return "blue";
}
@Override
public String getAccessor() {
return "heart";
}
};
setters.add(setter);
setter = new Setter() {
@Override
public String getValue() {
return "hot";
}
@Override
public String getAccessor() {
return "fingers";
}
};
setters.add(setter);
cmd.setSetters(setters);
batchCmd.addCommand(cmd);
}
{
GetObjectCommand cmd = new GetObjectCommand(factHandle, "out-id");
batchCmd.addCommand(cmd);
}
// TODO: implement serialization for agenda filters
{
AgendaFilter[] filters = new AgendaFilter[4];
filters[0] = new RuleNameEndsWithAgendaFilter("suffix", false);
filters[1] = new RuleNameEqualsAgendaFilter("name", true);
filters[2] = new RuleNameMatchesAgendaFilter("regexp", false);
filters[3] = new RuleNameStartsWithAgendaFilter("prefix", false);
for (AgendaFilter filter : filters) {
FireAllRulesCommand cmd = new FireAllRulesCommand(randomString(), random.nextInt(1000), filter);
batchCmd.addCommand(cmd);
}
}
{
AgendaFilter[] filters = new AgendaFilter[4];
filters[0] = new RuleNameEndsWithAgendaFilter("suffix", false);
filters[1] = new RuleNameEqualsAgendaFilter("name", true);
filters[2] = new RuleNameMatchesAgendaFilter("regexp", false);
filters[3] = new RuleNameStartsWithAgendaFilter("prefix", false);
for (AgendaFilter filter : filters) {
FireUntilHaltCommand cmd = new FireUntilHaltCommand(filter);
batchCmd.addCommand(cmd);
}
}
{
Map<String, Object> results = new HashMap<String, Object>(1);
List<String> resultValList = new ArrayList<String>(2);
resultValList.add("yellow");
resultValList.add("chances");
results.put("list", resultValList);
CompleteWorkItemCommand cmd = new CompleteWorkItemCommand(random.nextInt(1000), results);
batchCmd.addCommand(cmd);
}
{
ClassObjectFilter filter = new ClassObjectFilter(String.class);
GetObjectsCommand cmd = new GetObjectsCommand(filter, "out-id");
batchCmd.addCommand(cmd);
}
{
AgendaGroupSetFocusCommand cmd = new AgendaGroupSetFocusCommand(randomString());
batchCmd.addCommand(cmd);
}
{
ClearActivationGroupCommand cmd = new ClearActivationGroupCommand(randomString());
batchCmd.addCommand(cmd);
}
{
ClearAgendaCommand cmd = new ClearAgendaCommand();
batchCmd.addCommand(cmd);
}
{
ClearAgendaGroupCommand cmd = new ClearAgendaGroupCommand(randomString());
batchCmd.addCommand(cmd);
}
{
ClearRuleFlowGroupCommand cmd = new ClearRuleFlowGroupCommand(randomString());
batchCmd.addCommand(cmd);
}
BatchExecutionCommandImpl batchCmdCopy = roundTrip(batchCmd);
assertEquals("Batch cmd lookup", batchCmd.getLookup(), batchCmdCopy.getLookup());
assertEquals("Batch cmd num commands", batchCmd.getCommands().size(), batchCmdCopy.getCommands().size());
// This code should use the utility in kie-test-util when it finally gets moved there..
for (Command copyCmd : batchCmdCopy.getCommands()) {
for (Command origCmd : batchCmd.getCommands()) {
Class cmdClass = origCmd.getClass();
if (copyCmd.getClass().equals(cmdClass)) {
if (cmdClass.equals(DeleteCommand.class)) {
compareFactHandles(((DeleteCommand) origCmd).getFactHandle(), ((DeleteCommand) copyCmd).getFactHandle(), DeleteCommand.class);
} else if (cmdClass.equals(FireAllRulesCommand.class)) {
AgendaFilter origFilter = ((FireAllRulesCommand) origCmd).getAgendaFilter();
AgendaFilter copyFilter = ((FireAllRulesCommand) copyCmd).getAgendaFilter();
if (!origFilter.getClass().equals(copyFilter.getClass())) {
continue;
}
Class agendaFilterClass = origFilter.getClass();
for (Field agendaFilterField : agendaFilterClass.getDeclaredFields()) {
agendaFilterField.setAccessible(true);
Object afFieldOrigVal = agendaFilterField.get(origFilter);
Object afFieldCopyVal = agendaFilterField.get(copyFilter);
if (afFieldOrigVal instanceof Pattern) {
afFieldOrigVal = ((Pattern) afFieldOrigVal).pattern();
afFieldCopyVal = ((Pattern) afFieldCopyVal).pattern();
}
assertEquals(agendaFilterClass.getSimpleName() + "." + agendaFilterField.getName(), afFieldOrigVal, afFieldCopyVal);
}
assertEquals(FireAllRulesCommand.class.getSimpleName() + ".max", ((FireAllRulesCommand) origCmd).getMax(), ((FireAllRulesCommand) copyCmd).getMax());
assertEquals(FireAllRulesCommand.class.getSimpleName() + ".outIdentifier", ((FireAllRulesCommand) origCmd).getOutIdentifier(), ((FireAllRulesCommand) copyCmd).getOutIdentifier());
} else if (cmdClass.equals(FireUntilHaltCommand.class)) {
AgendaFilter origFilter = ((FireUntilHaltCommand) origCmd).getAgendaFilter();
AgendaFilter copyFilter = ((FireUntilHaltCommand) copyCmd).getAgendaFilter();
if (!origFilter.getClass().equals(copyFilter.getClass())) {
continue;
}
Class agendaFilterClass = origFilter.getClass();
for (Field agendaFilterField : agendaFilterClass.getDeclaredFields()) {
agendaFilterField.setAccessible(true);
Object afFieldOrigVal = agendaFilterField.get(origFilter);
Object afFieldCopyVal = agendaFilterField.get(copyFilter);
if (afFieldOrigVal instanceof Pattern) {
afFieldOrigVal = ((Pattern) afFieldOrigVal).pattern();
afFieldCopyVal = ((Pattern) afFieldCopyVal).pattern();
}
assertEquals(agendaFilterClass.getSimpleName() + "." + agendaFilterField.getName(), afFieldOrigVal, afFieldCopyVal);
}
} else {
for (Field cmdField : cmdClass.getDeclaredFields()) {
cmdField.setAccessible(true);
if (Modifier.isTransient(cmdField.getModifiers())) {
continue;
}
Object origVal = cmdField.get(origCmd);
assertNotNull(cmdClass.getSimpleName() + "." + cmdField.getName(), origVal);
Object copyVal = cmdField.get(copyCmd);
assertNotNull("Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), copyVal);
if (origVal instanceof FactHandle) {
compareFactHandles((FactHandle) origVal, (FactHandle) copyVal, cmdClass);
} else if (origVal instanceof ClassObjectSerializationFilter) {
assertEquals("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), ((ClassObjectSerializationFilter) origVal).getClass(), ((ClassObjectSerializationFilter) copyVal).getClass());
} else if (origVal instanceof List) {
List origList = (List) origVal;
if (((List) copyVal).isEmpty()) {
assertTrue("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), origList.isEmpty());
} else {
if (origList.get(0) instanceof Setter) {
for (Object obj : (List) origVal) {
assertTrue("Expected a " + Setter.class.getSimpleName() + " instance (not " + obj.getClass().getSimpleName() + " in " + cmdClass.getSimpleName() + "." + cmdField.getName(), obj instanceof Setter);
Iterator<Object> iter = ((List) copyVal).iterator();
while (iter.hasNext()) {
Setter copySetter = (Setter) iter.next();
if (((Setter) obj).getAccessor().equals(copySetter.getAccessor())) {
assertEquals("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), ((Setter) obj).getValue(), copySetter.getValue());
iter.remove();
}
}
}
assertTrue("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), ((List) copyVal).isEmpty());
} else if (origList.get(0) instanceof Map) {
Map copyMap = (Map) ((List) copyVal).get(0);
for (Object entry : ((Map) origList.get(0)).entrySet()) {
assertTrue("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), (copyMap).containsKey(((Entry) entry).getKey()));
}
}
}
} else {
assertTrue("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), origVal.equals(copyVal));
}
}
}
}
}
}
// verify that BatchExecutionCommandImpl.commands has been filled with all
// of the different types
Field commandsField = BatchExecutionCommandImpl.class.getDeclaredField("commands");
XmlElements xmlElemsAnno = commandsField.getAnnotation(XmlElements.class);
List<Class> cmdTypes = new ArrayList<Class>(xmlElemsAnno.value().length);
for (XmlElement xmlElem : xmlElemsAnno.value()) {
cmdTypes.add(xmlElem.type());
}
// already thoroughly tested..
cmdTypes.remove(SignalEventCommand.class);
// already thoroughly tested..
cmdTypes.remove(StartProcessCommand.class);
for (Command cmd : batchCmd.getCommands()) {
cmdTypes.remove(cmd.getClass());
}
String cmdInstName = cmdTypes.isEmpty() ? "null" : cmdTypes.get(0).getSimpleName();
assertTrue("Please add a " + cmdInstName + " instance to the " + BatchExecutionCommandImpl.class.getSimpleName() + " commands!", cmdTypes.isEmpty());
// other tests for this as part of the REST integration tests..
}
use of org.kie.api.command.Command in project drools by kiegroup.
the class UnicodeInXLSTest method testUnicodeXLSDecisionTable.
@Test
public void testUnicodeXLSDecisionTable() throws FileNotFoundException {
DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration();
dtconf.setInputType(DecisionTableInputType.XLS);
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("unicode.xls", getClass()), ResourceType.DTABLE, dtconf);
if (kbuilder.hasErrors()) {
System.out.println(kbuilder.getErrors().toString());
System.out.println(DecisionTableFactory.loadFromInputStream(getClass().getResourceAsStream("unicode.xls"), dtconf));
fail("Cannot build XLS decision table containing utf-8 characters\n" + kbuilder.getErrors().toString());
}
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilder.getKnowledgePackages());
KieSession ksession = kbase.newKieSession();
List<Command<?>> commands = new ArrayList<Command<?>>();
List<Člověk> dospělí = new ArrayList<Člověk>();
commands.add(CommandFactory.newSetGlobal("dospělí", dospělí));
Člověk Řehoř = new Člověk();
Řehoř.setVěk(30);
Řehoř.setJméno("Řehoř");
commands.add(CommandFactory.newInsert(Řehoř));
commands.add(CommandFactory.newFireAllRules());
ksession.execute(CommandFactory.newBatchExecution(commands));
// people with age greater than 18 should be added to list of adults
assertNotNull(kbase.getRule("org.drools.decisiontable", "přidej k dospělým"));
assertEquals(dospělí.size(), 5);
assertEquals(dospělí.iterator().next().getJméno(), "Řehoř");
assertNotNull(kbase.getRule("org.drools.decisiontable", "привет мир"));
assertNotNull(kbase.getRule("org.drools.decisiontable", "你好世界"));
assertNotNull(kbase.getRule("org.drools.decisiontable", "hallå världen"));
assertNotNull(kbase.getRule("org.drools.decisiontable", "مرحبا العالم"));
ksession.dispose();
}
use of org.kie.api.command.Command in project drools by kiegroup.
the class UnicodeTest method testCzech.
@Test
public void testCzech() {
final KieServices kieServices = KieServices.Factory.get();
final Resource resource = kieServices.getResources().newClassPathResource("unicode.drl", getClass());
final KieBase kbase = KieBaseUtil.getKieBaseFromResources(kieBaseTestConfiguration, resource);
final KieSession ksession = kbase.newKieSession();
final List<Command<?>> commands = new ArrayList<Command<?>>();
final List<Člověk> lidé = new ArrayList<Člověk>();
commands.add(kieServices.getCommands().newSetGlobal("lidé", lidé));
Člověk Řehoř = new Člověk();
Řehoř.setVěk(30);
Řehoř.setJméno("Řehoř");
commands.add(kieServices.getCommands().newInsert(Řehoř));
commands.add(kieServices.getCommands().newFireAllRules());
ksession.execute(kieServices.getCommands().newBatchExecution(commands, null));
Assertions.assertThat(kbase.getRule(TestConstants.PACKAGE_FUNCTIONAL, "příliš žluťoučký kůň úpěl ďábelské ódy")).isNotNull();
Map<String, Object> metaData = kbase.getRule(TestConstants.PACKAGE_FUNCTIONAL, "příliš žluťoučký kůň úpěl ďábelské ódy").getMetaData();
Assertions.assertThat(metaData.get("PrávníPožadavek")).isEqualTo("Osoba starší osmnácti let");
Assertions.assertThat(lidé.size()).isEqualTo(2);
Assertions.assertThat(lidé.get(0).getJméno()).isEqualTo("Řehoř");
Assertions.assertThat(lidé.get(1).getJméno()).isEqualTo("Oldřiška");
}
use of org.kie.api.command.Command in project drools by kiegroup.
the class UnicodeTest method testCzechCSVDecisionTable.
@Test
public void testCzechCSVDecisionTable() throws FileNotFoundException {
final KieServices kieServices = KieServices.Factory.get();
final Resource decisionTable = ResourceUtil.getDecisionTableResourceFromClasspath("unicode.csv", getClass(), DecisionTableInputType.CSV);
KieBase kbase = KieBaseUtil.getKieBaseFromResources(kieBaseTestConfiguration, decisionTable);
KieSession ksession = kbase.newKieSession();
List<Command<?>> commands = new ArrayList<Command<?>>();
List<Člověk> dospělí = new ArrayList<Člověk>();
commands.add(kieServices.getCommands().newSetGlobal("dospělí", dospělí));
Člověk Řehoř = new Člověk();
Řehoř.setVěk(30);
Řehoř.setJméno("Řehoř");
commands.add(kieServices.getCommands().newInsert(Řehoř));
commands.add(kieServices.getCommands().newFireAllRules());
ksession.execute(kieServices.getCommands().newBatchExecution(commands, null));
Assertions.assertThat(kbase.getRule(TestConstants.PACKAGE_FUNCTIONAL, "pokusné pravidlo rozhodovací tabulky")).isNotNull();
Assertions.assertThat(dospělí.size()).isEqualTo(1);
Assertions.assertThat(dospělí.iterator().next().getJméno()).isEqualTo("Řehoř");
}
use of org.kie.api.command.Command in project drools by kiegroup.
the class UnicodeTest method testCzechDomainSpecificLanguage.
@Test
public void testCzechDomainSpecificLanguage() {
final KieServices kieServices = KieServices.Factory.get();
final Resource dsl = kieServices.getResources().newClassPathResource("unicode.dsl", getClass());
final Resource dslr = kieServices.getResources().newClassPathResource("unicode.dslr", getClass());
final KieBase kbase = KieBaseUtil.getKieBaseFromResources(kieBaseTestConfiguration, dsl, dslr);
final KieSession ksession = kbase.newKieSession();
final List<Command<?>> commands = new ArrayList<Command<?>>();
final List<Člověk> dospělí = new ArrayList<Člověk>();
commands.add(kieServices.getCommands().newSetGlobal("dospělí", dospělí));
final Člověk Řehoř = new Člověk();
Řehoř.setVěk(30);
Řehoř.setJméno("Řehoř");
commands.add(kieServices.getCommands().newInsert(Řehoř));
commands.add(kieServices.getCommands().newFireAllRules());
ksession.execute(kieServices.getCommands().newBatchExecution(commands, null));
Assertions.assertThat(kbase.getRule(TestConstants.PACKAGE_FUNCTIONAL, "pokusné doménově specifické pravidlo")).isNotNull();
Assertions.assertThat(dospělí.size()).isEqualTo(1);
Assertions.assertThat(dospělí.iterator().next().getJméno()).isEqualTo("Řehoř");
}
Aggregations