/** * Convenience method to execute this <code>RuleDefinition</code> for several {@link RuleInput} * s. The amount of {@link RuleInput}s equals the amount of executions of this * <code>RuleDefinition</code>. Each {@link RuleInput} concludes in a invocation of * {@link #execute(RuleInput, Map<String, Object>)}. * * @param inputs * A collection of {@link RuleInput} to be processed. * @param variables * The session variables. * @return A collection of {@link RuleOutput}s. * @throws RuleExecutionException * If rule execution fails. * @see RuleInput * @see RuleOutput */ public Collection<RuleOutput> execute(Collection<RuleInput> inputs, Map<String, Object> variables) throws RuleExecutionException { checkNotNull(inputs, "The RuleInputs must not be null!"); Iterator<RuleInput> iterator = inputs.iterator(); Set<RuleOutput> outputs = Sets.newHashSet(); while (iterator.hasNext()) { outputs.add(execute(iterator.next(), variables)); } return outputs; }
@Test public void ruleWithConditionFailureExecution() throws RuleDefinitionException, RuleExecutionException { RuleDefinition ruleDefinition = Rules.define(RuleG.class); String inputStr = "hallo"; RuleInput input = new RuleInput(Tags.tag("A", inputStr)); RuleOutput output = ruleDefinition.execute(input, Collections.<String, Object> emptyMap()); assertThat(output.getRuleName(), equalTo(ruleDefinition.getName())); assertThat(output.getConditionFailures(), hasSize(1)); assertThat(output.getTags(), empty()); } }
@Test public void simpleRuleExecution() throws RuleDefinitionException, RuleExecutionException { RuleDefinition ruleDefinition = Rules.define(RuleA.class); String inputStr = "hallo"; RuleInput input = new RuleInput(Tags.tag(Tags.ROOT_TAG, inputStr)); RuleOutput output = ruleDefinition.execute(input, Collections.<String, Object> emptyMap()); assertThat(output.getRuleName(), equalTo(ruleDefinition.getName())); assertThat(output.getTags(), hasSize(1)); assertThat(output.getTags().iterator().next().getValue(), equalTo((Object) (inputStr + inputStr))); }
@Test public void ruleWithSessionVariableExecution() throws RuleDefinitionException, RuleExecutionException { RuleDefinition ruleDefinition = Rules.define(RuleWithSessionVariable.class); String inputStr = "hallo"; String sessionVar = "sessionVar"; RuleInput input = new RuleInput(Tags.tag(Tags.ROOT_TAG, inputStr)); RuleOutput output = ruleDefinition.execute(input, Collections.singletonMap(sessionVar, (Object) sessionVar)); assertThat(output.getRuleName(), equalTo(ruleDefinition.getName())); assertThat(output.getTags(), hasSize(1)); assertThat(output.getTags().iterator().next().getValue(), equalTo((Object) (inputStr + sessionVar))); }
@Test public void ruleWithConditionSuccessExecution() throws RuleDefinitionException, RuleExecutionException { RuleDefinition ruleDefinition = Rules.define(RuleF.class); String inputStrA = "hallo"; String inputStrE = "again"; Tag tagA = Tags.tag("A", inputStrA); Tag tagE = Tags.tag("E", inputStrE); RuleInput inputE = new RuleInput(tagE, Arrays.asList(tagA, tagE)); RuleOutput output = ruleDefinition.execute(inputE, Collections.<String, Object> emptyMap()); assertThat(output.getRuleName(), equalTo(ruleDefinition.getName())); assertThat(output.getTags(), hasSize(1)); assertThat(output.getTags().iterator().next().getValue(), equalTo((Object) (inputStrA + inputStrE))); }
Collection<RuleOutput> outputs = ruleDef.execute(inputs, Session.this.sessionContext.getSessionVariables());