/* # Licensed Materials - Property of IBM # Copyright IBM Corp. 2015 */ package simple; import com.ibm.streamsx.topology.TStream; import com.ibm.streamsx.topology.Topology; import com.ibm.streamsx.topology.context.StreamsContextFactory; import com.ibm.streamsx.topology.function.Predicate; /** * Sample filtering echo topology application. This Java application builds a * simple topology that echos its command line arguments to standard output. * <BR> * The application implements the typical pattern of code that declares a * topology followed by submission of the topology to a Streams context * {@code com.ibm.streamsx.topology.context.StreamsContext}. * <BR> * This demonstrates use of Java functional logic to filter the tuples. * An in-line anonymous class implements the filtering logic, in this * case only echo tuples that start with the letter {@code d}. * <P> * This topology is always executed in embedded mode, * within this JVM. * <BR> * This may be executed from the {@code samples/java/functional} directory as: * <UL> * <LI>{@code ant run.filterecho} - Using Apache Ant, this will run in embedded * mode.</LI> * <LI> * {@code java -cp functionalsamples.jar:../../../com.ibm.streamsx.topology/lib/com.ibm.streamsx.topology.jar:$STREAMS_INSTALL/lib/com.ibm.streams.operator.samples.jar * simple.FilterEcho "d print this" "omit this" * } - Run directly from the command line in embedded mode. * <LI> * An application execution within your IDE once you set the class path to include the correct jars.</LI> * </UL> * </P> */ public class FilterEcho { /** * Sample filtering echo topology application. This Java application builds a * simple topology that echos its command line arguments to standard output. * <BR> * The application implements the typical pattern of code that declares a * topology followed by submission of the topology to a Streams context (@code * com.ibm.streamsx.topology.context.StreamsContext}. * */ @SuppressWarnings("serial") public static void main(String[] args) throws Exception { Topology topology = new Topology("FilterEcho"); TStream<String> echo = topology.strings(args); /* * Declare a stream that will execute functional logic * against tuples on the echo stream. * For each tuple that will appear on echo, the below * test(tuple) method will be called, it it returns * true then the tuple will appear on the filtered * stream, otherwise the tuple is discarded. */ TStream<String> filtered = echo.filter(new Predicate<String>() { @Override public boolean test(String tuple) { return tuple.startsWith("d"); } }); filtered.print(); /* * At this point the topology is declared with a single * stream that is printed to System.out. */ /* * Now execute the topology by submitting to an * embedded (within this JVM) StreamsContext. */ StreamsContextFactory.getEmbedded().submit(topology).get(); } }