@Override public NFA<Event> createNFA() { Pattern<Event, ?> pattern = Pattern.<Event>begin("1").next("2").within(Time.milliseconds(10)); return NFACompiler.compileFactory(pattern, true).createNFA(); } }
static List<List<Event>> compute(AfterMatchSkipStrategy skipStrategy) throws Exception { List<StreamRecord<Event>> streamEvents = new ArrayList<>(); streamEvents.add(new StreamRecord<>(a)); streamEvents.add(new StreamRecord<>(c)); Pattern<Event, ?> pattern = Pattern.<Event>begin("a").where( new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception { return value.getName().contains("a"); } } ).next("b").where(new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception { return value.getName().contains("b"); } }).oneOrMore().optional().consecutive() .next("c").where(new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception { return value.getName().contains("c"); } }); NFATestHarness nfaTestHarness = NFATestHarness.forPattern(pattern) .withAfterMatchSkipStrategy(skipStrategy) .build(); return nfaTestHarness.feedRecords(streamEvents); } }
private static List<List<Event>> compute(AfterMatchSkipStrategy skipStrategy) throws Exception { List<StreamRecord<Event>> streamEvents = new ArrayList<>(); streamEvents.add(new StreamRecord<>(a1)); streamEvents.add(new StreamRecord<>(b1)); streamEvents.add(new StreamRecord<>(b2)); streamEvents.add(new StreamRecord<>(b3)); Pattern<Event, ?> pattern = Pattern.<Event>begin("start") .where(new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception { return value.getName().equals("a"); } }).next("end") .where(new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception { return value.getName().equals("b"); } }).oneOrMore(); NFATestHarness nfaTestHarness = NFATestHarness.forPattern(pattern) .withAfterMatchSkipStrategy(skipStrategy) .build(); return nfaTestHarness.feedRecords(streamEvents); } }
@Test public void testSkipToNotExistsMatchingPattern() { expectedException.expect(MalformedPatternException.class); expectedException.expectMessage("The pattern name specified in AfterMatchSkipStrategy can not be found in the given Pattern"); Pattern<Event, ?> invalidPattern = Pattern.<Event>begin("start", AfterMatchSkipStrategy.skipToLast("midd")).where(new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception { return value.getName().contains("a"); } }).next("middle").where( new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception { return value.getName().contains("d"); } } ).oneOrMore().optional().next("end").where(new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception { return value.getName().contains("c"); } }); compile(invalidPattern, false); }
@Test public void testCheckingEmptyMatches() { assertThat(NFACompiler.canProduceEmptyMatches(Pattern.begin("a").optional()), is(true)); assertThat(NFACompiler.canProduceEmptyMatches(Pattern.begin("a").oneOrMore().optional()), is(true)); assertThat(NFACompiler.canProduceEmptyMatches(Pattern.begin("a").oneOrMore().optional().next("b").optional()), is(true)); assertThat(NFACompiler.canProduceEmptyMatches(Pattern.begin("a")), is(false)); assertThat(NFACompiler.canProduceEmptyMatches(Pattern.begin("a").oneOrMore()), is(false)); assertThat(NFACompiler.canProduceEmptyMatches(Pattern.begin("a").oneOrMore().next("b").optional()), is(false)); } }
return value.getName().equals("c"); }).next("middle").where(new SimpleCondition<Event>() { private static final long serialVersionUID = 5726188262756267490L;
return value.getName().equals("c"); }).next("middle").where(new SimpleCondition<Event>() { private static final long serialVersionUID = 5726188262756267490L;
return value.getName().equals("c"); }).next("middle").where(new SimpleCondition<Event>() { private static final long serialVersionUID = 5726188262756267490L;
/** * These test simply test that the pattern construction completes without failure. */ @Test public void testStrictContiguity() { Pattern<Object, ?> pattern = Pattern.begin("start").next("next").next("end"); Pattern<Object, ?> previous; Pattern<Object, ?> previous2; assertNotNull(previous = pattern.getPrevious()); assertNotNull(previous2 = previous.getPrevious()); assertNull(previous2.getPrevious()); assertEquals(pattern.getName(), "end"); assertEquals(previous.getName(), "next"); assertEquals(previous2.getName(), "start"); }
@Test public void testStrictContinuityNoResults() throws Exception { List<StreamRecord<Event>> inputEvents = new ArrayList<>(); Event middleEvent1 = new Event(41, "a", 2.0); Event middleEvent2 = new Event(42, "c", 3.0); Event end = new Event(43, "b", 4.0); inputEvents.add(new StreamRecord<>(middleEvent1, 3)); inputEvents.add(new StreamRecord<>(middleEvent2, 4)); inputEvents.add(new StreamRecord<>(end, 5)); Pattern<Event, ?> pattern = Pattern.<Event>begin("middle").where(new SimpleCondition<Event>() { private static final long serialVersionUID = 5726188262756267490L; @Override public boolean filter(Event value) throws Exception { return value.getName().equals("a"); } }).next("end").where(new SimpleCondition<Event>() { private static final long serialVersionUID = 5726188262756267490L; @Override public boolean filter(Event value) throws Exception { return value.getName().equals("b"); } }); NFA<Event> nfa = compile(pattern, false); List<List<Event>> resultingPatterns = feedNFA(inputEvents, nfa); compareMaps(resultingPatterns, Lists.<List<Event>>newArrayList()); }
@Test public void testStrictContinuityWithResults() throws Exception { List<StreamRecord<Event>> inputEvents = new ArrayList<>(); Event middleEvent1 = new Event(41, "a", 2.0); Event end = new Event(42, "b", 4.0); inputEvents.add(new StreamRecord<>(middleEvent1, 3)); inputEvents.add(new StreamRecord<>(end, 5)); Pattern<Event, ?> pattern = Pattern.<Event>begin("middle").where(new SimpleCondition<Event>() { private static final long serialVersionUID = 5726188262756267490L; @Override public boolean filter(Event value) throws Exception { return value.getName().equals("a"); } }).next("end").where(new SimpleCondition<Event>() { private static final long serialVersionUID = 5726188262756267490L; @Override public boolean filter(Event value) throws Exception { return value.getName().equals("b"); } }); NFA<Event> nfa = compile(pattern, false); List<List<Event>> resultingPatterns = feedNFA(inputEvents, nfa); compareMaps(resultingPatterns, Lists.<List<Event>>newArrayList( Lists.newArrayList(middleEvent1, end) )); }
.next("b").where(new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception {
return value.getName().contains("a"); }).next("b").where( new SimpleCondition<Event>() {
).next("c").where(new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception {
@Test public void testNFAChangedOnOneNewComputationState() throws Exception { Pattern<Event, ?> pattern = Pattern.<Event>begin("start").where(new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception { return value.getName().equals("start"); } }).followedBy("a*").where(new SimpleCondition<Event>() { private static final long serialVersionUID = 1858562682635302605L; @Override public boolean filter(Event value) throws Exception { return value.getName().equals("a"); } }).oneOrMore().optional().next("end").where(new IterativeCondition<Event>() { private static final long serialVersionUID = 8061969839441121955L; @Override public boolean filter(Event value, Context<Event> ctx) throws Exception { return value.getName().equals("b"); } }).within(Time.milliseconds(10)); NFA<Event> nfa = compile(pattern, true); NFAState nfaState = nfa.createInitialNFAState(); nfaState.resetStateChanged(); nfa.process(sharedBufferAccessor, nfaState, new Event(6, "start", 1.0), 6L, skipStrategy, timerService); nfaState.resetStateChanged(); nfa.process(sharedBufferAccessor, nfaState, new Event(6, "a", 1.0), 7L, skipStrategy, timerService); assertTrue(nfaState.isStateChanged()); }
.next("b").where(new SimpleCondition<Event>() { @Override public boolean filter(Event value) throws Exception {
@Test public void testStrictContiguityWithCondition() { Pattern<Event, ?> pattern = Pattern.<Event>begin("start").next("next").where(new SimpleCondition<Event>() { private static final long serialVersionUID = -7657256242101104925L; @Override public boolean filter(Event value) throws Exception { return value.getName().equals("foobar"); } }).next("end").where(new SimpleCondition<Event>() { private static final long serialVersionUID = -7597452389191504189L; @Override public boolean filter(Event value) throws Exception { return value.getId() == 42; } }); Pattern<Event, ?> previous; Pattern<Event, ?> previous2; assertNotNull(previous = pattern.getPrevious()); assertNotNull(previous2 = previous.getPrevious()); assertNull(previous2.getPrevious()); assertNotNull(pattern.getCondition()); assertNotNull(previous.getCondition()); assertNotNull(previous2.getCondition()); assertEquals(pattern.getName(), "end"); assertEquals(previous.getName(), "next"); assertEquals(previous2.getName(), "start"); }
return false; }).next("or").or(new SimpleCondition<Event>() { private static final long serialVersionUID = -2775487887505922250L;
@Test public void testPatternWithSubtyping() { Pattern<Event, ?> pattern = Pattern.<Event>begin("start").next("subevent").subtype(SubEvent.class).followedBy("end"); Pattern<Event, ?> previous; Pattern<Event, ?> previous2; assertNotNull(previous = pattern.getPrevious()); assertNotNull(previous2 = previous.getPrevious()); assertNull(previous2.getPrevious()); assertNotNull(previous.getCondition()); assertTrue(previous.getCondition() instanceof SubtypeCondition); assertEquals(pattern.getName(), "end"); assertEquals(previous.getName(), "subevent"); assertEquals(previous2.getName(), "start"); }
@Test public void testPatternWithSubtypingAndFilter() { Pattern<Event, Event> pattern = Pattern.<Event>begin("start").next("subevent").subtype(SubEvent.class).where(new SimpleCondition<SubEvent>() { private static final long serialVersionUID = -4118591291880230304L; @Override public boolean filter(SubEvent value) throws Exception { return false; } }).followedBy("end"); Pattern<Event, ?> previous; Pattern<Event, ?> previous2; assertNotNull(previous = pattern.getPrevious()); assertNotNull(previous2 = previous.getPrevious()); assertNull(previous2.getPrevious()); assertEquals(ConsumingStrategy.SKIP_TILL_NEXT, pattern.getQuantifier().getConsumingStrategy()); assertNotNull(previous.getCondition()); assertEquals(pattern.getName(), "end"); assertEquals(previous.getName(), "subevent"); assertEquals(previous2.getName(), "start"); }