20 import static ca.uqac.lif.cep.Connector.BOTTOM;
21 import static ca.uqac.lif.cep.Connector.INPUT;
22 import static ca.uqac.lif.cep.Connector.OUTPUT;
23 import static ca.uqac.lif.cep.Connector.TOP;
25 import ca.uqac.lif.cep.Connector;
26 import ca.uqac.lif.cep.Pushable;
27 import ca.uqac.lif.cep.functions.ApplyFunction;
28 import ca.uqac.lif.cep.functions.ApplyFunctionPartial;
29 import ca.uqac.lif.cep.functions.Constant;
30 import ca.uqac.lif.cep.functions.FunctionTree;
31 import ca.uqac.lif.cep.functions.StreamVariable;
32 import ca.uqac.lif.cep.io.Print;
33 import ca.uqac.lif.cep.ltl.Eventually;
34 import ca.uqac.lif.cep.tmf.Filter;
35 import ca.uqac.lif.cep.tmf.Fork;
36 import ca.uqac.lif.cep.util.Booleans;
37 import ca.uqac.lif.cep.util.Equals;
51 public static void main(String[] args)
54 Fork f1 =
new Fork(2);
55 ApplyFunctionPartial imp =
new ApplyFunctionPartial(
56 new FunctionTree(Booleans.implies,
57 new FunctionTree(Equals.instance,
58 StreamVariable.X,
new Constant(
"open")),
60 ApplyFunction close =
new ApplyFunction(
61 new FunctionTree(Equals.instance,
62 StreamVariable.X,
new Constant(
"close")));
63 Eventually e =
new Eventually();
64 Fork f2 =
new Fork(2);
65 Connector.connect(f1, BOTTOM, f2, INPUT);
66 Connector.connect(f2, TOP, imp, TOP);
67 Connector.connect(f2, BOTTOM, close, INPUT);
68 Connector.connect(close, e);
69 Connector.connect(e, OUTPUT, imp, BOTTOM);
70 Filter filter =
new Filter();
71 Connector.connect(f1, TOP, filter, TOP);
72 Connector.connect(imp, OUTPUT, filter, BOTTOM);
73 Print print =
new Print();
74 print.setPrefix(
"Output: ").setSeparator(
"\n");
75 Connector.connect(filter, print);
76 Pushable p = f1.getPushableInput();
77 System.out.println(
"Pushing nop");
79 System.out.println(
"Pushing open");
81 System.out.println(
"Pushing read");
83 System.out.println(
"Pushing close");
Using an LTL expression to filter events in an input stream.