@Test
  public void testSetGlobal() throws Exception {
    String str = "";
    str += "package org.drools \n";
    str += "import org.drools.Cheese \n";
    str += "global java.util.List list1 \n";
    str += "global java.util.List list2 \n";
    str += "global java.util.List list3 \n";
    str += "rule rule1 \n";
    str += "  when \n";
    str += "    $c : Cheese() \n";
    str += " \n";
    str += "  then \n";
    str += "    $c.setPrice( 30 ); \n";
    str += "    list1.add( $c ); \n";
    str += "    list2.add( $c ); \n";
    str += "    list3.add( $c ); \n";
    str += "end\n";

    Cheese stilton = new Cheese("stilton", 5);
    List list1 = new ArrayList();
    List list2 = new ArrayList();
    List list3 = new ArrayList();

    StatelessKnowledgeSession ksession =
        getSession2(ResourceFactory.newByteArrayResource(str.getBytes()));
    Command setGlobal1 = CommandFactory.newSetGlobal("list1", list1);
    Command setGlobal2 = CommandFactory.newSetGlobal("list2", list2, true);
    Command setGlobal3 = CommandFactory.newSetGlobal("list3", list3, "outList3");
    Command insert = CommandFactory.newInsert(stilton);

    List cmds = new ArrayList();
    cmds.add(setGlobal1);
    cmds.add(setGlobal2);
    cmds.add(setGlobal3);
    cmds.add(insert);

    ExecutionResults result =
        (ExecutionResults) ksession.execute(CommandFactory.newBatchExecution(cmds));

    assertEquals(30, stilton.getPrice());

    assertNull(result.getValue("list1"));

    list2 = (List) result.getValue("list2");
    assertEquals(1, list2.size());
    assertSame(stilton, list2.get(0));

    list3 = (List) result.getValue("outList3");
    assertEquals(1, list3.size());
    assertSame(stilton, list3.get(0));
  }
  @Test
  public void testInsertObject() throws Exception {
    String str = "";
    str += "package org.drools \n";
    str += "import org.drools.Cheese \n";
    str += "rule rule1 \n";
    str += "  when \n";
    str += "    $c : Cheese() \n";
    str += " \n";
    str += "  then \n";
    str += "    $c.setPrice( 30 ); \n";
    str += "end\n";

    Cheese stilton = new Cheese("stilton", 5);

    StatelessKnowledgeSession ksession =
        getSession2(ResourceFactory.newByteArrayResource(str.getBytes()));
    GenericCommand cmd = (GenericCommand) CommandFactory.newInsert(stilton, "outStilton");
    BatchExecutionCommandImpl batch =
        new BatchExecutionCommandImpl(Arrays.asList(new GenericCommand<?>[] {cmd}));

    ExecutionResults result = (ExecutionResults) ksession.execute(batch);
    stilton = (Cheese) result.getValue("outStilton");
    assertEquals(30, stilton.getPrice());
  }
示例#3
0
  protected Collection<ReportItem> evaluate(Object... elements) {
    StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
    Collection<ReportItem> reportItems = new ArrayList<ReportItem>();

    List<Command<?>> commands = new ArrayList<Command<?>>();
    for (Object o : elements) {
      commands.add(CommandFactory.newInsert(o));
    }
    commands.add(CommandFactory.newFireAllRules());
    commands.add(CommandFactory.newQuery("reports", "getReports"));

    ExecutionResults results = ksession.execute(CommandFactory.newBatchExecution(commands));
    // System.out.println(results.getIdentifiers());

    QueryResults queryResults = (QueryResults) results.getValue("reports");
    for (QueryResultsRow result : queryResults) {
      reportItems.add((ReportItem) result.get("item"));
    }

    return reportItems;
  }
  @Test
  public void testQuery() throws Exception {
    String str = "";
    str += "package org.drools.test  \n";
    str += "import org.drools.Cheese \n";
    str += "query cheeses \n";
    str += "    stilton : Cheese(type == 'stilton') \n";
    str += "    cheddar : Cheese(type == 'cheddar', price == stilton.price) \n";
    str += "end\n";

    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kbuilder.add(ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL);

    if (kbuilder.hasErrors()) {
      fail(kbuilder.getErrors().toString());
    }

    KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
    kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

    kbase = SerializationHelper.serializeObject(kbase);

    StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
    Cheese stilton1 = new Cheese("stilton", 1);
    Cheese cheddar1 = new Cheese("cheddar", 1);
    Cheese stilton2 = new Cheese("stilton", 2);
    Cheese cheddar2 = new Cheese("cheddar", 2);
    Cheese stilton3 = new Cheese("stilton", 3);
    Cheese cheddar3 = new Cheese("cheddar", 3);

    Set set = new HashSet();
    List list = new ArrayList();
    list.add(stilton1);
    list.add(cheddar1);
    set.add(list);

    list = new ArrayList();
    list.add(stilton2);
    list.add(cheddar2);
    set.add(list);

    list = new ArrayList();
    list.add(stilton3);
    list.add(cheddar3);
    set.add(list);

    List<Command> cmds = new ArrayList<Command>();
    cmds.add(CommandFactory.newInsert(stilton1));
    cmds.add(CommandFactory.newInsert(stilton2));
    cmds.add(CommandFactory.newInsert(stilton3));
    cmds.add(CommandFactory.newInsert(cheddar1));
    cmds.add(CommandFactory.newInsert(cheddar2));
    cmds.add(CommandFactory.newInsert(cheddar3));

    cmds.add(CommandFactory.newQuery("cheeses", "cheeses"));

    ExecutionResults batchResult =
        (ExecutionResults) ksession.execute(CommandFactory.newBatchExecution(cmds));

    org.drools.runtime.rule.QueryResults results =
        (org.drools.runtime.rule.QueryResults) batchResult.getValue("cheeses");
    assertEquals(3, results.size());
    assertEquals(2, results.getIdentifiers().length);
    Set newSet = new HashSet();
    for (org.drools.runtime.rule.QueryResultsRow result : results) {
      list = new ArrayList();
      list.add(result.get("stilton"));
      list.add(result.get("cheddar"));
      newSet.add(list);
    }
    assertEquals(set, newSet);
  }