/** * Copyright (C) 2015 Typesafe Inc. */ package docs.stream; import akka.actor.ActorSystem; import akka.actor.Cancellable; import akka.http.javadsl.model.Uri; import akka.dispatch.Futures; import akka.japi.function.Creator; import akka.japi.Pair; import akka.japi.function.Function; import akka.stream.*; import akka.stream.javadsl.*; import akka.stream.testkit.TestPublisher; import akka.stream.testkit.TestSubscriber; import akka.util.ByteString; import scala.Option; import scala.concurrent.Future; import scala.concurrent.duration.FiniteDuration; import scala.concurrent.Promise; import scala.runtime.BoxedUnit; import org.reactivestreams.Publisher; import org.reactivestreams.Subscriber; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Optional; import java.util.concurrent.TimeUnit; import java.nio.charset.Charset; public class MigrationsJava { // This is compile-only code, no need for actually running anything. public static ActorMaterializer mat = null; public static ActorSystem sys = null; public static class SomeInputStream extends InputStream { public SomeInputStream() { } @Override public int read() throws IOException { return 0; } } public static class SomeOutputStream extends OutputStream { @Override public void write(int b) throws IOException { return; } } public static void main(String[] args) { Outlet outlet = null; Outlet outlet1 = null; Outlet outlet2 = null; Inlet inlet = null; Inlet inlet1 = null; Inlet inlet2 = null; Flow flow = Flow.of(Integer.class); Flow flow1 = Flow.of(Integer.class); Flow flow2 = Flow.of(Integer.class); Promise> promise = null; { Graph, BoxedUnit> graphSource = null; Graph, BoxedUnit> graphSink = null; Graph, BoxedUnit> graphFlow = null; //#flow-wrap Source source = Source.fromGraph(graphSource); Sink sink = Sink.fromGraph(graphSink); Flow aflow = Flow.fromGraph(graphFlow); Flow.fromSinkAndSource(Sink.head(), Source.single(0)); Flow.fromSinkAndSourceMat(Sink.head(), Source.single(0), Keep.left()); //#flow-wrap Graph, BoxedUnit> bidiGraph = null; //#bidi-wrap BidiFlow bidiFlow = BidiFlow.fromGraph(bidiGraph); BidiFlow.fromFlows(flow1, flow2); BidiFlow.fromFlowsMat(flow1, flow2, Keep.both()); //#bidi-wrap } { //#graph-create GraphDSL.create(builder -> { //... return ClosedShape.getInstance(); }); GraphDSL.create(builder -> { //... return new FlowShape<>(inlet, outlet); }); //#graph-create } { //#graph-create-2 GraphDSL.create(builder -> { //... return SourceShape.of(outlet); }); GraphDSL.create(builder -> { //... return SinkShape.of(inlet); }); GraphDSL.create(builder -> { //... return FlowShape.of(inlet, outlet); }); GraphDSL.create(builder -> { //... return BidiShape.of(inlet1, outlet1, inlet2, outlet2); }); //#graph-create-2 } { //#graph-builder GraphDSL.create(builder -> { builder.from(outlet).toInlet(inlet); builder.from(outlet).via(builder.add(flow)).toInlet(inlet); builder.from(builder.add(Source.single(0))).to(builder.add(Sink.head())); //... return ClosedShape.getInstance(); }); //#graph-builder } //#source-creators Source>> src = Source.maybe(); // Complete the promise with an empty option to emulate the old lazyEmpty promise.trySuccess(scala.Option.empty()); final Source ticks = Source.tick( FiniteDuration.create(0, TimeUnit.MILLISECONDS), FiniteDuration.create(200, TimeUnit.MILLISECONDS), "tick"); final Source pubSource = Source.fromPublisher(TestPublisher.manualProbe(true, sys)); final Source futSource = Source.fromFuture(Futures.successful(42)); final Source> subSource = Source.asSubscriber(); //#source-creators //#sink-creators final Sink subSink = Sink.fromSubscriber(TestSubscriber.manualProbe(sys)); //#sink-creators //#sink-as-publisher final Sink> pubSink = Sink.asPublisher(false); final Sink> pubSinkFanout = Sink.asPublisher(true); //#sink-as-publisher //#empty-flow Flow emptyFlow = Flow.create(); // or Flow emptyFlow2 = Flow.of(Integer.class); //#empty-flow //#flatMapConcat Flow.>create(). flatMapConcat(i -> i); //#flatMapConcat //#group-flatten Flow.of(Integer.class) .groupBy(2, in -> in % 2) // the first parameter sets max number of substreams .map(subIn -> + 3) .concatSubstreams(); //#group-flatten final int maxDistinctWords = 1000; //#group-fold Flow.of(String.class) .groupBy(maxDistinctWords, i -> i) .fold(Pair.create("", 0), (pair, word) -> Pair.create(word, pair.second() + 1)) .mergeSubstreams(); //#group-fold Uri uri = null; //#raw-query final Optional theRawQueryString = uri.rawQueryString(); //#raw-query //#query-param final Optional aQueryParam = uri.query().get("a"); //#query-param //#file-source-sink final Source> fileSrc = FileIO.fromFile(new File(".")); final Source> otherFileSrc = FileIO.fromFile(new File("."), 1024); final Sink> fileSink = FileIO.toFile(new File(".")); //#file-source-sink //#input-output-stream-source-sink final Source> inputStreamSrc = StreamConverters.fromInputStream((Creator) () -> new SomeInputStream()); final Source> otherInputStreamSrc = StreamConverters.fromInputStream((Creator) () -> new SomeInputStream(), 1024); final Sink> outputStreamSink = StreamConverters.fromOutputStream((Creator) () -> new SomeOutputStream()); //#input-output-stream-source-sink //#output-input-stream-source-sink final FiniteDuration timeout = FiniteDuration.Zero(); final Source outputStreamSrc = StreamConverters.asOutputStream(); final Source otherOutputStreamSrc = StreamConverters.asOutputStream(timeout); final Sink someInputStreamSink = StreamConverters.asInputStream(); final Sink someOtherInputStreamSink = StreamConverters.asInputStream(timeout); //#output-input-stream-source-sink } }