@Test public void storeMultipleWithConditionFailures() { ConditionFailure failure1 = new ConditionFailure("ConditionX", "SomeHint"); ConditionFailure failure2 = new ConditionFailure("ConditionY", "SomeHint"); RuleOutput outputA = new RuleOutput("RuleA", "A", Collections.singleton(failure1), Collections.<Tag> emptySet()); RuleOutput outputB = new RuleOutput("RuleB", "B", Collections.singleton(failure2), Collections.<Tag> emptySet()); storage.store(Arrays.asList(outputA, outputB)); assertThat(storage.getAvailableTagTypes(), empty()); assertThat(storage.getAllOutputs().keySet(), empty()); assertThat(storage.getAllOutputsWithConditionFailures().keySet(), hasSize(2)); assertThat(storage.getAllOutputsWithConditionFailures().get("A"), containsInAnyOrder(outputA)); assertThat(storage.getAllOutputsWithConditionFailures().get("B"), containsInAnyOrder(outputB)); }
@Test public void storeWithConditionFailures() { ConditionFailure failure = new ConditionFailure("ConditionX", "SomeHint"); RuleOutput output = new RuleOutput("RuleA", "A", Collections.singleton(failure), Collections.<Tag> emptySet()); storage.store(output); assertThat(storage.getAvailableTagTypes(), empty()); assertThat(storage.getAllOutputs().keySet(), empty()); assertThat(storage.getAllOutputsWithConditionFailures().keySet(), hasSize(1)); assertThat(storage.getAllOutputsWithConditionFailures().get("A"), containsInAnyOrder(output)); }
@Test public void storeWithAndWithoutConditionFailure() { ConditionFailure failure = new ConditionFailure("ConditionX", "SomeHint"); RuleOutput outputA = new RuleOutput("RuleA", "A", Collections.singleton(failure), Collections.<Tag> emptySet()); Tag rootTag = Tags.tag(Tags.ROOT_TAG, "root"); Tag tagB = Tags.tag("B", "inputB", rootTag); RuleOutput outputB = new RuleOutput("RuleB", "B", Collections.<ConditionFailure> emptySet(), Collections.singleton(tagB)); storage.store(Arrays.asList(outputA, outputB)); assertThat(storage.getAvailableTagTypes(), containsInAnyOrder("B")); assertThat(storage.getAllOutputs().keySet(), hasSize(1)); assertThat(storage.getAllOutputs().keySet(), containsInAnyOrder("B")); assertThat(storage.getAllOutputs().get("A"), empty()); assertThat(storage.getAllOutputs().get("B"), containsInAnyOrder(outputB)); assertThat(storage.getAllOutputsWithConditionFailures().keySet(), hasSize(1)); assertThat(storage.getAllOutputsWithConditionFailures().get("A"), containsInAnyOrder(outputA)); }
@Test public void mapWithConditionFailuresLeafs() { Tag rootTag = Tags.tag(Tags.ROOT_TAG, "root"); Tag tagA = Tags.tag("A", "inputA", rootTag); Tag tagB = Tags.tag("B", "inputB", rootTag); Tags.tag("C", "inputC", tagB); ConditionFailure failure = new ConditionFailure("ConditionX", "SomeHint"); Tag tagD = Tags.tag("D", "inputD", tagA); RuleOutput outputA = new RuleOutput("RuleA", "A", Collections.<ConditionFailure> emptySet(), Collections.singleton(tagA)); RuleOutput outputB = new RuleOutput("RuleB", "B", Collections.<ConditionFailure> emptySet(), Collections.singleton(tagB)); RuleOutput outputC = new RuleOutput("RuleC", "C", Collections.singleton(failure), Collections.<Tag> emptySet()); RuleOutput outputD = new RuleOutput("RuleD", "D", Collections.<ConditionFailure> emptySet(), Collections.singleton(tagD)); storage.store(Arrays.asList(outputA, outputB, outputC, outputD)); Multimap<String, Tag> tags = storage.mapTags(TagState.LEAF); assertThat(tags.size(), equalTo(1)); assertThat(tags.get("A"), empty()); assertThat(tags.get("B"), empty()); assertThat(tags.get("C"), empty()); assertThat(tags.get("D"), containsInAnyOrder(tagD)); } }
Tag tagD1 = Tags.tag("D1", input, tagC); Tag tagD2 = Tags.tag("D2", input, tagC); ConditionFailure cFailure1 = new ConditionFailure("Cond1", "test hint"); ConditionFailure cFailure2 = new ConditionFailure("Cond2", "test hint2"); RuleOutput output1 = new RuleOutput("RuleA", "A", Arrays.asList(cFailure1), Arrays.asList(tagA)); RuleOutput output2 = new RuleOutput("RuleB", "B", Arrays.asList(cFailure2), Arrays.asList(tagB));
/** * Executes this {@link ConditionMethod}. If the #method does not succeed a * {@link ConditionFailure} is returned. Otherwise null is returned. * * @param context * The current executing {@link ExecutionContext} * @return A {@link ConditionFailure} if condition fails, null otherwise * @throws RuleExecutionException * If execution of the condition method fails with an exception. * @see ExecutionContext * @see ConditionFailure */ public ConditionFailure execute(ExecutionContext context) throws RuleExecutionException { try { boolean valid = (boolean) ReflectionUtils.invokeMethod(getMethod(), context.getInstance()); if (!valid) { // Store information about the failed condition for later usage return new ConditionFailure(getName(), getHint()); } return null; } catch (Exception e) { throw new RuleExecutionException("Invocation of condition method failed.", context, e); } }