@Override
                    public Observable<Void> call(Notification<ByteBuf> notif) {
                        if (!verifyStatus(notif)) {
                            return Observable.error(notif.getThrowable());
                        }
                        System.out.print("Updating user recommendations...");
                        return updateRecommendations().materialize().flatMap(
                                new Func1<Notification<ByteBuf>, Observable<Void>>() {
                                    @Override
                                    public Observable<Void> call(Notification<ByteBuf> notif) {
                                        if (!verifyStatus(notif)) {
                                            return Observable.error(notif.getThrowable());
                                        }
                                        System.out.println("Searching through the movie catalog...");
                                        return searchCatalog();
                                    }
                                });
                    }
Base class for the transport/template and proxy examples. It orchestrates application flow, and
handles result(s) from the server. The request execution is implemented in the derived classes, in a way
specific for each API abstration. This separation of concerns makes it is easy to compare complexity of different APIs.

@author Tomasz Bak
ribbon-examples/src/main/java/com/netflix/ribbon/examples/rx/AbstractRxMovieClient.java